FFmpeg庫簡介
- avcodec:編解碼(非常重要)边坤;
- avformat:封裝格式的處理盾沫;
- avfilter:濾鏡特效處理叭莫;
- avdevice:各種設(shè)備的輸出冤今;
- avutil:工具類(大部分庫都要這個(gè)庫的支持)摩桶;
- postproc:后加工(暫時(shí)還沒用過)桥状;
- swresample:音頻采樣數(shù)據(jù)格式轉(zhuǎn)化;
- swscale:視頻像素?cái)?shù)據(jù)格式轉(zhuǎn)換硝清。
視頻解碼流程:
- av_register_all();(示例:ffmeg->doc->examples->transcoding.c)主要是做一些準(zhǔn)備工作岛宦;
- avformat_open_input();
- avformat_find_stream_info();讀取文件信息
- avcodec_open2();打開編碼器
- av_read_frame();從輸入文件讀取一幀壓縮數(shù)據(jù)
- avcodec_decode_vedio2();解碼一幀壓縮數(shù)據(jù),得到AVFrame
- avcodec_close;關(guān)閉解碼器耍缴;
- avformat_close_input();關(guān)閉輸入視頻文件砾肺;
FFmpeg數(shù)據(jù)結(jié)構(gòu):
- AVFormatContext
- 封裝格式上下文結(jié)構(gòu)體挽霉,也是統(tǒng)領(lǐng)全局的結(jié)構(gòu)體,保存了視頻文件封裝的格式相關(guān)信息变汪。
- AVInputFormat
- 每種封裝格式(例如FLV侠坎,MP4,AVI)對應(yīng)一個(gè)該結(jié)構(gòu)體裙盾。
- AVStream
- 視頻文件中每個(gè)視頻(音頻)流對應(yīng)該結(jié)構(gòu)體实胸。
- AVCodecContext
- 編解碼上下文結(jié)構(gòu)體,保存了音視頻編解碼相關(guān)信息番官。
- AVCodec
- 每種音視頻編解碼器(例如H.264解碼器)對應(yīng)一個(gè)該結(jié)構(gòu)體庐完。
- AVPacket
- 存儲(chǔ)一幀壓縮編碼數(shù)據(jù)
- AVFrame
- 存儲(chǔ)一幀解碼后像素(采樣)數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu)的分析
FFmpeg提供的都是一些很簡單方便的api
- AVFormatContext
- iformat:輸入視頻的AVInputFormat徘熔。
- nb_streams:輸入視頻的AVStram個(gè)數(shù)门躯。
- streams:輸入視頻的AVStram[]數(shù)組。
- duration:輸入視頻的時(shí)長(微秒為單位)酷师。
- bit_rate:輸入視頻的碼率讶凉。
- AVInputFormat
- name:封裝格式的名稱。
- long_name:封裝格式的長名次山孔。
- extensions:封裝格式的擴(kuò)展名懂讯。
- id:封裝格式id
- 一些封裝格式處理的接口函數(shù)。