前言:本篇是到大神博客http://blog.csdn.net/leixiaohua1020/article/details/18893769參考和學習,讀者感興趣就直接到大神博客學習就好,因為下面本人總結的筆記,都是參考他的。本人視音頻技術零基礎,但是樂愛學習,也願意和你們交流技術,只要我能拿得出技術👻,或者你們不要嫌棄我技術不夠就行哈。嘻嘻🐶。
1、生活中的視音頻技術
封裝格式:
也就是很多電影文件的格式:avi,rmvb,mp4,flv,mkv等等。
概念:把視頻數據和音頻數據打包成一個文件的規范,叫封裝格式。
但是,觀看封裝格式是無法知道這個視音頻文件用了什么視音頻編碼標准,下面我在Mac電腦上用一個軟件來查看視音頻文件的編碼標准。
其實如果你閱讀了大神的博客http://blog.csdn.net/leixiaohua1020/article/details/18893769你就會發現Windows的很多軟件自帶了這個功能。
看的出:未命名.mov采用MPEG-4的Apple QuickTIme的封裝格式(MOV),采用了H.264(AVC)的壓縮編碼標准。
另外,關於MediaInfo簡介和源碼分析,可以閱讀大神的博客:http://blog.csdn.net/leixiaohua1020/article/details/18893769
2、視頻播放的原理
視音頻技術:
1、封裝技術。
2、視頻壓縮編碼技術
3、音頻壓縮編碼技術
4、流媒體協議技術(應用於網絡傳輸)
視頻播放器播放互聯網上的視頻文件,需要的步驟:
解協議,解封裝,解碼視音頻,視音頻同步。
視頻播放器播放 本地 上的視頻文件,需要的步驟:
解封裝,解碼視音頻,視音頻同步。
解析儀的作用:將流媒體協議的數據,解析為標准的相應的封裝格式數據。
視音頻在網絡上傳輸的時候,常常采用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。
這些協議在傳輸視音頻數據的同事,也會傳輸一些信令數據。
這些信令數據包括對播放的控制(播放,暫停,停止),或者對網絡狀態的描述等等。
解協議的過程中會去除掉信令數據而值保留視音頻數據。例如:采用RTMP協議傳輸的數據,經過解協議操作后,輸出FLV格式的數據。
解封裝的作用:就是講輸入的封裝格式的數據,分離成為音頻流壓縮編碼數據和視頻流壓縮編碼數據。
封裝格式種類很多,前面有介紹。它的作用就是將已經壓縮編碼的視頻數據和音頻數據按照一定的格式放到一起。
解封裝的過程就例如FLV格式的數據,經過解封裝操作后,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。
解碼的作用:就是將視頻/音頻壓縮編碼數據,解碼成為非壓縮的視頻/音頻原始數據。
1、音頻的壓縮編碼標准包含AAC、MP3、AC-3等等
2、視頻的壓縮編碼標准則包含H.264,MPEG2,VC-1等等
解碼是整個系統中最重要的雅詩最復雜的一個環節。
通過解碼,壓縮編碼的視頻數據輸出成為非壓縮的顏色數據,例如YUV420P,RGB等等
通過解碼,壓縮編碼的音頻數據輸出成為非壓縮的音頻抽樣數據,例如PCM數據
視音頻同步的作用:就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。
有關幾個視頻參數對比的資源,是Wikipedia上的,總結的非常好:
流媒體系統對比:
http://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems
封裝格式對比:
http://en.wikipedia.org/wiki/Comparison_of_container_formats
視頻編碼器對比:
http://en.wikipedia.org/wiki/Comparison_of_video_codecs
音頻編碼格式對比:
http://en.wikipedia.org/wiki/Comparison_of_audio_formats
視頻播放器對比:
http://en.wikipedia.org/wiki/Comparison_of_video_player_software
其實,以上技術從視音頻流的方向來看,是輸出的,但是直播是雙向的,而且是需要輸入這個過程,其實輸入應該就是上面講的輸出過程的逆向過程。關於更詳細的技術學習,希望本人能有所學識,以后補充。
關於IOS的音視頻解碼工具FFmpeg類庫的學習地址,也是雷霄驊大神的博客筆記:
最簡單的基於FFmpeg的移動端例子:IOS HelloWorld
這位大神還在愛奇藝上發布了授課視頻 http://www.iqiyi.com/w_19rru6fjh9.html?src=sharemodclk131212 :