banner
jzman

jzman

Coding、思考、自觉。
github

音視頻開發基礎知識

今天學習一下音視頻的基礎知識,日常工作中都會接觸到音視頻的開發,比如目前工作中都會涉及到 TSPlayer、IjkPlayer、MediaPlayer 提供播放能力,不管是什麼 Player,其上層調用都是大同小異,但是具體實現以及能夠支持的能力各不相同,要想繼續深入就必須深入音視頻的學習,Android 開發的幾個主要方向分別是應用、Framework、音視頻、NDK 等,如果繼續在 Android 領域,這些坑還是必須要填的,主要內容如下:

  1. 視頻編碼
  2. 音頻編碼
  3. 多媒體播放組件
  4. 幀率
  5. 分辨率
  6. 編碼格式
  7. 封裝格式
  8. 碼率
  9. 顏色空間
  10. 采樣率
  11. 量化精度
  12. 聲道

視頻編碼#

視頻編碼指的是通過特定的壓縮技術,將某個視頻文件格式轉換為另一種視頻格式文件的方式,視頻傳輸中主要編解碼標準如下:

  • 運動靜止圖像專家組的 M-JPEG

    • M-JPEG 是一種圖像壓縮編碼標準,是 Motion-JPEG 的簡稱,JPEG 標準主要是用來處理靜止圖像,而 M-JPEG 把運動的視頻序列作為連續的靜止圖像來處理,這種壓縮方式單獨完整地壓縮每一幀,在編輯過程中可隨機存儲每一幀,可進行精確到幀的編輯,M-JPEG 只對幀內的空間冗餘進行壓縮,不對幀間的時間冗餘進行壓縮,故壓縮效率不高。
  • 國際標準化組織 (ISO) 運動圖像專家組的 MPEG 系列標準

    • MPEG 標準主要有五個:MPEG-1、MPEG-2、MPEG-4、MPEG-7 及 MPEG-21 等,MPEG 標準的視頻壓縮編碼技術主要利用了具有運動補償的幀間壓縮編碼技術以減小時間冗餘度,利用 DCT 技術以減小圖像的空間冗餘度,利用熵編碼則在信息表示方面減小了統計冗餘度。這幾種技術的綜合運用,大大增強了壓縮性能。
  • 國際電聯 (ITU-T) 的 H.261、H.263、H.264 等

    • H.261:第一個實用的數字視頻解碼標準,採用的壓縮算法是運動補償幀間預測與分塊 DCT 相結合的混合編碼,其運動補償使用用全像素精度和環路濾波,支持 CIF 和 QCIF 兩種分辨率。
    • H.263:H.263 與 H.261 編碼算法一樣,但是做了一點改善,使得 H.263 標準在低碼率下能夠提供比 H.261 更好的圖像效果,其運動補償使用半像素精度,支持 CIF、QCIF 、SQCIF、4CIF 和 16CIF 五種分辨率。
    • H.264:H.264 則是由兩個組織 ISO 和 ITU-T 聯合組建的聯合視頻組(JVT)共同制定的新數字視頻編碼標準,所以它既是 ITU-T 的 H.264,又是 ISO/IEC 的 MPEG-4 高級視頻編碼(Advanced Video Coding,AVC)的第 10 部分,因此,不論是 MPEG-4 AVC、MPEG-4 Part 10,還是 ISO/IEC 14496-10,都是指 H.264,H.264 是基於傳統框架的混合編碼系統,做了局部優化,注重編碼效率和可靠性。H.264 在具有高壓縮比的同時還擁有高質量流暢的圖像,經過 H.264 壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,是壓縮率最高的視頻壓縮標準。

音頻編碼#

常見的音頻編解碼標準如下:

  • ITU:G.711、G.729 等
  • MPEG:MP3、AAC 等
  • 3GPP:AMR、AMR-WB、AMR-WB + 等
  • 還有企業制定的標準,如 Dolby AC-3、DTS 、WMA 等

