ffmpeg工作流程框架

1.       ffmpeg主要數據結構
1)       StreamMap
用來輸入流輸出流映射的;
2)       OptionsContext
存放分析後的命令行參數,命令行參數很重要,直接指揮ffmpeg程序初始化各種資源;
3)       InputFilter、OutputFilter與FilterGraph
看名字,應該是過濾器和過濾器圖表,這會讓人想起DirectShow裏面的Filter和FilterGragh,應該思想也是差不多的;其實在Apache httpd裏面也有輸入和輸出Filter;Nginx中也有這種思想;大家都在用,都是用於在數據流的路徑上設置處理過程,改變數據的業務形態;
在ffmpeg中也是如此,有輸入和輸出過濾器,用來處理從讀取數據到解碼,和從解碼後數據到輸出的數據;
4)       InputStream與OutputStream
顧名思義,這兩個數據結構是用來表示輸入流與輸出流的;輸入輸出流詳細描述了該流的音視頻的碼流格式;
5)       InputFile與OutputFile
流的源與宿,應該可以理解一個源/宿可以對應多個流,打個比方,一個文件可以有兩路流,一路視頻流,一路音頻流;一個輸出文件(或者網絡)可以有兩路流,一路視頻流,一路音頻流;
事實上,ffmpeg可以支持多個源與宿,就是支持多個輸入文件和多個輸出文件; 

 

ffmpeg工作流程框架(需要多次編輯才能完成本文)

ffmpeg的工作任務是將一路輸入數據轉換成一路或者多路輸出數據

1. main函數
     程序入口
    1.1. transcode
         處理流程的主循環
         1.1.1. transcode_step
               一步完整的轉換流程
              1.1.1.1. process_input
                     讀取一幀數據,並解碼,然後依照輸出流設置,將數據放入輸出流緩衝中
                    1.1.1.1.1 output_packet
              1.1.1.2. reap_filters
                     取出輸出流緩衝中的數據並編碼
                     1.1.1.2.1. do_video_out
                           1.1.1.2.1.1. avcodec_encode_video2
                           1.1.1.2.1.2. write_frame
                                  1.1.1.2.1.2.1. av_interleaved_write_frame
                     1.1.1.2.2. do_audio_out

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章