除了ffmpeg的依赖环境外,ffplay主要依赖sdl2组件(针对ffmpeg 3.x版本),未安装sdl2的情况下,不会自动生成关于ffplay的编译选项。
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体和游戏开发包,提供2D,音频,事件驱动,多线程和定时器等服务,它使用C语言写成,提供了多种控制图像、声音、输出的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。
SDL: Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, and graphics hardware via OpenGL and Direct3D. It is used by video playback software 可以通过下面两个命令安装sdl2组件,dev后缀表示安装路径下会包含头文件及动态库等在开发环境下需要的文件
1sudo apt-get install libsdl2-2.0
2sudo apt-get install libsdl2-dev
也可以直接下载sdl2源码包编译安装,这种方法更适合在嵌入式环境下使用
1.1 SDL2库编译
下载完成后解压进入sdl2源码目录,可通过下面的配置方法生成Makefile文件
1./configure --prefix=/usr/local/3rdparty/sdl2
生成Makefile文件后,输入make命令即可开始编译过程,编译完成后,执行make install命令进行安装
1make
2sudo make install
安装完成后,会在configure指定的安装路径下找到sdl2的安装文件,由于sdl2以库文件的方式提供支持,因此在sdl2/bin目录下没有对应的可执行文件。
1.2 SDL2环境变量配置
sdl2编译完成后,还需要让系统能够找到对应的安装位置。打开/etc/profile配置文件,在该文件底部添加sdl2的环境变量
1# SDL2 ENVIRONMENT
2export C_INCLUDE_PATH=/usr/local/3rdparty/sdl2/include/SDL2:$C_INCLUDE_PATH
3export LD_LIBRARY_PATH=/usr/local/3rdparty/sdl2/lib:$LD_LIBRARY_PATH
4export PKG_CONFIG_PATH=/usr/local/3rdparty/sdl2/lib/pkgconfig:$PKG_CONFIG_PATH
2、ffplay编译
sdl2的环境变量配置完成后,下面我们开始ffplay的编译
2.1 ffplay configure配置
在ffmpeg的编译配置项中,添加sdl2的配置项,重新生成对应的Makefile文件。其实configure脚本会通过环境变量自动查询是否已安装sdl2组件,因此,可以按照之前ffmpeg的configure配置方法,直接重新生成Makefile文件也可以,这样就不必添加sdl2配置项了,大家可以试试。
1./configure --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --enable-sdl --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib
生成Makefile文件后,打开ffmpeg源码目录下的config.mak文件,搜索CONFIG_FFPLAY关键字,可以看到ffplay对应的编译选项已由之前的[!CONFIG_FFPLAY=yes]变成了[CONFIG_FFPLAY=yes],前面的叹号已经去掉了
2.2 ffplay编译
重新生成Makefile后输入make命令即可开始编译过程,编译完成后,执行make install命令进行安装1make
2sudo make install
在ffmpeg的安装路径ffmpeg/bin下,即可看到ffplay的可执行文件,输入ffplay -version,可以打印出ffplay的版本号。
1ffplay -version
2ffplay version 3.2.4 Copyright (c) 2003-2017 the FFmpeg developers
3built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
4configuration: --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --enable-sdl --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib
5libavutil 55. 34.101 / 55. 34.101
6libavcodec 57. 64.101 / 57. 64.101
7libavformat 57. 56.101 / 57. 56.101
8libavdevice 57. 1.100 / 57. 1.100
9libavfilter 6. 65.100 / 6. 65.100
10libswscale 4. 2.100 / 4. 2.100
11libswresample 2. 3.100 / 2. 3.100
12libpostproc 54. 1.100 / 54. 1.100
在ffmpeg的源码路径下
,可以通过ldd命令查询ffplay依赖的所有组件,可以看到sdl2组件的安装位置,若其中的某些依赖项显示[Not Found]无法找到,则需要对照前文确定是否有依赖的组件尚未配置环境变量
1ldd ffplay
2 linux-vdso.so.1 => (0x00007ffd3c3a3000)
3 libavdevice.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavdevice.so.57 (0x00007fbe2e539000)
4 libavfilter.so.6 => /usr/local/3rdparty/ffmpeg/lib/libavfilter.so.6 (0x00007fbe2e10a000)
5 libavformat.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavformat.so.57 (0x00007fbe2dcea000)
6 libavcodec.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavcodec.so.57 (0x00007fbe2c7b6000)
7 libpostproc.so.54 => /usr/local/3rdparty/ffmpeg/lib/libpostproc.so.54 (0x00007fbe2c59a000)
8 libswresample.so.2 => /usr/local/3rdparty/ffmpeg/lib/libswresample.so.2 (0x00007fbe2c37e000)
9 libswscale.so.4 => /usr/local/3rdparty/ffmpeg/lib/libswscale.so.4 (0x00007fbe2c0f6000)
10 libavutil.so.55 => /usr/local/3rdparty/ffmpeg/lib/libavutil.so.55 (0x00007fbe2be7c000)
11 libSDL2-2.0.so.0 => /usr/local/3rdparty/sdl2/lib/libSDL2-2.0.so.0 (0x00007fbe2bb49000)
12 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbe2b840000)
13 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbe2b623000)
14 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbe2b259000)
15 libXv.so.1 => /usr/lib/x86_64-linux-gnu/libXv.so.1 (0x00007fbe2b054000)
16 libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fbe2ad1a000)
17 libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fbe2ab08000)
18 libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fbe2a8e6000)
19 libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fbe2a6e2000)
20 libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007fbe2a4da000)
21 libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007fbe2a2d6000)
22 libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fbe29fd6000)
23 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbe29dbc000)
24 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbe29bb8000)
25 libx264.so.148 => /usr/local/3rdparty/x264/lib/libx264.so.148 (0x00007fbe29812000)
26 liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fbe295f0000)
27 librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbe293e8000)
28 /lib64/ld-linux-x86-64.so.2 (0x00007fbe2e751000)
29 libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fbe291e4000)
30 libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fbe28fde000)
3、ffplay使用
ffplay支持本地视频文件的播放以及在线流媒体播放,输入ffplay url命令即可打开指定的媒体流,这里我们以湖南卫视 & CCTV1 的直播源为例
1ffplay rtmp://58.200.131.2:1935/livetv/hunantv
2ffplay http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
播放画面截图
ffplay播放中可能出现的问题
sdl找不到音频设备,[SDL_OpenAudio no such audio device],可在stackoverflow可以找到了对应的解决办法,安装下面两个组件,然后重新配置生成SDL及ffplay的Makefile文件并编译安装
1sudo apt-get install libasound2-dev
2sudo apt-get install libpulse-dev
SDL无法初始化,[Could not initialize SDL, no available video device],可在stackoverflow及askubuntu找到对应的解决方案,安装下面两个组件,然后重新配置生成sdl及ffplay的Makefile文件并编译安装
1sudo apt-get install libx11-dev
2sudo apt-get install xorg-dev
———— / END / ————
// 如果觉得我的文章对您有用
// 请帮忙转发,不胜感激!