1 簡介
2 分析
2.1 大體分析
ffmpeg對媒體文件的總體操作方法為:media file---->demux (解復(fù)用)---->解碼 (decode) ---->YUV/RGB數(shù)據(jù)。
2.2 名詞說明
2.2.1 解復(fù)用
解復(fù)用就是從音視頻信號源中分流出不同的音頻和視頻流。其要達到的效果就是如下所示:
-----------media data------------------
| -------------------------------|
video streams -------------Audio streams
針對解復(fù)用,也有三種不同的手段:
- 直接模式
直接從信號源獲取相應(yīng)的音頻或者視頻數(shù)據(jù)。
- 索引模式
直接模式中如果不包含幀位置元數(shù)據(jù)的信息(或者收錄的實時流文件),就不能進行seek。
- 緩存模式
解復(fù)用音視頻數(shù)據(jù),分別進行緩存,然后通過相應(yīng)數(shù)據(jù)流接口獲取數(shù)據(jù)。網(wǎng)絡(luò)流的解復(fù)用使用該種模式。
2.3 協(xié)議說明
2.3.1 RTMP
英文全稱:Real Time Messaging Protocol,也就是實時消息傳輸。該協(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,是不建議安裝的,因為它做了一些更改,在編譯ffmpeg,使用ffplay的時候,會出錯。
這里提供從SDL1到SDL2的遷移方法:參看鏈接
note:
在單獨使用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。