常見的介紹如下:

  • MP3(MPEG-1 audio layer 3):一種音頻壓縮技術,它被設計用來大幅度地降低音頻數據量,利用 MPEG Audio Layer 3 的技術,將音樂以 1:10 甚至 1:12 的壓縮率,壓縮成容量較小的文件,而對於大多數用戶來說重放的音質與最初的不壓縮音頻相比沒有明顯的下降,它是利用人耳對高頻聲音信號不敏感的特性,將時域波形信號轉換成頻域信號,並劃分成多個頻段,對不同的頻段使用不同的壓縮率,對高頻加大壓縮比(甚至忽略信號),對低頻信號使用小壓縮比,保證信號不失真,這樣就相當於拋弃人耳基本聽不到的高頻聲音,只保留能聽到的低頻部分,從而對音頻進行一定壓縮,此外 MP3 屬於有損壓縮的文件格式。

  • AAC:Advanced Audio Coding 的縮寫,最初是基於 MPEG-2 的音頻編碼技術,MPEG-4 出現後,AAC 重新集成了其特性,且加入了 SBR 技術和 PS 技術,為了區別於傳統的 MPEG-2 AAC 又稱為 MPEG-4 AAC,AAC 是一種專為聲音數據設計的文件壓縮格式,相較 MP3,AAC 格式的音質更佳,文件更小,但是 AAC 是一種有損壓縮格式,隨著大容量設備的出現,其優勢將越來越小。

  • WMA:Windows Media Audio 的縮寫,是微軟公司開發的一系列音頻編解碼器,也指相應的數字音頻編碼格式,WMA 包括四種不同的編解碼器:WMA,原始的 WMA 編解碼器,作為 MP3 和 RealAudio 編解碼器的競爭者;WMA Pro,支持更多聲道和更高質量的音頻;WMA Lossless,無損編解碼器;WMA Voice,用於儲存語音,使用的是低碼率壓縮。一些使用 Windows Media Audio 編碼格式編碼其所有內容的純音頻 ASF 文件也使用 WMA 作為擴展名,其特點是支持加密,非法拷貝到本地是無法播放的,WMA 也屬於有損壓縮的文件格式。

更多音視頻編解碼標準可以參考:音頻編解碼標準

多媒體播放組件#

Android 多媒體播放組件包含 MediaPlayer、MediaCodec、OMX 、StageFright、AudioTrack 等,具體如下:

  • MediaPlayer:為應用層提供的播放控制接口
  • MediaCodec:提供訪問底層媒體編解碼器的接口
  • OpenMAX :Open Media Acceleration,又縮寫為 OMX,開放多媒體加速層,是一個多媒體應用程序標準,Android 主要的多媒體引擎 StageFright 是透過 IBinder 使用 OpenMax,用於編解碼處理。
  • StageFright:Android 2.2 開始引入用來替換預設的媒體播放引擎 OpenCORE,Stagefright 是位於 Native 層的媒體播放引擎,內置了基於軟件的編解碼器,且適用於熱門媒體格式,其編解碼功能是利用 OpenMAX 框架,引入的是 OpenCORE 的 omx-component 部分,在 Android 中是以共享庫的形式存在,對應 libstagefright.so。
  • AudioTrack:管理和播放單個音頻資源,僅支持 PCM 流,如大多數的 WAV 格式的音頻文件就是 PCM 流,這類音頻文件支持 AudioTrack 直接進行播放。

常見的多媒體框架及解決方案#

常見的多媒體框架及解決方案有 VLC 、 FFmpeg 、 GStream 等,具體如下:

  • VLC : 即 Video LAN Client,是一款自由、開源的跨平台多媒體播放器及框架 。
  • FFmpeg:多媒體解決方案,不是多媒體框架,廣泛用於音視頻開發中。
  • GStreamer : 一套構建流媒體應用的開源多媒體框架 。

幀率#

幀率是用於測量顯示幀數的量度。單位為「每秒顯示幀數」(Frame per Second,FPS)或「赫茲,Hz」,表示每秒的幀數(FPS)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數,高的幀率可以得到更流暢、更逼真的動畫,一般來說 30fps 就是可以接受的,但是將性能提升至 60fps 則可以明顯提升交互感和逼真感,但是一般來說超過 75fps 一般就不容易察覺到有明顯的流暢度提升了,如果幀率超過屏幕刷新率只會浪費圖形處理的能力,因為監視器不能以這麼快的速度更新,這樣超過刷新率的幀率就浪費掉了。

分辨率#

視頻分辨率是指視頻成像產品所形成的圖像大小或尺寸,常見的 1080P、4K 等有代表什麼呢,P 本身的含義是逐行掃描,表示視頻像素的總行數,1080P 表示總共有 1080 行的像素數,而 K 表示視頻像素的總列數,4K 表示有 4000 列的像素數,通常來說,1080P 就是指 1080 x 1920 的分辨率,4 k 指 3840 x 2160 的分辨率。

刷新率#

刷新率就是屏幕每秒畫面被刷新的次數,刷新率分為垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率,垂直刷新率表示屏幕的圖象每秒鐘重繪多少次,也就是每秒鐘屏幕刷新的次數,以 Hz(赫茲)為單位,刷新率越高越好,圖象就越穩定,圖像顯示就越自然清晰,對眼睛的影響也越小,刷新頻率越低,圖像閃爍和抖動的就越厲害,眼睛疲勞得就越快,一般來說,如能達到 80Hz 以上的刷新頻率就可完全消除圖像閃爍和抖動感,眼睛也不會太容易疲勞。

編碼格式#

針對音視頻來說,編碼格式對應的就是音頻編碼和視頻編碼,對照前面的音頻編碼標準和視頻編碼標準,每種編碼標準都對應的編碼算法,其目的是通過一定編碼算法實現數據的壓縮、減少數據的冗餘。

封裝格式#

直接看下百度百科的關於封裝格式的介紹,封裝格式(也叫容器),就是將已經編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中,也就是說僅僅是一個外殼,或者大家把它當成一個放視頻軌和音頻軌的文件夾也可以,說得通俗點,視頻軌相當於飯,而音頻軌相當於菜,封裝格式就是一個碗,或者一個鍋,用來盛放飯菜的容器。

碼率#

碼率,也就是比特率(Bit rate),指單位時間內傳輸或處理的比特的數量,單位為 bps(bit per second)也可表示為 b/s,比特率越高,單位時間傳送的數據量(位數)越大,多媒體行業在指音頻或視頻在單位時間內的數據傳輸率時通常使用碼率,單位是 kbps,一般來說,如果是 1M 的寬帶,在網上只能看碼流不超過 125kbps 的視頻,超過 125kbps 的視頻只能等視頻緩衝才能順利觀看。

碼率一般分為固定碼率和可變碼率:

  • 固定碼率會保證碼流的碼率恆定,但是會犧牲視頻質量,比如為了保證碼率恆定,某些圖像豐富的內容就是失去某些圖像細節而變得模糊。
  • 可變碼率指的是輸出碼流的碼率是可變的,因為視頻信源本身的高峰信息量是變化的,從確保視頻傳輸質量和充分利用信息的角度來說,可變碼率視頻編碼才是最合理的。

碼率的高低與視頻質量和文件提交成正比,但當碼率超過一定數值後,對視頻質量沒有影響。

