下载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。
下面是播放的视频截图: