音視頻學(xué)習(xí)筆記

但無論什么平臺,他們的學(xué)習(xí)曲線其實是類似的,都要經(jīng)歷差不多如下的環(huán)節(jié):

學(xué)習(xí)對應(yīng)平臺的編程語言,如:C/C++,Java,Object C,Javascript 等

熟悉對應(yīng)平臺提供的 API,如:UI 庫,網(wǎng)絡(luò),文件,數(shù)據(jù)庫, 圖片處理,多媒體處理 等等

掌握平臺相關(guān)的特性、框架和原理,如:Windows 的 WINSOCK,ODBC,WPF 等,Unix 的設(shè)計哲學(xué),Android 的四大組件,iOS 的 MVC 模式等等

通過具體的項目,熟悉和練手,達到可完成任意功能的開發(fā)

當你已經(jīng)走到第 4 步了后,往往就會感覺遇到了瓶頸,產(chǎn)生如文章開頭的問題,下一步何去何從 ?

“基于平臺的 API 做應(yīng)用開發(fā),并不是一個可以走得多遠的方向,真正有價值的地方在于與具體的業(yè)務(wù)方向結(jié)合”,比如:

網(wǎng)絡(luò)安全

音視頻

智能硬件

深度學(xué)習(xí)

大數(shù)據(jù)

其他(比如:金融、通信等)

2.音視頻開發(fā)包括哪些內(nèi)容

雖然一篇文章無法把音視頻開發(fā)的知識點都介紹清楚,但是大概的學(xué)習(xí)路線還是可以梳理一下的,我們先看看下面這張圖:

其實說白了,音視頻開發(fā),就是要掌握圖像、音頻、視頻的基礎(chǔ)知識,并且學(xué)會如何對它們進行采集、渲染、處理、傳輸?shù)纫幌盗械拈_發(fā)和應(yīng)用。

采集:它解決的是,數(shù)據(jù)從哪里來的問題

渲染:它解決的是,數(shù)據(jù)怎么展現(xiàn)的問題

處理:它解決的是,數(shù)據(jù)怎么加工的問題

傳輸:它解決的是,數(shù)據(jù)怎么共享的問題

每一個門類,都可以深挖,衍生出一個又一個充滿技術(shù)挑戰(zhàn)的話題,比如:如何更高效地渲染畫面、如何提高音視頻的壓縮比,如何優(yōu)化弱網(wǎng)下的音視頻數(shù)據(jù)傳輸?shù)鹊取?/p>

其實,音視頻開發(fā)的技術(shù)積累,也沒有那么難,帶著問題去 Google,帶著任務(wù)去實踐,一切都不是問題,我們就從上面說的 4 個方向,逐個探索一下,有哪些知識點,是要我們?nèi)チ私夂驼莆盏摹?/p>

2.1 采集

采集,它解決的是,數(shù)據(jù)從哪里來的問題,那么,數(shù)據(jù)究竟從哪里來的呢 ?

其實無論在哪個平臺,圖像、視頻最初都是來自攝像頭,而音頻最初都是來自麥克風(fēng),因此,做音視頻采集,就要掌握如下的技術(shù)知識:

1. 系統(tǒng)的攝像頭采集接口是什么,怎么用 ?

比如:

Windows:DirectShow Linux:V4L2 Android:Camera iOS:AVCaptureSession

2. 系統(tǒng)的攝像頭采集的參數(shù)怎么配置,都是什么含義 ?

比如:分辨率、幀率、預(yù)覽方向、對焦、閃光燈 等

3. 系統(tǒng)的攝像頭輸出的圖像/視頻數(shù)據(jù),是什么格式,不同格式有什么區(qū)別 ?

比如:圖片:JPEG,視頻數(shù)據(jù):NV21,NV12,I420 等

4. 系統(tǒng)的麥克風(fēng)采集接口是什么,怎么用 ?

比如:

Windows:DirectShow Linux:ALSA & OSS Android:AudioRecord iOS:Audio Unit

5. 系統(tǒng)的麥克風(fēng)采集參數(shù)怎么配置,都是什么含義 ?

比如:采樣率,通道號,位寬 等

6. 系統(tǒng)的麥克風(fēng)輸出的音頻數(shù)據(jù),是什么格式?

比如:PCM

2.2 渲染

渲染,它解決的是,數(shù)據(jù)怎么展現(xiàn)的問題,那么,數(shù)據(jù)究竟怎么展現(xiàn)呢 ?

