亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

init output stream初始化輸出流源碼分析

 更新時間:2022年10月31日 08:58:51   作者:Loken1  
這篇文章主要為大家介紹了init output stream初始化輸出流源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

init_output_stream() 是一個公共的函數(shù),無論是音頻,還是視頻的輸出流的初始化,都是通過它來完成的。

init_output_stream() 上面還會套一個 wrapper ,主要是做一些簡單的封裝,例如已經(jīng)初始化了,就直接返回,代碼如下:

音頻 OutputStream初始化

音頻 OutputStream 的初始化主要有兩個地方。

1, 如果是 stream copy,不進(jìn)行編解碼,就是在 transcode_init() 里面如下:

從上圖可以看到,如果不進(jìn)行編解碼,音頻,視頻的輸出流,都是在 transcode_init() 里面初始化的。

2, 濾鏡模式,進(jìn)行了編解碼,就是在 reap_filter() 里 初始化音頻的輸出流的,如下:

音頻的輸出流可以在未從濾鏡讀取到 AVFrame 的時候就開始初始化,而視頻的輸出流的初始化,需要從濾鏡拿到 AVFrame 之后才能初始化,視頻的初始化是在 封裝在do_video_out() 函數(shù)里面的。

至于為什么音頻輸出流需要提前初始化,可以看一下他的注釋,我沒細(xì)看。

init_output_stream() 函數(shù)其實沒有太多的重點,主要就是設(shè)置編碼器參數(shù),然后打開編碼器,再設(shè)置一下 OutputStream 的一些字段,就初始化完成了。

不過 OutputStream 有一個字段特別重要,就是 initialized ,如下:

這個 initialized 特別重要,只有輸出文件里面的所有輸出流,包括音頻跟視頻流,他們的 initialized 都是 1,才能調(diào) avformat_write_header() 函數(shù)寫入頭部信息,

因為 init_output_stream() 會對 AVStream 設(shè)置一些信息,例如編碼信息等等。

必須設(shè)置完這些信息,initialized 全部都是 1,才能調(diào) avformat_write_header()。

因此,如果音頻輸出流沒初始化完成,那視頻流的 AVPacket 就不能寫入文件,必須先寫到隊列緩存下來,如下:

init_output_stream() 函數(shù)流程圖

以上就是init output stream初始化輸出流源碼分析的詳細(xì)內(nèi)容,更多關(guān)于init output stream初始化輸出流的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論