著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:姚冬
鏈接:http://www.zhihu.com/question/31156766/answer/54645514
來源:知乎
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:姚冬
鏈接:http://www.zhihu.com/question/31156766/answer/54645514
來源:知乎
我們先假設某人在音視頻方面是零基礎,也沒學過任何數字信號處理相關知識,數學基礎基本是高中水准,但是熟悉 C/C++ 開發,至少熟悉某一個平台下的編譯調試IDE。
着重研究兩個開源項目 ffmpeg 和 webRTC,主要看ffmpeg的視頻部分和webRTC的音頻部分。
首先,從視頻解碼入手,這個最簡單,調用 ffmpeg視頻解碼的基本代碼只有100行左右,具體可以參考 @雷霄驊 的blog,有詳細示例和說明。視頻解碼只要搞懂h.264就好了,80%+場景都是這個編碼格式了,了解基本的 H.264 的 sps pps NAL等文件格式概念,了解YUV圖像格式原理,了解YUV到RGB的轉換,這樣就可以做圖像渲染,可以實現一個簡單的視頻播放器。 (第一階段基本符合)
然后,學習視頻編碼,建議從x264入手,一個簡單的調用x264的編碼代碼也不到100行。編碼比解碼復雜在於,解碼是不需要配置什么參數的,而編碼有大量參數需要配置,初期只要了解幾個基本概念就好了,比如 幀速率, 常用流控方式 ABR CRF,GOP,I/B/P Frame分別是什么意思。 (再次熟悉X264編碼)
音頻部分的編解碼和視頻差不多,初期只需要了解兩種編碼器EAAC+和Silk,了解 聲道,采樣率等概念,了解 Wave文件格式。可以做一個簡單音頻播放器。 (做一個音頻播放器)
音頻復雜的地方不是編解碼,而是音效,看下 webRTC里的 Audio Processing module,理解以下幾個概念,去噪NS,消回聲AEC,靜音檢測VAD,自動增益控制AGC,webRTC內置的這幾個算法雖然不是最好的,但是可以解決90%+的問題了,值得學習下。 (學習webrtc音頻處理)
學到了這里需要思考個問題了,自己是想走工程路線還是算法路線,如果是算法路線,那么必須要去學數學了,數字信號處理背后是大量的數學基礎理論。如果是工程路線,那么要去學習跨平台開發,學習多個平台下音視頻的采集,播放和處理,學習多平台下匯編語言優化。(平台相關)
音視頻是個水很深的領域,學一輩子都學不完,但這個領域有個好處,就是知識更新速度比較慢,學的東西不容易被淘汰,經驗的積累非常重要。
着重研究兩個開源項目 ffmpeg 和 webRTC,主要看ffmpeg的視頻部分和webRTC的音頻部分。
首先,從視頻解碼入手,這個最簡單,調用 ffmpeg視頻解碼的基本代碼只有100行左右,具體可以參考 @雷霄驊 的blog,有詳細示例和說明。視頻解碼只要搞懂h.264就好了,80%+場景都是這個編碼格式了,了解基本的 H.264 的 sps pps NAL等文件格式概念,了解YUV圖像格式原理,了解YUV到RGB的轉換,這樣就可以做圖像渲染,可以實現一個簡單的視頻播放器。 (第一階段基本符合)
然后,學習視頻編碼,建議從x264入手,一個簡單的調用x264的編碼代碼也不到100行。編碼比解碼復雜在於,解碼是不需要配置什么參數的,而編碼有大量參數需要配置,初期只要了解幾個基本概念就好了,比如 幀速率, 常用流控方式 ABR CRF,GOP,I/B/P Frame分別是什么意思。 (再次熟悉X264編碼)
音頻部分的編解碼和視頻差不多,初期只需要了解兩種編碼器EAAC+和Silk,了解 聲道,采樣率等概念,了解 Wave文件格式。可以做一個簡單音頻播放器。 (做一個音頻播放器)
音頻復雜的地方不是編解碼,而是音效,看下 webRTC里的 Audio Processing module,理解以下幾個概念,去噪NS,消回聲AEC,靜音檢測VAD,自動增益控制AGC,webRTC內置的這幾個算法雖然不是最好的,但是可以解決90%+的問題了,值得學習下。 (學習webrtc音頻處理)
學到了這里需要思考個問題了,自己是想走工程路線還是算法路線,如果是算法路線,那么必須要去學數學了,數字信號處理背后是大量的數學基礎理論。如果是工程路線,那么要去學習跨平台開發,學習多個平台下音視頻的采集,播放和處理,學習多平台下匯編語言優化。(平台相關)
音視頻是個水很深的領域,學一輩子都學不完,但這個領域有個好處,就是知識更新速度比較慢,學的東西不容易被淘汰,經驗的積累非常重要。