小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

FFMPEG視音頻編解碼零基礎(chǔ)學(xué)習(xí)方法

 NaturalWill 2014-05-31
在CSDN上的這一段日子,接觸到了很多同行業(yè)的人,尤其是使用FFMPEG進(jìn)行視音頻編解碼的人,有的已經(jīng)是有多年經(jīng)驗(yàn)的“大神”,有的是剛開始學(xué)習(xí)的初學(xué)者。在和大家探討的過(guò)程中,我忽然發(fā)現(xiàn)了一個(gè)問(wèn)題:在“大神”和初學(xué)者之間好像有一個(gè)不可逾越的鴻溝?!按笊瘛眰兯礁叱接懼?yuàn)W的問(wèn)題;而初學(xué)者們還停留在入門階段。究竟是什么原因造成的這種“兩極分化”呢?最后,我發(fā)現(xiàn)了問(wèn)題的關(guān)鍵:FFMPEG難度比較大,卻沒(méi)有一個(gè)循序漸進(jìn),由簡(jiǎn)單到復(fù)雜的教程?,F(xiàn)在網(wǎng)上的有關(guān)FFMPEG的教程多半難度比較大,不太適合剛接觸FFMPEG的人學(xué)習(xí);而且很多的例子程序編譯通不過(guò),極大地打消了學(xué)習(xí)的積極性。我自己在剛開始學(xué)習(xí)FFMPEG的時(shí)候也遇到了很大的困難。為了幫助更多的人快速成為“大神”,我想總結(jié)一個(gè)學(xué)習(xí)FFMPEG的方法,方便大家循序漸進(jìn)的學(xué)習(xí)FFMPEG。

0. 背景知識(shí)

本章主要介紹一下FFMPEG都用在了哪里(在這里僅列幾個(gè)我所知的,其實(shí)遠(yuǎn)比這個(gè)多)。說(shuō)白了就是為了說(shuō)明:FFMPEG是非常重要的。

使用FFMPEG作為內(nèi)核視頻播放器:

Mplayer,ffplay,射手播放器,暴風(fēng)影音,KMPlayer,QQ影音...

使用FFMPEG作為內(nèi)核的Directshow Filter:

ffdshow,lav filters...

使用FFMPEG作為內(nèi)核的轉(zhuǎn)碼工具:

ffmpeg,格式工廠...

事實(shí)上,F(xiàn)FMPEG的視音頻編解碼功能確實(shí)太強(qiáng)大了,幾乎囊括了現(xiàn)存所有的視音頻編碼標(biāo)準(zhǔn),因此只要做視音頻開發(fā),幾乎離不開它。


1. ffmpeg程序的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe)

本章主要介紹一下ffmpeg工程包含的三個(gè)exe的使用方法。

ffmpeg的官方網(wǎng)站是:http:///

編譯好的windows可用版本的下載地址(官網(wǎng)中可以連接到這個(gè)網(wǎng)站,和官方網(wǎng)站保持同步): http://ffmpeg./builds/

該網(wǎng)站中的FFMPEG分為3個(gè)版本:Static,Shared,Dev。

前兩個(gè)版本可以直接在命令行中使用,他們的區(qū)別在于:Static里面只有3個(gè)應(yīng)用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每個(gè)exe的體積都很大,相關(guān)的Dll已經(jīng)被編譯到exe里面去了。Shared里面除了3個(gè)應(yīng)用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,還有一些Dll,比如說(shuō)avcodec-54.dll之類的。Shared里面的exe體積很小,他們?cè)谶\(yùn)行的時(shí)候,到相應(yīng)的Dll中調(diào)用功能。

Dev版本是用于開發(fā)的,里面包含了庫(kù)文件xxx.lib以及頭文件xxx.h,這個(gè)版本不包含exe文件。

打開系統(tǒng)命令行接面,切換到ffmpeg所在的目錄,就可以使用這3個(gè)應(yīng)用程序了。

1.1 ffmpeg.exe

ffmpeg是用于轉(zhuǎn)碼的應(yīng)用程序。

一個(gè)簡(jiǎn)單的轉(zhuǎn)碼命令可以這樣寫:

將input.avi轉(zhuǎn)碼成output.ts,并設(shè)置視頻的碼率為640kbps

  1. ffmpeg -i input.avi -b:v 640k output.ts  
具體的使用方法可以參考: ffmpeg參數(shù)中文詳細(xì)解釋

詳細(xì)的使用說(shuō)明(英文):http:///ffmpeg.html

