Javascript具有跨平臺、跨瀏覽器的特性,其強大的編程語言特點可以讓我們輕松進行網頁應用開發。而其中最為重要的一項技能之一就是處理多媒體,尤其是音視頻的播放。然而,在網頁應用中,很多視頻文件格式并不被常用的HTML5 Video標簽所支持。就比如說,.avi格式的視頻文件,如果使用HTML5的標簽來播放,那么在很多瀏覽器上是會失效的,甚至無法在一些移動設備上播放。
但是,使用Javascript卻可以非常方便地實現對.avi格式的視頻文件進行播放。主要思路就是通過使用非常流行的JS庫--FFMPEG.js,將.avi文件進行轉碼,轉化成HTML5標簽所支持的格式,再進行網頁的播放。比如這樣:
<html> <head> <title>播放avi視頻</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script async src="http://bgrins.github.io/videoconverter.js/dist/videoconverter.min.js"></script> <script async src="http://bgrins.github.io/videoconverter.js/dist/videoconverterworker.min.js"></script> <script async src="http://bgrins.github.io/filereader.js/filereader.js"></script> <script async src="http://bgrins.github.io/jsmpeg.min.js"></script> </head> <body> <video id="player" width="640" height="480" controls autoplay loop></video> <script> var video = document.getElementById("player"); var fileInput = document.createElement("input"); fileInput.type = "file"; fileInput.addEventListener("change", function(ev) { var file = ev.target.files[0]; var videoObj = new videoconverter.Video(file); var canvas = document.createElement("canvas"); videoObj.convertToDataURL(function(dataURL) { var jsmpeg = new jsmpeg(dataURL, {canvas:canvas}); video.appendChild(canvas); setInterval(jsmpeg.update, 1000/60); }); }); document.body.appendChild(fileInput); </script> </body> </html>
以上代碼就是一個最基本的例子,可以將.avi格式的視頻文件上傳,然后通過FFMPEG.js將其轉成MP4格式,并在網頁中顯示播放。需要了解的是,該過程中使用了一個C++端的程序--FFmpeg,用于視頻編解碼,主要通過JS-FFmpeg來調用其功能。
除了使用FFMPEG.js外,還有一個比較棒的JS庫,就是JSVideo URL Decoder,其是一款非常輕量級的視頻解碼工具。這個庫可以解碼各種格式的視頻,比如FLV、MKV、AVI等,在瀏覽器中播放它們。需要注意的是,這個庫是基于JS的,因而一定會有性能問題。同時,由于JSVideo URL Decoder是逐段逐幀逐像素進行解碼的方式,因此也會對瀏覽器及設備的性能帶來一些負擔。為了避免這一問題,我們可以通過事先將視頻進行縮放,可以在一定程度上解決性能問題。
總體而言,透過本文的講述,你會發現,在Javascript的幫助下,原本只能在特定設備上播放的.avi格式視頻,已經可以經過轉碼或解碼的方式,在全平臺范圍內播放。這些開源項目賜予了我們更大自由度去實現視頻的播放,以上提到的幾款工具都非常開放、易用,具有極高的靈活性和可定制性,任何開發者都可以根據自身業務需求來進行選用。