Windows下使用MinGW编译ffplay小记

ffplay是一个基于ffmpeg库的播放器实现,它的代码就是ffplay.c,要成功编译它,还需要SDL库,这是什么东东?看官方的介绍(Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D),哦!原来SDL负责解码后的图像和音频数据的渲染工作,此外还有与键盘和鼠标的交互,mutex和condition等同步操作,线程、窗口创建。实际上ffplay就等于使用ffmpeg完成多媒体数据的解码,加上SDL这个工具框架构成的一个播放器。这个例子源码对于学习avfilter的使用也很有帮助,比如它为解码后的视频帧和音频帧加滤镜,也是音视频处理的重要内容。

由于要把ffplay作为一个流媒体测试播放器,就要将其编译成功,以方便对其进行修改。下面记录一下整个过程,希望能让做同样工作的人少走弯路。

第一步:准备MinGW和msys,自行百度相关的文档说明。
第二步:准备好ffmpeg源码,SDL库,yasm源码。我所使用包版本具体为:ffmpeg-4.2.1.tar.bz2,SDL2-devel-2.0.10-mingw.tar.gz,yasm-1.3.0.tar.gz,这三个东西的路径在\MinGW\msys\1.0\home\admin下面。
解压yasm-1.3.0.tar.gz,configure, make, make install, 编译安装。
解压SDL2-devel-2.0.10-mingw.tar.gz,进到Makefile所在的目录,make native回车,这就安装了32位的SDL库i686-w64-mingw32。网上有文档说只能使用1.2.15版本的SDL库才能编译出ffplay,好像没有这回事。安装是必须的,我在configure的时候加上"–extra-cflags=-I/home/admin/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/include --extra-ldflags=-L/home/admin/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/lib",把路径指给它,似乎不起作用。
解压ffmpeg-4.2.1.tar.bz2,./configure --enable-shared --disable-static --enable-gpl --enable-pthreads回车,吐出来一堆东西,里面如果出现的"External libraries:"中有个sdl2,"Programs:"中有个ffplay,"Enabled outdevs:"中有个sdl2,就能编译出来了。如果报错:“ERROR: pthreads requested but not found”,说明MinGW没有安装pthread库,还得安装一下:
Windows下使用MinGW编译ffplay小记_第1张图片

你可能感兴趣的:(流媒体与服务器)