ffmpeg编译问题总结

编译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播放视频没有声音。而且不能播音频,这个时候需要安装一些其他的库文件;

2、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

问题修复成功!







评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值