在ubuntu16.04下測試ffplay程序

下載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。

下面是播放的視頻截圖:
ffplay播放截圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章