下載FFmpeg及SDL源碼
離上次博文發佈已經有一段時間了,這次我們來測試一下強大的FFmpeg播放器程序ffplay,它是FFmpeg原生附帶的。
本文編寫時,FFmpeg的最新版本是3.4.2,從官網ffmpeg.org上下載ffmpeg-3.4.2.tar.xz源碼,通過如下命令解壓:
tar xvf ffmpeg-3.4.2.tar.xz
ffplay.c的源碼在fftools目錄下,我們知道,早期的ffplay版本是基於SDL1.x實現的音視頻顯示和播放,而現在的ffplay則是基於SDL2.x實現的,因此我們需要到SDL官網(http://www.libsdl.org/)下載,本文編寫時的版本是SDL version 2.0.7 (stable),下載並解壓縮:
tar xzvf SDL2-2.0.7.tar.gz
編譯SDL
要使能ffplay編譯,需要Ubuntu系統中支持SDL功能,所以我們首先需要下載SDL的源代碼。進入對應目錄,配置並編譯,安裝:
cd SDL2-2.0.7
./configure
make
sudo make install
將完成代碼編譯和庫及頭文件安裝。
編譯ffplay
必須在正確安裝SDL庫和頭文件後,編譯FFmpeg源碼時,纔會自動配置ffplay編譯使能,否則在最終的編譯結果中,沒有ffplay可執行文件產生,這點一定要注意。
在編譯FFmpeg源碼的時候,默認會編譯出ffplay :
tar xvf ffmpeg-3.4.2.tar.xz
cd ffmpeg-3.4.2
./configure --prefix=ffout
make
make install
爲了方便的獲取編譯結果,指定庫和頭文件的安裝路徑爲ffout(在FFmpeg源碼根目錄下)。如果在configure過程中遇到nasm/yasm之類的錯誤,則首先需要更新對應的包:
sudo apt-get install yasm
最後,在ffout/lib目錄下是FFmpeg幾大庫的位置,默認都編譯成了.a的靜態庫,ffout/include是FFmpeg對應的API頭文件,而ffplay程序則位於ffout/bin目錄下,同時存在的還有ffmpeg,ffprobe,ffserver等幾個程序。
測試ffplay
可以通過ffplay程序來測試播放本地影片,比如:
./ffout/bin/ffplay test.avi
順利的話,可以看到影片的音視頻正常播放。
如果遇到如下打印,表示SDL的圖形層沒有正常加載成功:
ffmpeg@ubuntu:~/work/ffmpeg-3.4.2$ ./ffout/bin/ffplay ../4k.mp4
ffplay version 3.4.2 Copyright (c) 2003-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=ffout
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)
而SDL圖層一般依賴於x11圖形系統,所以需要安裝對應的包:
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
安裝x11後,需要重新編譯和安裝SDL,最好是用源代碼重新解壓縮編譯。
如果遇到播放沒有聲音,需要系統安裝對應的音頻設備包:
sudo apt-get install libasound-dev
sudo apt-get install libasound2-dev
同樣的,完畢後需要徹底重新編譯安裝SDL。
下面是播放的視頻截圖: