最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

FFMPEG解封裝函數(shù)

2022-04-15 22:01 作者:后端攻城獅哇  | 我要投稿

使用FFmpeg對音視頻流進行解封裝是處理音視頻輸入的初始步驟,F(xiàn)Fmpeg提供了豐富的接口函數(shù)進行該操作,下面對一些重要函數(shù)功能進行詳細介紹。

基本函數(shù)介紹

av_register_all()

函數(shù)原型:

函數(shù)功能:
初始化所有組件,在函數(shù)內(nèi)部會對編解碼器和復(fù)用器進行注冊。


avformat_network_init()

函數(shù)原型:

函數(shù)功能:
加載socket庫以及網(wǎng)絡(luò)加密協(xié)議相關(guān)的庫,為后續(xù)使用網(wǎng)絡(luò)相關(guān)功能提供支持


avformat_open_input()

函數(shù)原型:

函數(shù)功能:
用于打開多媒體數(shù)據(jù)并且獲取相關(guān)信息

參數(shù)說明:

AVFormatContext **ps:函數(shù)如果調(diào)用成功,會將獲取到的音視頻信息存入AVFormatContext結(jié)構(gòu)體ps中。

const char *filename:打開的音視頻流的URL。

AVInputFormat *fmt:可以強制指定AVFormatContext中的AVInputFormat。該參數(shù)一般情況都設(shè)置為NULL,表示FFmpeg可以自動檢測AVInputFormat。

AVDictionary **options:附件的一些選項,一般也設(shè)置為NULL。

返回值:
調(diào)用成功返回值>=0

avformat_find_stream_info()

函數(shù)原型:

函數(shù)功能:
讀取一部分音視頻數(shù)據(jù)并由此獲得一些該視頻的相關(guān)信息。

參數(shù)說明:

AVFormatContext *ic:將獲取到的流信息存入ic中供后續(xù)使用。

const char *filename:打開的音視頻流的URL。

AVInputFormat *fmt:可以強制指定AVFormatContext中的AVInputFormat。該參數(shù)一般情況都設(shè)置為NULL,表示FFmpeg可以自動檢測AVInputFormat。

AVDictionary **options:附件的一些選項,一般也設(shè)置為NULL。

返回值:
調(diào)用成功返回值>=0


avformat_find_stream_info()

函數(shù)原型:

函數(shù)功能:
讀取一部分音視頻數(shù)據(jù)并由此獲得一些該視頻的相關(guān)信息。

參數(shù)說明:

AVFormatContext *ic:將獲取到的流信息存入ic中供后續(xù)使用。

AVDictionary **options:額外的選項,一般設(shè)置為0。

返回值:
調(diào)用成功返回值>=0


av_find_best_stream()

函數(shù)原型:

函數(shù)功能:
用于獲取音頻流、視頻流索引。
參數(shù)說明:

AVFormatContext* ic:獲取到的AVFormatContext。
enum AVMediaType type:輸入對應(yīng)要尋找的具體類型流信息(音頻、視頻)。
int wanted_stream_nb:一般設(shè)置為-1。
related_stream:一般設(shè)置為-1。
AVCodec** decoder_ret:一般設(shè)置為NULL。
int flags:一般設(shè)置為0。

返回值:
調(diào)用成功返回值>=0


av_read_frame()

函數(shù)原型:

函數(shù)功能:
用于獲取一幀完整的圖像數(shù)據(jù),或者獲得多幀完整的音頻數(shù)據(jù)。
參數(shù)說明:

AVFormatContext *s:獲取到的形狀格式上下文AVFormatContext。
AVPacket *pkt:這個值不能為NULL,必須是一個開辟好的空間,用于接收AVPacket數(shù)據(jù)

返回值:
調(diào)用成功返回值>=0


av_seek_frame()

函數(shù)原型:

函數(shù)功能:
用于尋找某個特定幀。
參數(shù)說明:

AVFormatContext *s:獲取到的形狀格式上下文AVFormatContext。
int stream_index:基本流索引,表示seek是針對哪一類流數(shù)據(jù)(音頻或視頻)。
int64_t timestamp:要seek的時間點,以time_base為單位。
int flags:標(biāo)志位,用于設(shè)置seek的方式。

返回值:
調(diào)用成功返回值>=0


基礎(chǔ)類型介紹

AVFormatContext

在使用FFMPEG進行開發(fā)的時候,AVFormatContext是一個貫穿始終的數(shù)據(jù)結(jié)構(gòu),很多函數(shù)都要用到它作為參數(shù)。它是FFMPEG解封裝(flv,mp4,rmvb,avi)功能的結(jié)構(gòu)體。

重要變量說明:
AVIOContext *pb:輸入數(shù)據(jù)的緩存
unsigned int nb_stream:音視頻流的個數(shù)
AVStream **streams:音視頻流
char filename[1024]:文件名
int64_t duration:時長(單位為微秒us)
int bit_rate:比特率(單位為bps)
AVDictionary *metadata:元數(shù)據(jù)

AVStream

AVStream是在FFmpeg使用過程中關(guān)于編解碼至關(guān)重要的結(jié)構(gòu)體之一,是對流(Stream)的封裝和抽象,描述了視頻、音頻等流的編碼格式等基本流信息。此外也是音頻、視頻、字母數(shù)據(jù)流的重要載體。

對于一個典型的mp4格式的媒體源來說,需要經(jīng)過解封裝(解復(fù)用),解碼然后輸出的過程。而解封裝從容器中分離出來的流,在FFmpeg中對應(yīng)的對象就是AVStream。解復(fù)用解出來幾條AVStream,就會在AVFormateContext中的nb_streams+1(總流數(shù)+1),并且將AVStream保存在streams數(shù)組中。

重要變量說明:

AVRational time_base:表示時間基數(shù),AVRational是一個分?jǐn)?shù)類型結(jié)構(gòu)體,有兩個整形參數(shù)表示分子和分母,用于指示下一個參數(shù)int64_t類型中的duration表示多少分之一秒
int64_t duration:將duration單位轉(zhuǎn)換成秒:duration*(time_base.num/time_base.den)
AVRational avg_frame_rate:幀率
AVCodecParameters *codecpar:音視頻參數(shù),用于替代AVCodecContext

AVCodecParameters

enum AVMediaType code_type:類型參數(shù),表示媒體流是音頻還是視頻
enum AVCodecID codec_id:表示編碼格式,h264,MPEG4, MJPEG
uint32_t codec_tag:一般不用
int format:表示視頻的像素格式(YUV420,YUV422...)或者音頻的采樣格式
int width; int height:視頻的寬、高(只有視頻有)
uint64_t channel_layout:一般取默認(rèn)值
int channels:聲道數(shù)
int sample_rate:采樣率
int frame_size:只針對音頻,一幀音頻的大小

AVPacket

AVBufferRef *buf:用于存儲引用計數(shù)
int64_t pts:表示顯示時間,通過pts*(num/den)換算
int64_t dts:表示解碼時間
uint8_t *data
int size

AVPacket *av_packet_alloc(void):創(chuàng)建AVPacket對象并初始化
AVPacket *av_packet_clone(const AVPacket *src):通過復(fù)制創(chuàng)建對象,引用計數(shù)+1
int av_packet_ref(AVPacket *dst,const AVPacket *src):作用于函數(shù)2類似
av_packet_unref(AVPacket *pkt)
void av_packet_free(AVPacket **pkt):清空對象,引用計數(shù)-1
void av_init_packet(AVPacket *pkt):手動初始化對象
int av_packet_from_data(AVPacket *pkt,uint8_t *data, int size):創(chuàng)建AVPacket對象并初始化

FFmpeg最佳學(xué)習(xí)方法(FFmpeg命令行、FFmpeg API、FFmpeg的項目) | 音視頻開發(fā)


FFMPEG解封裝函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
米脂县| 安龙县| 深圳市| 平邑县| 石屏县| 天水市| 沙洋县| 增城市| 株洲市| 海城市| 和硕县| 广宗县| 泗水县| 金坛市| 闻喜县| 滁州市| 赣州市| 广西| 伊通| 衢州市| 渝中区| 曲阳县| 潮安县| 上栗县| 珲春市| 松原市| 丰城市| 西昌市| 新野县| 泰宁县| 芜湖市| 洪洞县| 玉山县| 定襄县| 高邮市| 塔河县| 仁布县| 灌云县| 浠水县| 托里县| 武穴市|