顏色空間#

  • YUV:一種顏色編碼方法,一般使用在影像處理組件中,YUV 在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬,其中 Y 表示明亮度、U 表示色度、V 表示濃度,Y′UV、YUV、YCbCr、YPbPr 所指涉的範圍,常有混淆或重疊的情況。從歷史的演變來說,其中 YUV 和 Y'UV 通常用來編碼電視的模擬信號,而 YCbCr 則是用來描述數字的影像信號,適合視頻與圖片壓縮以及傳輸,例如 MPEG、JPEG,現在 YUV 通常已經在電腦系統上廣泛使用。
  • RGB:原色光模式,又稱 RGB 顏色模型或紅綠藍顏色模型,是一種加色模型,將紅(Red)、綠(Green)、[藍(Blue)三原色的色光以不同的比例相加,以合成產生各種色彩光,目前的大多數顯示器都採用 RGB 這種顏色標準。

YUV 主要用於優化彩色視頻信號的傳輸,使其向後相容老式黑白電視,與 RGB 視頻信號傳輸相比,它最大的優點在於只需佔用極少的帶寬。

采樣率#

采樣率,表示每秒從連續信號中提取並組成離散信號的采樣個數,用赫茲(Hz)來表示,采樣率是指將模擬信號轉換成數字信號時的采樣頻率,人耳能聽到的聲音一般在 20Hz~20KHz 之間,根據采樣定理,采樣頻率大於信號中最高頻率的 2 倍時,采樣之後的數字信號便能完整的反應真實信號,常見的采樣率如下:

  • 8000 Hz:電話所用采樣率,對於人的說話已經足夠
  • 11025 Hz:AM 調幅廣播所用采樣率
  • 22050 Hz 和 24,000 Hz:FM 調頻廣播所用采樣率
  • 44100Hz:音頻 CD,常用於 MPEG-1 音頻(VCD,SVCD,MP3)所用采樣率
  • 47,250 Hz:商用 PCM 錄音機所用采樣率
  • 48,000 Hz:miniDV、數字電視、DVD、DAT、電影和專業音頻所用的數字聲音所用采樣率

CD 音樂的標準采樣頻率為 44.1KHz,這也是目前聲卡與計算機作業間最常用的采樣頻率,目前比較盛行的藍光的采樣率就相當的高,達到了 192kHz。而目前的聲卡,絕大多數都可以支持 44.1kHz、48kHz、96kHz,高端產品可支持 192kHz 甚至更高,總之,采樣率越高,獲得的聲音文件質量越好,佔用存儲空間也就越大。

量化精度#

聲波在轉換為數字信號的過程中不只有采樣率影響原始聲音的完整性,還有一個重要影響因素是量化精度,采樣頻率針對的是每秒鐘所采樣的數量,而量化精度則是對於聲波的振幅進行切割,切割的數量是以最大振幅切成 2 的 n 次方計算,n 就是 bit 數,而 bit 數就是音頻分辨率。

另外,bit 的數目還決定了聲波振幅的範圍(即動態範圍,最大音量與最小音量的差距),如果這個位數越大,則能夠表示的數值越大,描述波形更精確,每一個 Bit 的數據可以記錄約等於 6dB 動態的信號,一般來說,16Bit 可以提供最大 96dB 的動態範圍(加高頻顫動後 只有 92dB),據此可以推斷出 20Bit 可以達到 120dB 的動態範圍,動態範圍大了,會有什麼好處呢?動態範圍是指系統的輸出噪音功率和最大不失真音量功率的比值,這個值越大,則系統可以承受很高的動態。

聲道#

聲道指聲音在錄制或播放時在不同空間位置採集或回放的相互獨立的音頻信號,所以聲道數也就是聲音錄制時的音源數量或回放時相應的揚聲器數量,常見聲道有單聲道、立體聲道、4 聲道、5.1 聲道、7.1 聲道等 ,具體如下:

  • 單聲道:設置一個揚聲器。
  • 立體聲道:把單聲道一個揚聲器擴展為左右對稱的兩個揚聲器,聲音在錄制過程中被分配到兩個獨立的聲道,從而達到了很好的聲音定位效果,這種技術在音樂欣賞中顯得尤為有用,昕眾可以清晰地分辨出各種樂器來自何方,從而使音樂更富想象力,更加接近臨場感受。立體聲技術廣泛應用於自 Sound Blaster Pro 以後的大量聲卡,成為了影響深遠的音頻標準。
  • 4 聲道:4 聲道環繞規定了 4 個發音點,分別是前左、前右、後左、後右,昕眾則被包圍在中間,同時還建議增加一個低音音箱,以加強對低頻信號的回放處理,這也就是如今 4.1 聲道音箱系統廣泛流行的原因,就整體效果而言,4 聲道系統可以為聽眾帶來來自多個不同方向的聲音環繞,可以獲得身臨各種不同環境的昕覺感受,給用戶以全新的體驗。
  • 5.1 聲道:其實 5.1 聲道系統來源於 4.1 聲道系統,將環繞聲道一分為二,分為左環繞和右環繞,中央位置增加重低音效果。
  • 7.1 聲道:7.1 聲道系統在 5.1 聲道系統的基礎上又增加了中左和中右兩個發音點,簡單來說就是在聽者的周圍建立起一套前後相對平衡的聲場,增加了後中聲場聲道。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。