1.2 ffplay.exe

ffplay是用于播放的應(yīng)用程序。

一個(gè)簡(jiǎn)單的播放命令可以這樣寫:

播放test.avi

  1. ffplay test.avi  
具體的使用方法可以參考:ffplay的快捷鍵以及選項(xiàng)

詳細(xì)的使用說(shuō)明(英文):http:///ffplay.html

1.3 ffprobe.exe

ffprobe是用于查看文件格式的應(yīng)用程序。

這個(gè)就不多介紹了。

詳細(xì)的使用說(shuō)明(英文):http:///ffprobe.html


2. ffmpeg庫(kù)的使用:視頻播放器

本章開始介紹使用ffmpeg的庫(kù)進(jìn)行開發(fā)。

2.1 ffmpeg庫(kù)的配置

http://ffmpeg./builds/網(wǎng)站上

1.下載Dev版本,里面包含了ffmpeg的xxx.h頭文件以及xxx.lib庫(kù)文件。

2.下載Shared版本,里面包含了ffmpeg的dll文件。

3.將這兩部分文件拷貝到VC工程下面就可以了

注:可能會(huì)出現(xiàn)問(wèn)題,參見:FFMPEG 庫(kù)移植到 VC 需要的步驟

如果不想自己手動(dòng)配置,可以下載已經(jīng)配置好的工程:最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器

2.2 最簡(jiǎn)單的視頻播放器

學(xué)習(xí)文章100行代碼實(shí)現(xiàn)最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器中的代碼,這是ffmpeg做視頻播放器最簡(jiǎn)單的代碼了,是我自己精簡(jiǎn)出來(lái)的,已經(jīng)不能再簡(jiǎn)化了,每一行都很重要。

ffmpeg的函數(shù)介紹:ffmpeg函數(shù)介紹

注1:播放視頻或音頻數(shù)據(jù)的時(shí)候會(huì)用到SDL。有關(guān)SDL可以參考:SDL介紹

         SDL參考文檔:SDL GUIDE 中文譯本

注2:如果想查看解碼后的數(shù)據(jù),需要用到 YUV播放器:YUV播放器源代碼YUV Player Deluxe都可以

2.3 相關(guān)結(jié)構(gòu)體的研究

ffmpeg的結(jié)構(gòu)體之間的關(guān)系參考文章:FFMPEG中最關(guān)鍵的結(jié)構(gòu)體之間的關(guān)系

結(jié)構(gòu)體中每個(gè)變量的分析,參考文章:

FFMPEG結(jié)構(gòu)體分析:AVFrame

FFMPEG結(jié)構(gòu)體分析:AVFormatContext
FFMPEG結(jié)構(gòu)體分析:AVCodecContext
FFMPEG結(jié)構(gòu)體分析:AVIOContext
FFMPEG結(jié)構(gòu)體分析:AVCodec
FFMPEG結(jié)構(gòu)體分析:AVStream
FFMPEG結(jié)構(gòu)體分析:AVPacket


3. ffmpeg庫(kù)的使用:音頻播放器

3.1 最簡(jiǎn)單的音頻播放器

學(xué)習(xí)文章最簡(jiǎn)單的基于FFMPEG+SDL的音頻播放器 中的代碼,和最簡(jiǎn)單的視頻播放器一樣,這是最簡(jiǎn)單的音頻播放器,每一行代碼都很重要。

注:如果想要查看解碼后的數(shù)據(jù)(PCM數(shù)據(jù)),需要用到Audition。

4. ffmpeg庫(kù)的使用:一個(gè)真正的播放器——ffplay

4.1 真正的播放器

ffplay流程圖如文章FFplay源代碼分析:整體流程圖 所示。ffplay代碼比較復(fù)雜,但是其核心代碼和《100行代碼實(shí)現(xiàn)最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器》 是一樣的??梢詢蓚€(gè)工程結(jié)合著學(xué)習(xí)。

ffplay代碼簡(jiǎn)介資料:如何用FFmpeg編寫一個(gè)簡(jiǎn)單播放器

ffplay使用說(shuō)明:ffplay的快捷鍵以及選項(xiàng)

ffplay已經(jīng)移植到VC下的工程:ffplay_vc2005(別人做的,質(zhì)量很不錯(cuò))

5. ffmpeg庫(kù)的使用:編碼

5.1 YUV編碼為視頻

ffmpeg編碼我自己研究的不是很多,可以參考文章 :使用FFmpeg類庫(kù)實(shí)現(xiàn)YUV視頻序列編碼為視頻

