【音視頻開發-基礎】音視頻開發-基礎之一

1、分辨率、幀率和碼率

  • 幀率:FPS(每秒鐘要多少幀畫面)。
  • 碼率:編碼器每秒編出的數據大小,單位是kbps,比如800kbps代表編碼器每秒產生800kb(或100KB)的數據。
    1. VBR(Variable Bitrate)動態比特率也就是沒有固定的比特率,壓縮軟件在壓縮時根據音頻數據即時確定使用什麼比特率,這是以質量爲前提兼顧文件大小的方式,推薦編碼模式;
    2. ABR(Average Bitrate)平均比特率是VBR的一種插值參數。LAME針對CBR不佳的文件體積比和VBR生成文件大小不定的特點獨創了這種編碼模式。ABR在指定的文件大小內,以每50幀(30幀約1秒)爲一段,低頻和不敏感頻率使用相對低的流量,高頻和大動態表現時使用高流量,可以做爲VBR和CBR的一種折衷選擇。
    3. CBR(Constant Bitrate)常數比特率 指文件從頭到尾都是一種位速率。相對於VBR和ABR來講,它壓縮出來的文件體積很大,而且音質相對於VBR和ABR不會有明顯的提高。

  • 分辨率:單位英寸中所包含的像素點數。

三者的對應直播質量的影響因素:
幀率:影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果碼率爲變量,則幀率也會影響體積,幀率越高,每秒鐘經過的畫面越多,需要的碼率也越高,體積也越大。幀率就是在1秒鐘時間裏傳輸的圖片的幀數,也可以理解爲圖形處理器每秒鐘能夠刷新幾次。

分辨率:影響圖像大小,與圖像大小成正比:分辨率越高,圖像越大;分辨率越低,圖像越小。

清晰度
在碼率一定的情況下,分辨率與清晰度成反比關係:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰。
在分辨率一定的情況下,碼率與清晰度成正比關係,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。

2、I 幀、P 幀和B幀

  • I 幀(Intra coded frames):I 幀圖像採用幀內編碼方式,即只利用了單幀圖像內的空間相關性,而沒有利用時間相關性。I 幀使用幀內壓縮,不使用運動補償,由於 I 幀不依賴其它幀,所以是隨機存取的入點,同時是解碼的基準幀。I 幀主要用於接收機的初始化和信道的獲取,以及節目的切換和插入,I 幀圖像的壓縮倍數相對較低。I 幀圖像是週期性出現在圖像序列中的,出現頻率可由編碼器選擇。
  • P 幀(Predicted frames):P 幀和 B 幀圖像採用幀間編碼方式,即同時利用了空間和時間上的相關性。P 幀圖像只採用前向時間預測,可以提高壓縮效率和圖像質量。P 幀圖像中可以包含幀內編碼的部分,即 P 幀中的每一個宏塊可以是前向預測,也可以是幀內編碼。
  • B 幀(Bi-directional predicted frames):B 幀圖像採用雙向時間預測,可以大大提高壓縮倍數。值得注意的是,由於 B 幀圖像採用了未來幀作爲參考,因此 MPEG-2 編碼碼流中圖像幀的傳輸順序和顯示順序是不同的。

也就是說,一個 I 幀可以不依賴其他幀就解碼出一幅完整的圖像,而 P 幀、B 幀不行。P 幀需要依賴視頻流中排在它前面的幀才能解碼出圖像。B 幀則需要依賴視頻流中排在它前面或後面的幀才能解碼出圖像。

3、DTS和PTS

  • DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在於告訴播放器該在什麼時候解碼這一幀的數據。
  • PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什麼時候顯示這一幀的數據。

需要注意的是:雖然 DTS、PTS 是用於指導播放端的行爲,但它們是在編碼的時候由編碼器生成的。

當視頻流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。

4、GOP(Group of picture)

關鍵幀的週期,也就是兩個IDR幀之間的距離,一個幀組的最大幀數,一般而言,每一秒視頻至少需要使用 1 個關鍵幀。增加關鍵幀個數可改善質量,但是同時增加帶寬和網絡負載。

需要說明的是,通過提高GOP值來提高圖像質量是有限度的,在遇到場景切換的情況時,H.264編碼器會自動強制插入一個I幀,此時實際的GOP值被縮短了。另一方面,在一個GOP中,P、B幀是由I幀預測得到的,當I幀的圖像質量比較差時,會影響到一個GOP中後續P、B幀的圖像質量,直到下一個GOP開始纔有可能得以恢復,所以GOP值也不宜設置過大。

同時,由於P、B幀的複雜度大於I幀,所以過多的P、B幀會影響編碼效率,使編碼效率降低。另外,過長的GOP還會影響Seek操作的響應速度,由於P、B幀是由前面的I或P幀預測得到的,所以Seek操作需要直接定位,解碼某一個P或B幀時,需要先解碼得到本GOP內的I幀及之前的N個預測幀纔可以,GOP值越長,需要解碼的預測幀就越多,seek響應的時間也越長。

5、profile level

分別是BP、EP、MP、HP
- BP-Baseline Profile:基本畫質。支持I/P 幀,只支持無交錯(Progressive)和CAVLC;
- EP-Extended profile:進階畫質。支持I/P/B/SP/SI 幀,只支持無交錯(Progressive)和CAVLC;
- MP-Main profile:主流畫質。提供I/P/B 幀,支持無交錯(Progressive)和交錯(Interlaced),也支持CAVLC 和CABAC 的支持;
- HP-High profile:高級畫質。在main Profile 的基礎上增加了8x8內部預測、自定義量化、無損視頻編碼和更多的YUV 格式;

6、音視頻的同步

一個媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預測,所以音頻幀的 DTS、PTS 順序是一致的。

音頻視頻混合在一起播放,就呈現了我們常常看到的廣義的視頻。在音視頻一起播放的時候,我們通常需要面臨一個問題:怎麼去同步它們,以免出現畫不對聲的情況。

要實現音視頻同步,通常需要選擇一個參考時鐘,參考時鐘上的時間是線性遞增的,編碼音視頻流時依據參考時鐘上的時間給每幀數據打上時間戳。在播放時,讀取數據幀上的時間戳,同時參考當前參考時鐘上的時間來安排播放。這裏的說的時間戳就是我們前面說的 PTS。實踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時鐘。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章