FFMpeg.AutoGen(3)實戰:解碼直播流並保存為MP4文件(未完成)


image

image

image

image

Muxer 視音頻復用器


數據結構

AVCodecContext



AVFormateContext

AVFormatContext是API中直接接觸到的結構體,位於avformat.h中,是音視頻數據,也就是音視頻文件(通常接觸到的mp3/mp4等文件)的一種抽象和封裝,該文件中包含了多路流,包括音頻流、視頻流、字幕流等。該結構體的使用,貫穿了ffmpeg使用的整個流程。

包含了媒體流的格式信息,比較重要的有:

AVInputFormat或者AVOutputFormat:只能同時存在一個。
AVStream
AVPacket
title、author、copyright、duration、start_time、bit_rate等。

(參考文檔【5】)



AVStream

AVStream在FFmpeg使用過程中關於編解碼至關重要的結構體之一,是對流(Stream)的封裝和抽象,描述了視頻、音頻等流的編碼格式等基本流信息。此外也是音頻、視頻、字幕數據流的重要載體。

對於一個典型的mp4格式的媒體源(H264)來說,需要經過解封裝(解復用),解碼然后輸出的過程。而解封裝從容器中分離出來的流,在FFmpeg中對應的對象就是AVStream。解復用解出來幾條AVStream,就會在AVFormateContext中的nb_streams+1(總流數+1),並且將AVStream保存在streams數組中。(參考文檔【4】)



PTS:Presentation Time Stamp。PTS主要用於度量解碼后的視頻幀什么時候被顯示出來
DTS:Decode Time Stamp。DTS主要是標識讀入內存中的bit流在什么時候開始送入解碼器中進行解碼

time_base:時間基。它也是用來度量時間的。
如果把1秒分為25等份,你可以理解就是一把尺,那么每一格表示的就是1/25秒。此時的time_base={1,25}
如果你是把1秒分成90000份,每一個刻度就是1/90000秒,此時的time_base={1,90000}。


參考文檔:

【1】最簡單的基於FFmpeg的封裝格式處理:視音頻復用器(muxer) 2014-10-09 雷霄驊

【2】新版本ffmpeg源碼簡單分析:avformat_alloc_output_context2() 2018-12-13 對着天說晚安

【3】avformat_new_stream,傳入AVCodec導致的內存泄露(av_mallocz) 2018-04-21 指縫間的風袁

【4】FFmpeg:AVStream結構體分析 2018-05-28 SuperDali

【5】FFmpeg:AVFormatContext結構體分析 2018-05-27 SuperDali

【6】音視頻開發第一篇——音視頻基礎概念。 2018-04-26 SuperDali

【7】FFmpeg源代碼簡單分析:avio_open2() 2015-03-04 雷霄驊

【8】深入理解pts,dts,time_base 2017-12-11 bixinwei

【9】RTSP再學習 -- 利用FFmpeg 將 rtsp 獲取H264裸流並保存到文件中 2017-10-12 聚優致成

【10】ffmpeg中的時間戳與時間基 2018-09-25 李超


尾巴:

26歲雷霄驊先生於16年步入天堂。他留下的ffmpeg教程詳細清晰,給我的學習帶來很大幫助。雖然人已經不在,但留下的知識至今依舊散發出它的光芒。在此感謝雷霄驊先生分享他的知識。願“過勞死”遠離天下的工程師們。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM