GeekHub

FFMPEG爬坑记录

源码编译安装FFMPEG:

由于参考了很多雷神的帖子(雷霄骅(leixiaohua1020)的专栏——一个广院工科生的视音频技术笔记),而雷神已经去世好几年了,当年他写教程的时候用的还是比较老版本的ffmpeg,为了保证兼容性,所以这里选择安装比较低版本的ffmpeg 2.8.17

首先对ffmpeg源码进行解压并进入目录:

tar xvf ffmpeg-2.8.17.tar.gz
cd ffmpeg-2.8.17

接下来运行configure,注意configure默认配置是不会生成动态库的,如需动态库,需要在configure后加入参数–enable-shared:

sudo ./configure --enable-shared --enable-decoder=h264 --prefix=/usr/local/ffmpeg

上述命令中的参数分别代表:

–enable-shared 生成动态库

–enable-decoder=h264 开启h264解码器

–prefix=/usr/local/ffmpeg 指定安装路径

然后编译并安装:

make -j8
sudo make install

由于指定了ffmpeg的安装路径,因此需要配置ld的环境变量,在/etc/ld.so.conf中添加:

/usr/local/ffmpeg
/usr/local/ffmpeg/lib
/usr/local/lib

然后更新ld配置:

sudo ldconfig

然后在~/.bashrc最后一行添加:

export PATH=$PATH:/usr/local/ffmpeg/bin

至此安装完成。


使用FFMPEG报Invalid UE golomb code错误:

FFMPEG项目在github上给出了解决方案:

https://github.com/FFmpeg/FFmpeg/commit/c51c08e0e70c186971385bdbb225f69edd4e3375

原因是FFMPEG源码中的get_ue_golomb()函数无法解析大于8190bit的数据,当遇到大于8190bit的数据时,就会报错,需要将源码中部分get_ue_golomb()函数修改为get_ue_golomb_long()。

这里我对原版的2.8.17版本源码进行了修改,可以直接使用下面的tar包进行编译安装,问题解决。


设置AVDictionary结构体参数无效果

AVDictionary是FFmpeg的键值对存储工具,FFmpeg经常使用AVDictionary设置/读取内部参数,avformat_open_input和avformat_find_stream_info函数都提供了AVDictionary参数,该参数可以在打开码流之前指定各种参数,比如:探测码流格式的时间,最大延时,超时时间,以及支持的协议的白名单等等。

实际上通过设置探测码流格式的时间以及码流数据的大小,一定程度上,减少了探测的时间,但是也会导致探测码流格式失败,因此这种方式仅用于码流格式不明确的时候,要求点播延时不苛刻的情况下
通过设置了AVDictionary的max_delay参数值无效,并且pFormatContext->max_delay也设置无效。

参考:

FFmpeg AVDictionary结构体使用

如何利用 AVDictionary 配置参数

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注