1. 程式人生 > >視訊播放器開發

視訊播放器開發

在做視訊播放器之前,我們先了解一些基本定義。

基本定義

視訊

連續的影象變化每秒超過24幀畫面以上時,根據視覺暫留原理,人眼無法辨別單幅的靜態畫面;看上去是平滑連續的視覺效果,這樣連續的畫面叫做視訊。

幀率

指的是視訊格式每秒鐘播放的靜態畫面數量。典型的畫面更新率由早期的每秒6或8張(frame per second,簡稱fps)至現今的每秒120張不等。

編解碼

我們知道,其實視訊就是一幀一幀的圖片。計算一下,一部25幀每秒,90分鐘,解析度為1024*768,24位真彩色的視訊,沒有經過壓縮,大小為

1Byte(位元組) = 8bit(位)
一幀大小 = 1024 * 768 * 24 = 18874368(bit) = 2359296(Byte)
總幀數 = 90 * 60 * 25 = 135000
總大小 = 一幀大小 * 總幀數 = 2359296 * 135000 = 318504960000(Byte)= 303750(MB)≈ 296(GB)

從上面的計算可以看出,我們儲存一部90分鐘沒壓縮的電影需要296GB的,2部電影便可佔滿我們電腦整個硬碟。所以我們需要對視訊進行壓縮,這種視訊壓縮技術就是我們所說的編碼。解碼就是將編碼的視訊解壓縮處理。

封裝格式

封裝格式指的是壓縮過的視訊資料和音訊資料打包成一個檔案的規範。我們常見的mp4,flv,avi,rmvb,mkv等,都是代表視訊的封裝格式。

基本原理

播放視訊的基本流程是:解協議 → 解封裝 → 解碼 → 視音訊同步

解協議

就是將流媒體協議的資料,解析為標準的相應的封裝格式資料。視音訊在網路上傳播的時候,常常採用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。這些協議在傳輸視音訊資料的同時,也會傳輸一些信令資料。這些信令資料包括對播放的控制(播放,暫停,停止),或者對網路狀態的描述等。解協議的過程中會去除掉信令資料而只保留視音訊資料。例如,採用RTMP協議傳輸的資料,經過解協議操作後,輸出FLV格式的資料。

解封裝

就是將輸入的封裝格式的資料,分離成為音訊流壓縮編碼資料和視訊流壓縮編碼資料。封裝格式種類很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是將已經壓縮編碼的視訊資料和音訊資料按照一定的格式放到一起。例如,FLV格式的資料,經過解封裝操作後,輸出H.264編碼的視訊碼流和AAC編碼的音訊碼流。

解碼

就是將視訊/音訊壓縮編碼資料,解碼成為非壓縮的視訊/音訊原始資料。音訊的壓縮編碼標準包含AAC,MP3,AC-3等等,視訊的壓縮編碼標準則包含H.264,MPEG2,VC-1等等。解碼是整個系統中最重要也是最複雜的一個環節。通過解碼,壓縮編碼的視訊資料輸出成為非壓縮的顏色資料,例如YUV420P,RGB等等;壓縮編碼的音訊資料輸出成為非壓縮的音訊抽樣資料,例如PCM資料。

視音訊同步

就是根據解封裝模組處理過程中獲取到的引數資訊,同步解碼出來的視訊和音訊資料,並將視訊音訊資料送至系統的顯示卡和音效卡播放出來。

參考資料