ffmpeg音視頻基礎學習

ffmpeg音視頻基礎學習

從去年開始瞭解音視頻,中間也由於項目的需要,學習過ffmpeg、live555、以及QTAV框架,一直沒總結過,現在大致總結下音視頻中的常見詞彙,後續慢慢更新添加!博客也會轉載以及原創一些屬於自己的東西!
如果沒有一點基礎的朋友我建議大家可以看看雷博主的兩篇博客對於新手真的很有用。
1.什麼是編碼,解碼,轉碼?
編碼:通過特定的壓縮技術,將某個視頻的視頻流格式轉化爲另一種視頻格式的視頻流方式    ==>  減少數據量,節省帶寬
解碼:通過特定的解壓縮技術,將某個視頻格式的視頻流轉化爲另一種視頻格式的視頻流方式
轉碼:視頻轉碼技術將一種視頻信號從一種格式轉化爲另一種格式
編碼方式:h261、h263、h264、h265、pcm、aac等
封裝格式:AVI、MP4、3GP、MPEGTS等
2.TS流、PS流、PES流和ES流都是什麼?
ESElementary Stream):基本碼流,不分段的音頻、視頻或其他信息的連續碼流。
PES:把基本流ES分割成段,並加上相應頭文件打包成形的打包基本碼流。
PSProgram Stream):節目流,將具有共同時間基準的一個或多個PES組合(複合)而成的單一數據流(用於播放或編輯系統,如m2p)。
TSTransport Stream):傳輸流,將具有共同時間基準或獨立時間基準的一個或多個PES組合(複合)而成的單一數據流(用於數據傳輸)。
如果想了解TS流是什麼,以及ffmpeg從TS流到PAT、PMT表解複用的整個過程,可以看下該博主博客,很詳細!
3.TS和PS有什麼區別?
       據傳輸媒體的質量不同,MPEG-2中定義了兩種複合信息流:傳送流(TS:TransportStream)和節目流(PS:ProgramStream)
       TS流與PS流的區別在於TS流的包結構是固定長度的,而PS流的包結構是可變長度的。
       PS包與TS包在結構上的這種差異,導致了它們對傳輸誤碼具有不同的抵抗能力,因而應用的環境也有所不同。TS碼流由於採用了固定長度的包結構,當傳輸誤碼破壞了某一TS包的同步信息時,接收機可在固定的位置檢測它後面包中的同步信息,從而恢復同步,避免了信息丟失。而PS包由於長度是變化的,一旦某一PS包的同步信息丟失,接收機無法確定下一包的同步位置,就會造成失步,導致嚴重的信息丟失。因此,在信道環境較爲惡劣,傳輸誤碼較高時,一般採用TS碼流;而在信道環境較好,傳輸誤碼較低時,一般採用PS碼流。
       由於TS碼流具有較強的抵抗傳輸誤碼的能力,因此目前在傳輸媒體中進行傳輸的MPEG-2碼流基本上都採用了TS碼流的包格式。
       MPEG2-PS主要應用於存儲的具有固定時長的節目,如DVD電影,而MPEG-TS則主要應用於實時傳送的節目,比如實時廣播的電視節目。這兩種格式的主要區別是什麼呢?你將DVD上的VOB文件的前面一截剪掉(或者乾脆就是數據損壞),那麼就會導致整個文件無法解碼,而電視節目是你任何時候打開電視機都能解碼(收看)的,所以,MPEG2-TS格式的特點就是要求從視頻流的任一片段開始都是可以獨立解碼的。
4.圖像中的I、P、B幀是什麼?
     ● I幀是關鍵幀,屬於幀內壓縮。就是和AVI的壓縮是一樣的。I幀表示關鍵幀,你可以理解爲這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因爲包含完整畫面)
     ● P是向前搜索的意思。B是雙向搜索。他們都是基於I幀來壓縮數據。P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)
     ● B幀是雙向差別幀,也就是B幀記錄的是本幀與前後幀的差別(具體比較複雜,有4種情況,但我這樣說簡單些,有興趣可以看看我上面提供的資料),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面,通過前後畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累~。
      詳細瞭解請參考轉載博客:●圖像I、P、B幀介紹 ●視頻流中的 I幀 P幀 B幀 .
     暫時寫到這裏,以後再慢慢添加!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章