1 簡介
2 分析
2.1 大體分析
ffmpeg對媒體文件的總體操作方法為:media file---->demux (解復(fù)用)---->解碼 (decode) ---->YUV/RGB數(shù)據(jù)切黔。
2.2 名詞說明
2.2.1 解復(fù)用
解復(fù)用就是從音視頻信號源中分流出不同的音頻和視頻流晶府。其要達(dá)到的效果就是如下所示:
-----------media data------------------
| -------------------------------|
video streams -------------Audio streams
針對解復(fù)用,也有三種不同的手段:
- 直接模式
直接從信號源獲取相應(yīng)的音頻或者視頻數(shù)據(jù)。
- 索引模式
直接模式中如果不包含幀位置元數(shù)據(jù)的信息(或者收錄的實(shí)時流文件),就不能進(jìn)行seek。
- 緩存模式
解復(fù)用音視頻數(shù)據(jù)妻枕,分別進(jìn)行緩存,然后通過相應(yīng)數(shù)據(jù)流接口獲取數(shù)據(jù)她肯。網(wǎng)絡(luò)流的解復(fù)用使用該種模式佳头。
2.3 協(xié)議說明
2.3.1 RTMP
英文全稱:Real Time Messaging Protocol,也就是實(shí)時消息傳輸晴氨。該協(xié)議基于TCP康嘉,是一個協(xié)議族,包括RTMP基本協(xié)議及RTMPT/RTMPS/RTMPE等多種變種籽前。
3 使用ffmpeg
3.1 編譯安裝
3.1.1 下載SDL
SDL的官方網(wǎng)址為:鏈接
下載到的源碼為:SDL-1.2.15.zip
$ unzip SDL-1.2.15.zip
$ cd SDL-1.2.15/
$ ./configure --prefix=/usr
$ make
$ sudo make install
如果提示找不到SDL.h等亭珍,可以在Makefile中添加上:
CFLGAS =-I/usr/include/SDL
關(guān)于最新版本的SDL2.0.5,是不建議安裝的枝哄,因?yàn)樗隽艘恍└囊蘩妫诰幾gffmpeg,使用ffplay的時候挠锥,會出錯众羡。
這里提供從SDL1到SDL2的遷移方法:參看鏈接
note:
在單獨(dú)使用sdl2的時候,如果報錯no avaliable video device等蓖租,需要安裝:
$ sudo apt-get intall xorg-dev
$ ldconfig
3.1.2 下載ffmpeg
ffmpeg的下載地址:鏈接
下載到的源碼為: ffmpeg-3.1.1.tar.bz2
$ tar jxvf ffmpeg-3.1.1.tar.bz2
到config.mak下修改幾行:
1) 528 !HAVE_SDL=yes改為HAVE_SDL=yes
2) 648 !CONFIG_SDL=yes改為CONFIG_SDL=yes
3) 691 !CONFIG_FFPLAY=yes改為CONFIG_FFPLAY=yes
$ cd ffmpeg-3.1.1/
$ make
$ sudo make install
若報錯:
則需要安裝yasm粱侣,可以下載相關(guān)內(nèi)容:下載鏈接
下面的步驟是編譯yasm:
cd yasm-1.3.0/
make
$ sudo make install
然后再回到ffmpeg目錄下羊壹,執(zhí)行:
make
$ sudo make install
如果在使用./ffplay的時候,報如下錯誤:
這個主要是由于沒有在桌面系統(tǒng)上執(zhí)行命令的原因齐婴。
播放視頻文件油猫,也如以上命令行執(zhí)行方式。
好了柠偶,到這一步情妖,就可以簡單的播放音視頻文件了。
4 編譯ffmpeg4.1
編譯ffmpeg-4.1诱担,如果要編譯工具ffplay毡证,需要做一些修改。
1.修改Makefile该肴,添加如下內(nèi)容
CFLAGS = -I/usr/include/SDL2 -fPIC
LDFLAGS = -L/usr/lib
2.選擇SDL2情竹,并安裝成功。
3.修改ffbuild/config.mak匀哄,將gcc修改為c99秦效。