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,所以你在二次開發(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è)全局變量,里面包含所有輸出文件的所有輸出流。你二次開發(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)記輸出文件的開始時(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ù),往輸出文件寫入了頭部信息。
以上就是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 App開發(fā)中ViewPager組件的入門使用教程
這篇文章主要介紹了Android App開發(fā)中ViewPager組件的入門使用教程,ViewPager主要用來(lái)實(shí)現(xiàn)通過(guò)滑動(dòng)來(lái)切換頁(yè)面的效果,需要的朋友可以參考下2016-03-03
android自定義view實(shí)現(xiàn)數(shù)字進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android自定義view實(shí)現(xiàn)數(shù)字進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Android studio保存logcat日志到本地的操作
這篇文章主要介紹了Android studio保存logcat日志到本地的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Android開發(fā)中總結(jié)的Adapter工具類【附完整源碼下載】
這篇文章主要介紹了Android開發(fā)中總結(jié)的Adapter工具類,簡(jiǎn)單說(shuō)明了Adapter的功能,并結(jié)合實(shí)例形式分析了Adapter工具類的相關(guān)使用方法,并附帶完整源碼供讀者下載參考,需要的朋友可以參考下2017-11-11
Android同步異步任務(wù)與多線程及Handler消息處理機(jī)制基礎(chǔ)詳細(xì)講解
這篇文章主要介紹了Android同步異步任務(wù)與多線程及Handler消息處理機(jī)制基礎(chǔ),handler其實(shí)就是主線程在起了一個(gè)子線程,子線程運(yùn)行并生成Message,Looper獲取message并傳遞給Handler,Handler逐個(gè)獲取子線程中的Message,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下2022-11-11
解決ViewPager和SlidingPaneLayout的滑動(dòng)事件沖突問(wèn)題
下面小編就為大家分享一篇解決ViewPager和SlidingPaneLayout的滑動(dòng)事件沖突問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
關(guān)于Kotlin的自動(dòng)類型轉(zhuǎn)換詳解
這篇文章主要給大家介紹了關(guān)于Kotlin的自動(dòng)類型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Android ProgressBar直線進(jìn)度條的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了android progressbar直線進(jìn)度條的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06

