在分享視頻播放器的原理之前呢,我們先簡單的看一下播放器在播放網(wǎng)絡(luò)視頻文件和本地視頻文件的經(jīng)過。播放網(wǎng)絡(luò)視頻文件:開始→解協(xié)議→解封裝→解碼音視頻→音視頻同步→結(jié)束。播放本地視頻文件:開始→解封裝→解碼音視頻→音視頻同步→結(jié)束。其實在直播平臺建設(shè)時,需要很多的步驟和工具,視頻播放器只不過是其中一個,但卻是非常重要的“小組件”之一。
通過對比播放器播放網(wǎng)絡(luò)視頻和本地視頻文件的大體流程,我們可以看出,播放網(wǎng)絡(luò)視頻時需要解協(xié)議,而播放本地視頻并不需要解協(xié)議。接下來,我們就來仔細的了解一下播放器在播放過程中每一個步驟的細節(jié)部分。
1.什么是解協(xié)議?
單獨看字面意思可能比較難理解,解協(xié)議就是將流媒體協(xié)議的數(shù)據(jù),解析為相對應(yīng)封裝格式數(shù)據(jù)的過程。通常音視頻在網(wǎng)絡(luò)上進行傳輸時,經(jīng)常會采用各種流媒體協(xié)議。比如HTTP、RTMP等,這些協(xié)議在傳輸音視頻數(shù)據(jù)的同時,也會傳輸一些信令數(shù)據(jù)。這些信令數(shù)據(jù)包括對播放的控制,即播放、暫停、停止,還有對網(wǎng)絡(luò)狀態(tài)的描述等。解協(xié)議的過程,會去除掉信令數(shù)據(jù)然后只保留音視頻數(shù)據(jù)。舉個簡單的例子,如果是采用RTMP協(xié)議進行傳輸?shù)臄?shù)據(jù),經(jīng)過解協(xié)議操作之后,就會輸出FLV格式的數(shù)據(jù)。
2.什么是解封裝?
解封裝,其實就是將輸入的封裝格式的數(shù)據(jù),分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)的過程。通常比較常見的封裝格式有MP4、FLV、AVI等。封裝的作用就是把已經(jīng)壓縮編碼好的視頻數(shù)據(jù)和音頻數(shù)據(jù),按照規(guī)定的格式放在一起。比如,F(xiàn)LV格式的數(shù)據(jù),經(jīng)過解封裝之后會輸出壓縮H.264編碼的視頻碼流和壓縮AAC編碼的音視頻碼流。
3.什么是解碼音視頻?
目前大部分開發(fā)過程中,都需要將音視頻進行解碼操作。將視頻和音頻的壓縮編碼數(shù)據(jù),解碼成為非壓縮的音頻和視頻的原始數(shù)據(jù)。音頻的壓縮編碼標準包括AAC、MP3和AC-3等。這里補充一下,視頻的壓縮編碼標準包括H.264(通用)和MPEG2等。通過解碼壓縮編碼的視頻數(shù)據(jù),會得到非壓縮的顏色數(shù)據(jù),然后再經(jīng)過解碼壓縮編碼的音頻數(shù)據(jù)獲得非壓縮的音頻抽樣數(shù)據(jù),比如PCM數(shù)據(jù)。
4.什么是音視頻同步?
在直播過程中,經(jīng)常會遇到音視頻不同步的情況。比如我們所觀看到的直播畫面已經(jīng)過去了,但是音頻才只播放到上一句,這種情況對于大部分用戶來說都是比較難以忍受的。音視頻同步,就是根據(jù)解封裝模塊的處理過程中,所獲取到的參數(shù)信息,同時解碼出來的音頻和視頻數(shù)據(jù),也會將音頻和視頻數(shù)據(jù)發(fā)送到系統(tǒng)的顯卡和聲卡,從而將其播放出來。
以上就是視頻播放器的簡單原理,其實我們在觀看直播時并不會接觸到這些。但是在直播平臺建設(shè)的過程中,是由這些大大小小的組件進行協(xié)助開發(fā),然后才能開發(fā)出一款款精美的app。由此可見,每一個步驟所需要的都是非常重要的。
本文聲明原創(chuàng),轉(zhuǎn)載請注明出處。
聯(lián)系客服