其實無論在哪個平臺,圖像、視頻最終都是要繪制到視圖上面,而音頻最終都是要輸出到揚聲器,因此,做音視頻渲染,就要掌握如下的技術(shù)知識:

1. 系統(tǒng)提供了哪些 API 可以繪制一張圖片或者一幀 YUV 圖像數(shù)據(jù)的 ?

比如:

Windows:DirectDraw, Direct3D, GDI,OpenGL 等 Linux: GDI, OpenGL 等 Android:ImageView,SurfaceView,TextureView,OpenGL 等 iOS: CoreGraphics,OpenGL 等

2. 系統(tǒng)提供了哪些 API 可以播放一個 mp3 或者 pcm 數(shù)據(jù) ?

比如:

Windows:DirectSound 等 Linux:ALSA & OSS 等 Android:AudioTrack 等 iOS: AudioQueue 等

2.3 處理

處理,它解決的是,數(shù)據(jù)怎么加工的問題,那么,數(shù)據(jù)究竟可以怎么加工呢 ?

首先,我們看看圖像/音視頻的數(shù)據(jù)可以做哪些加工 ?

其實無論在哪個平臺,圖像和音視頻的加工,除了系統(tǒng)的 API,大多數(shù)都會依賴一些跨平臺的第三方庫的,通過掌握這些第三方庫的原理和使用方法,基本上就可以滿足日常音視頻處理工作了,這些庫包括但不限于:

1.圖像處理:OpenGL,OpenCV,libyuv,ffmpeg 等

2.視頻編解碼:x264,OpenH264,ffmpeg 等

3.音頻處理:speexdsp,ffmpeg 等

4.音頻編解碼:libfaac,opus,speex,ffmpeg 等

因此,學(xué)習(xí)和掌握這些第三方庫的使用,非常有必要。?

2.4 傳輸

傳輸,它解決的是,數(shù)據(jù)怎么共享的問題,那么,數(shù)據(jù)究竟怎么共享呢 ?

共享,最重要的一點,就是協(xié)議。

我覺得互聯(lián)網(wǎng)之所以能夠如此蓬勃地發(fā)展,將整個世界都緊密聯(lián)系在一起,其實是離不開 W3C 這個委員會的巨大貢獻的,因為無論什么數(shù)據(jù),要想在不同的國家、不同設(shè)備之間互聯(lián)互通,離不開 “標準”,有了 “標準”,大家就能互相讀懂對方。

因此,研究音視頻傳輸,其實就是在研究協(xié)議,具體有哪些協(xié)議呢 ?

1.音視頻在傳輸前,怎么打包的,如:FLV,ts,mpeg4 等

2.直播推流,有哪些常見的協(xié)議,如:RTMP,RSTP 等

3.直播拉流,有哪些常見的協(xié)議,如:RTMP,HLS,HDL,RTSP 等

4.基于 UDP 的協(xié)議有哪些?如:RTP/RTCP,QUIC 等

互聯(lián)網(wǎng)環(huán)境下的音視頻的傳輸,是一個非常有挑戰(zhàn)和價值的方向,為了解決弱網(wǎng)下的傳輸延時、卡頓,提高用戶體驗,整個業(yè)界都在不斷地進行著深入的探索和優(yōu)化。?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 音視頻一些筆記 序列參數(shù)集SPS:作用于一系列連續(xù)的編碼圖像; 圖像參數(shù)集PPS:作用于編碼視頻序列中一個或多個獨...
    zhouluyao閱讀 1,521評論 0 2
  • 前言 自己都是對直播這個模塊很好奇,覺得是很深的,一直沒有學(xué)習(xí)的機會,沒有再項目中運用到,現(xiàn)在根據(jù)自己網(wǎng)上看到的文...
    廖燊閱讀 302評論 0 0
  • ### YUV顏色空間 視頻是由一幀一幀的數(shù)據(jù)連接而成,而一幀視頻數(shù)據(jù)其實就是一張圖片。 yuv是一種圖片儲存格式...
    天使君閱讀 3,656評論 0 4
  • 音視頻學(xué)習(xí)筆記-SDP ? SDP 是會話描述協(xié)議, 它用文本描述各端的能力. 如各端多支持的音頻編解碼器是什...
    XZhongWen閱讀 1,709評論 0 0
  • 音視頻學(xué)習(xí)筆記 - RTP與RTCP ? 實時傳輸協(xié)議(RTP)詳細說明了在互聯(lián)網(wǎng)上傳遞音頻和視頻的標準數(shù)據(jù)包...
    XZhongWen閱讀 1,657評論 0 1

友情鏈接更多精彩內(nèi)容