關於視音頻傳輸和編解碼的一些概念


一、基本概念

1. I/B/P幀

    I幀是內部編碼幀,是一個完整的畫面,P幀是前向參考幀,B幀是雙向參考幀。

    由於I幀是一個完整的圖片,P幀只保留相對於I幀變得部分,它的壓縮比是I幀的50%;

    B幀前后的幀都會引用,壓縮比大概是I幀的50%;

2. I幀和IDR幀(關鍵幀)的區別

     I和IDR幀都是使用幀內預測的。IDR幀的作用是立刻刷新,使錯誤不致傳播,從IDR幀開始,重新算一個新的序列開始編碼。而I幀不具有隨機訪問的能力,這個功能是由IDR承擔。IDR會導致DPB(DecodedPictureBuffer 參考幀列表——這是關鍵所在)清空,而I幀不會IDR圖像一定是I圖像,但I圖像不一定是IDR圖像。一個序列中可以有很多的I圖像,I圖像之后的圖像可以引用I圖像之間的圖像做運動參考。
      對於IDR幀來說,在IDR幀之后的所有幀都不能引用任何IDR幀之前的幀的內容,與此相反,對於普通的I幀來說,位於其之后的B/P幀可以引用位於普通I幀之前的I幀。從隨機存取的視頻流中,播放器永遠可以從一個IDR幀播放,因為在它之后沒有任何幀引用之前的幀。但是,不能在一個沒有IDR幀的視頻中從任意點開始播放,因為后面的幀總是會引用前面的幀。

3. PTS和DTS

    PTS:Presentation time stamp.

    DTS:Decode time stamp. 

    如果視頻中全部是I幀和P幀,那么PTS和DTS都是單調遞增的。如果有B幀,因為它要引用后面的P幀和前面的I幀。DTS的順序是1342,PTS的順序是1234.

 

二、視頻傳輸

  從網絡上接收視頻時首先要解協議(RTSP/RTMP/HTTP),然后是解封裝格式(MKV,RMVB),之后才是將視頻(H264)和音頻(AAC)格式數據分別解碼為圖像(RGB/YUV)和聲音(PCM),再根據時間戳同步播放。 

  RTSP+RTP主要用於IPTV,原因是傳輸數據使用的是UDP,在網絡環境比較穩定的情況下,傳輸效率是比較高的; 

  RTMP主要用於互聯網音視頻傳輸,它使用的是TCP傳輸,因為互聯網環境相對較差,采用RTMP保證了視頻的傳輸質量,但是其傳輸延遲相對較高,傳輸效率相對較低。 

  使用RTMP技術的流媒體系統有一個非常明顯的特點:使用 Flash Player 作為播放器客戶端,而Flash Player 現在已經安裝在了全世界將近99%的PC上,因此一般情況下收看RTMP流媒體系統的視音頻是不需要安裝插件的。用戶只需要打開網頁,就可以直接收看流媒體,十分方便。直播服務普遍采用了RTMP作為流媒體協議,FLV作為封裝格式,H.264作為視頻編碼格式,AAC作為音頻編碼格式。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視頻編碼標准,AAC則是當今實際應用中編碼效率最高的音頻編碼標准。

  librtmp是RTMP協議的實現,可以使用librtmp來實現協議的解析和數據的收發。直播服務器可以基於nginx+rtmp實現;直播客戶端方面采用librtmp負責推流,FFmpeg負責編碼。

  全稱  協議  原理  延時
RTMP  Real time messaging protocol  長連接tcp  每個時刻的數據,收到后立即轉發 1~3s
HLS Http live streaming  短連接http  集合一段時間的數據生成ts文件,更新m3u8

>10s

HTTP-FLV RTMP over http  長連接http  同RTMP,使用http 1~3s


三、視頻壓縮 

  • 視頻壓縮分為有損壓縮和無損壓縮。

  無損壓縮是采用一些壓縮算法壓縮視頻,但是壓縮完畢后還能夠真實的還原原始數據;

  有損壓縮是借助於人眼的一些特性,丟棄一些特定的數據,但是壓縮完畢后的視頻效果還在人眼可以接受的范圍內的特定數據。 

  • 視頻壓縮編碼的主要原理是:

  幀內編碼(變換編碼和熵編碼):像素點之間存在相關性。圖像變換到頻域可以實現去相關和能量集中。

  幀間編碼(運動估計和運動補償):將圖像划分為一個個小區塊,進行預測。 

3.參考資料:

http://blog.csdn.net/leixiaohua1020/article/details/18893769


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM