FFmpeg?Principle分析Out?put?File?數(shù)據(jù)結(jié)構(gòu)
struct OutputFile
struct OutputFile
是單個(gè)輸出文件的管理器。之前在 parse_optgroup()
處理好的 OptionsContext o
變量,有一部分字段會(huì)賦值給 OutputFile
管理器
如下:
OptionsContext o
變量的另一部分字段,會(huì)在 open_output_file()
里面?zhèn)鬟f給 API 函數(shù),例如:avformat_write_header()
,或者賦值給 OutputStream
的一些字段。
ret = avformat_write_header(of->ctx, &of->opts);
output_files
全局變量是一個(gè)數(shù)組,里面的成員正是 OutputFile
,所以你在二次開(kāi)發(fā) ffmpeg.exe
的時(shí)候,可以通過(guò) output_files
全局變量獲取到所有的輸出文件的信息。
OutputFile **output_files = NULL; int nb_output_files = 0;
我們接下來(lái)仔細(xì)學(xué)習(xí)一下 struct OutputFile
的結(jié)構(gòu),如下:
typedef struct OutputFile { AVFormatContext *ctx; AVDictionary *opts; int ost_index; /* index of the first stream in output_streams */ int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units uint64_t limit_filesize; /* filesize limit expressed in bytes */ int shortest; int header_written; } OutputFile;
相比 InputFile
,OutputFile
數(shù)據(jù)結(jié)構(gòu)的字段簡(jiǎn)直太少了,讀起來(lái)太爽了。
struct OutputFile 字段解析
1, AVFormatContext *ctx
,容器上下文,也叫容器實(shí)例。
2, AVDictionary *opts
,容器格式的參數(shù),是從 OptionsContext
里面 的 OptionGroup
的 format_opts
復(fù)制過(guò)來(lái)的,如下:
av_dict_copy(&of->opts, o->g->format_opts, 0);
opts
會(huì)傳遞給 avformat_write_header()
函數(shù),如下:
ret = avformat_write_header(of->ctx, &of->opts);
3, int ost_index
,輸出文件的第一個(gè)流在 output_streams
數(shù)組里面的索引,output_streams
數(shù)組是一個(gè)全局變量,里面包含所有輸出文件的所有輸出流。你二次開(kāi)發(fā) ffmpeg.exe
的時(shí)候,可以使用 output_streams
數(shù)組,獲取到所有的輸出流。
4, int64_t recording_time
,命令行選項(xiàng) -t
的值,設(shè)置輸出文件的時(shí)長(zhǎng),單位是微秒,具體的功能是通過(guò) trim
濾鏡來(lái)實(shí)現(xiàn)的。
5, int64_t start_time
,標(biāo)記輸出文件的開(kāi)始時(shí)間,例如一個(gè)輸入文件本來(lái)是 6 分鐘的,你可以用 -ss 120
指定 start_time
,這樣,輸出文件就會(huì)裁剪成 第 2 ~ 6分鐘 的視頻,前面 2 分鐘丟棄。
6, uint64_t limit_filesize
,限制輸出文件的大小,一旦達(dá)到這個(gè)大小,輸出文件立即結(jié)束。
7, int shortest
,命令行選項(xiàng) -shortest
的值,當(dāng)最短的輸出流結(jié)束的時(shí)候,整個(gè)文件就結(jié)束了,例如一個(gè)輸出文件里面有 音頻流 跟 視頻流,視頻流 3 分鐘,音頻流 5 分鐘。如果啟用了這個(gè)選項(xiàng),音頻流就會(huì)被裁剪成 3 分鐘。
8, int header_written
,是否已經(jīng)調(diào)用了 avformat_write_header()
函數(shù),往輸出文件寫(xiě)入了頭部信息。
以上就是FFmpeg Principle分析Out put File 數(shù)據(jù)結(jié)構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于Out put File 數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android編程實(shí)現(xiàn)為應(yīng)用添加菜單的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)為應(yīng)用添加菜單的方法,涉及Android菜單界面布局與功能實(shí)現(xiàn)的相關(guān)技巧,需要的朋友可以參考下2016-01-01android教你打造獨(dú)一無(wú)二的上拉下拉刷新加載框架
本篇文章主要介紹了android教你打造獨(dú)一無(wú)二的下拉刷新加載框架,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03Android自定義View實(shí)現(xiàn)圓環(huán)帶數(shù)字百分比進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)圓環(huán)帶數(shù)字百分比進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Android沉浸式狀態(tài)欄的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android沉浸式狀態(tài)欄的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09Android項(xiàng)目實(shí)戰(zhàn)之Glide 高斯模糊效果的實(shí)例代碼
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)之Glide 高斯模糊效果的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Android實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android自定義View實(shí)現(xiàn)拖動(dòng)選擇按鈕
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)拖動(dòng)選擇按鈕的具體代碼,感興趣的小伙伴們可以參考一下2016-05-05Android Studio查看Android 5.x源碼的步驟詳解
Google為Android開(kāi)發(fā)者帶來(lái)Android Studio,用來(lái)取代Eclipse。從Android Studio出現(xiàn)起,整機(jī)開(kāi)發(fā)和Android源碼閱讀和編輯一定能用上它。這篇文章小編就帶大家學(xué)習(xí)下如何使用Android Studio查看Android 5.x源碼,有需要的可以參考借鑒。2016-09-09Android Activity啟動(dòng)模式之singleTop實(shí)例詳解
這篇文章主要介紹了Android Activity啟動(dòng)模式之singleTop,結(jié)合實(shí)例形式較為詳細(xì)的分析了singleTop模式的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01Android Activity之間的數(shù)據(jù)傳遞方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Android Activity之間的數(shù)據(jù)傳遞方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06