ffmpeg库编译加文字_ffplay源码编译

点击上方蓝字,关注更多优质原创

15b1bbad562f7fea6ca02a299f165c06.png

// 这是断点实验室的第2篇原创 ffplay是ffmpeg源码中一个自带的开源播放器组件,支持本地视频文件的播放以及在线流媒体播放,很多商业播放器都是基于ffplay定制而来的。 FFplay: FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library.ffplay中的代码充分利用了ffmpeg中的函数库,因此,想学习ffmpeg的使用,或基于ffplay实现一个自己的播放器,ffplay都是一个很好的切入点。1、ffplay编译环境 ffmpeg源码编译见 [公众号:断点实验室] 的前述文章 [ffmpeg编译安装]

除了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

播放画面截图

696708b1154599a141636a412e412efa.png

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 / ————

// 如果觉得我的文章对您有用

// 请帮忙转发,不胜感激!

7d475e30948de0be5839428e9e0f6f31.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值