ubuntu编译ffplay

本文介绍在Ubuntu系统中使用FFmpeg组件FFplay进行视频播放时遇到的问题及解决方案,包括SDL库编译错误、头文件缺失及链接库问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ubuntu下利用ffserver+ffmpeg进行视频流直播,但vlc却一直无法播放,以前资料提到的都是使用ffplay,经查ffmpeg编译时并未编出ffplay,只得编译如下:


1:ffmpeg的config.h中修改#define CONFIG_FFPLAY 1

2:zhujinhua@thinkpadE455:~/ffmpeg/ffmpeg-3.0$ make
CC ffplay.o
ffplay.c:56:17: fatal error: SDL.h: 没有那个文件或目录

http://www.libsdl.org/download-1.2.php下载sdl库,另外还有2.0,但是试了下不行

编译sdl库时

./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for ‘_XData32’
 SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
                 ^
./src/video/x11/SDL_x11dyn.c:95:5: note: in definition of macro ‘SDL_X11_SYM’
  rc fn params { ret p##fn args ; }
     ^
In file included from ./src/video/x11/SDL_x11dyn.h:34:0,
                 from ./src/video/x11/SDL_x11dyn.c:26:
/usr/include/X11/Xlibint.h:568:12: note: previous declaration of ‘_XData32’ was here
 extern int _XData32(
            ^
make: *** [build/SDL_x11dyn.lo] 错误 1

只需将其中的第168、169行代码注释掉即可

#ifdef LONG64  
SDL_X11_MODULE(IO_32BIT)  
//SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)  
//SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)  

#endif

SDL编译安装后如下

zhujinhua@thinkpadE455:~/ffmpeg/SDL-1.2.15$ ll /usr/local/lib/*SDL*
lrwxrwxrwx 1 root root      20  2月 25 23:01 /usr/local/lib/libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
-rwxr-xr-x 1 root root 2363853  2月 25 23:01 /usr/local/lib/libSDL-1.2.so.0.11.4
-rw-r--r-- 1 root root 4798606  2月 25 23:01 /usr/local/lib/libSDL.a
-rwxr-xr-x 1 root root     954  2月 25 23:01 /usr/local/lib/libSDL.la
-rw-r--r-- 1 root root    4874  2月 25 23:01 /usr/local/lib/libSDLmain.a
-rwxr-xr-x 1 root root     905  2月 25 23:01 /usr/local/lib/libSDLmain.la
lrwxrwxrwx 1 root root      20  2月 25 23:01 /usr/local/lib/libSDL.so -> libSDL-1.2.so.0.11.4

3:编译ffplay时找不到SDL的头文件

需要修改common.mak,增加如下红色部分


# NASM requires -I path terminated with /
IFLAGS     := -I/usr/local/include/SDL -I. -I$(SRC_LINK)/


编译通过后链接时如下错误

ffplay.o:在函数‘main’中:
/home/zhujinhua/ffmpeg/ffmpeg-3.0/ffplay.c:3815:对‘SDL_Init’未定义的引用
/home/zhujinhua/ffmpeg/ffmpeg-3.0/ffplay.c:3827:对‘SDL_EventState’未定义的引用
/home/zhujinhua/ffmpeg/ffmpeg-3.0/ffplay.c:3828:对‘SDL_EventState’未定义的引用
/home/zhujinhua/ffmpeg/ffmpeg-3.0/ffplay.c:3829:对‘SDL_EventState’未定义的引用
/home/zhujinhua/ffmpeg/ffmpeg-3.0/ffplay.c:3831:对‘SDL_EnableKeyRepeat’未定义的引用

修改common.mak,增加SDL库即可

ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample SDL



### 如何在Ubuntu上安装和使用ffplay #### 安装FFmpeg及其组件 为了能够在Ubuntu系统上使用`ffplay`,需要先确保已正确安装了FFmpeg以及其相关工具集。通过官方软件包管理器可以直接安装预构建好的二进制文件来简化这一过程。 对于Ubuntu 22.04而言,只需运行如下命令即可完成FFmpeg(内含ffplay)的安装: ```bash sudo apt update && sudo apt install ffmpeg ``` 这条指令不仅会更新本地仓库索引,还会下载并安装最新版本的FFmpeg到操作系统中[^1]。 #### 处理可能遇到的问题 如果遇到了关于缺少特定编译工具或库的情况——比如提示`yasm`未被到,则应该单独对其进行安装以解决该类问题。这可以通过下面给出的命令实现: ```bash sudo apt-get install yasm ``` 此操作能够有效地补充必要的汇编程序支持,从而避免因缺失而导致的各种错误信息显示出来[^4]。 #### 配置额外依赖项 为了让`ffplay`正常工作,有还需要预先配置一些附加的支持库。特别是当打算从源代码自行编译更为重要。这些依赖包括但不限于图形界面开发环境、声音驱动接口以及其他多媒体编码解码所需的资源。具体的安装方式如下所示: ```bash sudo apt-get install libx11-dev xorg-dev libsdl2-2.0 libsdl2-dev \ clang libfdk-aac-dev libspeex-dev libx264-dev \ libx265-dev libnuma-dev yasm pkg-config \ libopencore-amrnb-dev libopencore-amrwb-dev ``` 上述命令集合了一整套用于增强功能性的外部模块,有助于提高用户体验质量的同也增加了系统的兼容性和稳定性[^3]。 #### 使用ffplay播放媒体文件 一旦完成了以上所有的准备工作之后,就可以直接调用`ffplay`来进行简单的音视频回放测试了。基本语法结构非常直观易懂: ```bash ffplay /path/to/your/mediafile.mp4 ``` 这里只需要替换掉路径部分为实际存在的影音资料位置即可开始享受流畅的画面展示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值