6. ffmpeg源代碼分析

通曉了ffmpeg庫(kù)的使用以后,可以看一下ffmpeg的源代碼。注意ffmpeg的源代碼只有在linux下才能編譯,在windows下可以使用MinGW進(jìn)行編譯。推薦使用Eclipse查看ffmpeg的源代碼。

有一個(gè)很完整的ffmpeg源代碼的分析文檔:ffdoc

ffmpeg源代碼分析文章列表如下。

庫(kù)函數(shù)分析:

圖解FFMPEG打開媒體的函數(shù)avformat_open_input

ffmpeg 源代碼簡(jiǎn)單分析 : av_register_all()
ffmpeg 源代碼簡(jiǎn)單分析 : avcodec_register_all()
ffmpeg 源代碼簡(jiǎn)單分析 : av_read_frame()
ffmpeg 源代碼簡(jiǎn)單分析 : avcodec_decode_video2()
FFMPEG源碼分析:avformat_open_input()(媒體打開函數(shù))

ffmpeg.exe源代碼分析:

ffmpeg源碼分析:transcode_init()函數(shù)
ffmpeg源碼分析:transcode()函數(shù)

7. ffmpeg相關(guān)工程的學(xué)習(xí)

學(xué)習(xí)完成ffmpeg,還可以了解一下基于ffmpeg的相關(guān)的多媒體開源工程,在這里推薦以下幾個(gè):

7.1 ffdshow

ffdshow是基于ffmpeg的解碼器類庫(kù)libavcodec的DirectShow Filter。廣泛安裝在PC上。

有關(guān)ffdshow的源代碼分析文章(更新中):

ffdshow 源代碼分析1 : 整體結(jié)構(gòu)
ffdshow 源代碼分析 2: 位圖覆蓋濾鏡(對(duì)話框部分Dialog)

ffdshow 源代碼分析 3: 位圖覆蓋濾鏡(設(shè)置部分Settings)
ffdshow 源代碼分析 4: 位圖覆蓋濾鏡(濾鏡部分Filter)
ffdshow 源代碼分析 5: 位圖覆蓋濾鏡(總結(jié))
ffdshow 源代碼分析 6: 對(duì)解碼器的dll的封裝(libavcodec)
ffdshow 源代碼分析 7: libavcodec視頻解碼器類(TvideoCodecLibavcodec)
ffdshow 源代碼分析 8: 視頻解碼器類(TvideoCodecDec)
ffdshow 源代碼分析 9: 編解碼器有關(guān)類的總結(jié)

7.2 LAV filters

LAV Filter是基于ffmpeg的解碼器類庫(kù)libavcodec,以及解封裝器類庫(kù)libavformat的DirectShow Filter。廣泛安裝在PC上。

有關(guān)LAV Filter的源代碼分析文章:

LAV Filter 源代碼分析 1: 總體結(jié)構(gòu)

LAV Filter 源代碼分析 2: LAV Splitter

LAV Filter 源代碼分析 3: LAV Video (1)

LAV Filter 源代碼分析 4: LAV Video (2)


7.3 Mplayer

Mplayer是Linux下使用最廣泛的播放器,也有Windows版本的。其中使用了ffmpeg。

有關(guān)Mplayer的源代碼分析文章:

MPlayer源代碼分析

7.4 Media Player Classic - HC

現(xiàn)在廣為使用很多播放器都是構(gòu)建于Media Player Classic - HC的基礎(chǔ)之上的。

有關(guān)Media Player Classic - HC的源代碼分析文章:

Media Player Classic - HC 源代碼分析 1:整體結(jié)構(gòu)
Media Player Classic - HC 源代碼分析 2:核心類 (CMainFrame)(1)
Media Player Classic - HC 源代碼分析 3:核心類 (CMainFrame)(2)
Media Player Classic - HC 源代碼分析 4:核心類 (CMainFrame)(3)
Media Player Classic - HC 源代碼分析 5:關(guān)于對(duì)話框 (CAboutDlg)
Media Player Classic - HC 源代碼分析 6:MediaInfo選項(xiàng)卡 (CPPageFileMediaInfo)

Media Player Classic - HC 源代碼分析 7:詳細(xì)信息選項(xiàng)卡(CPPageFileInfoDetails)

                                                                                  轉(zhuǎn)自:http://blog.csdn.net/leixiaohua1020/article/details/15811977
轉(zhuǎn)載:點(diǎn)擊打開鏈接

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多