ffmpeg编译问题总结

编译ffmpeg的问题

最近须要对VP9的编解码进行学习分析。因而下载了ffmpeg 2.2 , 一下是我编译ffmpeg的问题和解决方法。php

1. configure 的配置问题

./configure --disable-optimizations --enable-debug

make -j16

make install

发现本身编译出来的文件中没有ffplay , 感受应该是ffplay 的一些库,系统里面没有装好,但急于看到ffmpeg 对VP9解码的效果,先不顾这些了。因而,我先直接下载安装了一个ffplay
html

sudo apt-get install ffplay 

ffplay -version

查看版本,发现这个ffplay 是来自 libav 的(ffmpeg 出走的一个团队),因为版本问题,这个ffplay 没有支持HEVC 和 VP9 解码
web

因而我使用ffmpeg 解码成yuv文件
ubuntu

ffmepg -i  xxx.webm  xxxx.yuv

而后再使用ffplay播放yuv文件ide

ffplay  -f rawvideo -video_size 1920x1080 xxxx.yuv

2. ffmpeg 编译以后没有 ffplay

没有从本身下载的版本中编译出ffplay,接下来继续搞定:学习

首先网上查找了一下缘由,应该是SDL 库没有,致使在configure 的时候,没有支持 ffplay
测试

也就是说:
优化

config.mak
spa

!CONFIG_FFPLAY = yes (注意前面有 !)
debug

接下来本人安装了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

这是我在网上参考的说法:

/////////////////////////////////////////////////////////////////////////////////////////

一、安装SDL库,不安装将没有ffplay;

二、若是安装的是SDL2.0最新版本,建议从新编译安装SDL1.x版本(我测试的时候使用SDL2未生成ffplay,此项我再验证);

听群里的高手说,SDL2.0与1.x的版本对比,变更很大,不少接口有调整,强制使用的话要修改源码。

三、肯定不是1和2的问题后,在ffmpeg目录下执行./configure ******以后查看Makefile中指定的config.mak(在ffmpeg根目录下)中:CONFIG_FFPLAY=yes,若是不是须要从新./configure(若是前面总有!,重装SDL)

ps:

一、若是本身去下载SDL源码而后make install安装的库,编译ffmpeg能够产生ffplay,可是产生的ffplay播放视频没有声音。并且不能播音频,这个时候须要安装一些其余的库文件;

二、ffplay.exe没法正常播放视频有多是sdl的bug, 也有多是gcc的bug。

编译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

问题修复成功!