一个多媒体播放器的实现架构如下图所示:
FFMPEG在搞多媒体音视编解码同学的手里可谓是瑞士军刀,FFMPEG不但集成了算法,框架,而且可以作为一个插件嵌入进更大的框架中,比如gstreamer默认的解码路径就是通过gst-libav插件实现的,而gst-libav就是对FFMPEG的封装。很多流行的多媒体播放器比如QQ影音就是将FFPEG套了个GUI的壳实现的,还死不承认,结果上了FFMPEG的黑名单。
FFMPEG框架:
下面介绍一下FFMPEG在ubuntu18.04上的编译:
1:获取源码
http://www.ffmpeg.org/download.html#releases
2.安装依赖
sudo apt install yasm
sudo apt-get install libx264-dev
sudo apt install libsdl2-dev
sudo apt-get install libmp3lame-dev
sudo apt-get install libopus-dev
sudo apt-get install libavdevice-dev
3.配置
最新的gstreamer构建已经从configure切换为meson和ninja了,ffmpeg仍然沿用./configure
./configure --target-os=linux --prefix=/home/caozilong/Workspace/ffmpeg/ffmpeg-install --arch=x86_64 --disable-doc --enable-libx264 --enable-libmp3lame --enable-libopus --enable-debug=3 --extra-cflags="" --extra-ldflags="" --enable-gpl
因为--enable-libx264引入GPL协议的文件,所以FFMPG必须也要打开--enable-gpl选项,否则配置会出错
配置结束后,会列出当前支持的所有功能组件:
4 编译.
5.安装
安装后,查看安装目录:
多媒体解码测试:
./ffplay /media/caozilong/B0509F8C509F5844/The.Godfather.Part2.Blu-ray.720p.x264.DD51-HiS@MySiLU.mkv
上面的配置生成的固件是stripped的,要想保留调试信息,需要添加--disable-stripping选项,调试的话,最好也加上--disable-optimizations选项。
加上后:
./configure --target-os=linux --prefix=/home/caozilong/Workspace/ffmpeg/ffmpeg-install --arch=x86_64 --disable-doc --enable-libx264 --enable-libmp3lame --enable-libopus --enable-debug=3 --extra-cflags="" --extra-ldflags="" --enable-gpl --disable-stripping --disable-optimizations
重新编译,这次是 "not stripped"的了。
这样编译出来的FFMPEG不支持google VP8/VP9格式,由于H264/H265等格式有版权问题,很多开源项目在引用这类视频Codec的时候都非常小心的将这两种格式的解码器以库形式提供,并不开放源代码,比如Browser, 而VP8/VP9则没有这个顾虑。
我们把他加上:
配置:
./configure --target-os=linux --prefix=/home/caozilong/Workspace/ffmpeg/ffmpeg-install --arch=x86_64 --disable-doc --enable-libx264 --enable-libmp3lame --enable-libopus --enable-debug=3 --extra-cflags="" --extra-ldflags="" --enable-gpl --enable-libvpx --enable-encoder=libvpx_vp8 --enable-encoder=libvpx_vp9 --enable-decoder=vp8 --enable-decoder=vp9 --enable-parser=vp8 --enable-parser=vp9
编译安装,查看新的FFMPEG是否支持VP8/VP9的命令是:
ffmpeg -codecs|grep vp9
可以看到VP9解码器和编码器都已经支持,而且支持不止一种,其中的vp9很可能(我没分析代码,不确定)就是ffmpeg编写的FFVP9解码器,它比Google自己开发的还要快,VP9是Google主导开发的下一代开源视频编解码器,压缩效率比H264高一倍,是私有编解码器H265的竞争对手。FFvp9声称在不同机器上其解码速度比Google开发的快25~50%,其多线程性能有显著改进。这一结果并不出人意料,FFmpeg开发的VP8解码器也比Google的快。
重新编译,将视频转码的命令是:
ffmpeg -i /home/caozilong/Workspace/video/movie.mp4 -vcodec libvpx-vp9 -b:v 3M vp9movie_libvpx.mp4
通过mediainfo查看转码成功
ffplay可以正常播放: