编译ffmpeg的问题
最近需要对VP9的编解码进行学习分析。于是下载了ffmpeg 2.2 , 一下是我编译ffmpeg的问题和解决方法。
1. configure 的配置问题
./configure --disable-optimizations --enable-debug
make -j16
make install
发现自己编译出来的文件中没有ffplay , 感觉应该是ffplay 的一些库,系统里面没有装好,但急于看到ffmpeg 对VP9解码的效果,先不顾这些了。于是,我先直接下载安装了一个ffplay
sudo apt-get install ffplay
ffplay -version
查看版本,发现这个ffplay 是来自 libav 的(ffmpeg 出走的一个团队),由于版本问题,这个ffplay 没有支持HEVC 和 VP9 解码
于是我使用ffmpeg 解码成yuv文件
ffmepg -i xxx.webm xxxx.yuv
然后再使用ffplay播放yuv文件
ffplay -f rawvideo -video_size 1920x1080 xxxx.yuv
2. ffmpeg 编译之后没有 ffplay
没有从自己下载的版本中编译出ffplay,接下来继续搞定:
首先网上查找了一下原因,应该是SDL 库没有,导致在configure 的时候,没有支持 ffplay
也就是说:
config.mak
!CONFIG_FFPLAY = yes (注意前面有 !)
接下来本人安装了SDL 2.2 重新configure之后发现打印
SDL support no
然后在装上SDL 1.2 之后, 再次configure之后出现打印
SDL support yes
gedit config.mak
可以看到
CONFIG_FFPLAY = yes (前面已经没有 !)
看来我下载的ffmpeg 版本需要SDL 1.2 的接口
接下来 重新make 一下,就有 ffplay出现了
ffplay xxx.webm
这是我在网上参考的说法:
/
1、安装SDL库,不安装将没有ffplay;
2、如果安装的是SDL2.0最新版本,建议重新编译安装SDL1.x版本(我测试的时候使用SDL2未生成ffplay,此项我再验证);
听群里的高手说,SDL2.0与1.x的版本对比,变动很大,很多接口有调整,强制使用的话要修改源码。
3、确定不是1和2的问题后,在ffmpeg目录下执行./configure ******之后查看Makefile中指定的config.mak(在ffmpeg根目录下)中:CONFIG_FFPLAY=yes,如果不是需要重新./configure(如果前面总有!,重装SDL)
ps:
1、如果自己去下载SDL源码然后make install安装的库,编译ffmpeg可以产生ffplay,但是产生的ffplay播放视频没有声音。而且不能播音频,这个时候需要安装一些其他的库文件;
编译sdl 1.的时候,把 makefile 中CFLAGS变量的-O2优化选项去掉,重新生成sdl的lib库即可解决问题
3.SDL库不能正确执行
运行ffplay时,有些机器上会出现
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)
说明系统中没有安装x11的库文件,因此编译出来的SDL库实际上不能用。
下载安装
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
重新编译sdl
再次进入sdl源代码目录重新编译,make clean,./configure,make,make install
ffplay xxxx.webm
解码显示正确~
本人在 ubuntu kylin 14.04 上出现了新的问题 SDL1.2的代码中于系统的/usr/x11/Xlibint.h 出现来命名冲突,于是还需要注释掉SDL中的代码 src/video/SDL_x11sym.h line 168 附件的两行代码:
#ifdef LONG64
SDL_X11_MODULE(IO_32BIT)
//SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
//SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
#endif
重新对SDL 进行configure, make, make install
问题修复成功!