ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11708|回复: 5

编译ffmpeg无法生成ffplay的问题解决

[复制链接]
发表于 2013-10-8 21:16:53 | 显示全部楼层 |阅读模式
编译ffmpeg无法生成ffplay的问题解决

作者: www.ChinaFFmpeg.com 孙悟空
好多人问编译ffmpeg时无法生成ffplay,其具体原因多数是由于没有SDL或者SDL版本不正确所导致。

解决办法如下:
安装正确的SDL库既可解决
[AppleScript] 纯文本查看 复制代码
wget [url=http://libsdl.org/release/SDL-1.2.15.tar.gz]http://libsdl.org/release/SDL-1.2.15.tar.gz[/url]
tar zxvf SDL-1.2.15.tar.gz
cd SDL-1.2.15
./configure --prefix=/usr
make -j16
sudo make install

安装完成后,再次编译ffmpeg既可解决

原因分析:
打开configure分析一下内容既可看到如下内容:
[Bash shell] 纯文本查看 复制代码
SDL_CONFIG="${cross_prefix}sdl-config"
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then 
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
else
  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then 
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
    sdl_libs=$("${SDL_CONFIG}" --libs)
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
  fi
fi
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs

这里比较关键,首先判断SDL.h中的版本对应的值在通过计算后是否在0x010201至0x010300之间,如果是的话SDL版本才会正确的被执行,否则这个测试项将会出现错误,生成的config.log中有对应的错误记录
当没有安装SDL库时,config.log中相关的错误信息如下
[Bash shell] 纯文本查看 复制代码
check_pkg_config sdl SDL_events.h SDL_PollEvent
false --exists --print-errors sdl

当安装的SDL版本库不对应时,config.log中对应的错误信息如下
[Bash shell] 纯文本查看 复制代码
check_pkg_config sdl SDL_events.h SDL_PollEvent
false --exists --print-errors sdl
check_func_headers SDL_version.h SDL_Linked_Version -I/usr/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/lib -lSDL2
check_ld cc -I/usr/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/lib -lSDL2
check_cc -I/usr/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/lib
BEGIN /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c
    1   #include <SDL_version.h>
    2   long check_SDL_Linked_Version(void) { return (long) SDL_Linked_Version; }
    3   int main(void) { return 0; } [/size][/font][/align][align=left][font=Helvetica][size=12px]bbs.chinaffmpeg.com 孙悟空
END /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -std=c99 -mdynamic-no-pic -fomit-frame-pointer -fPIC -I/usr/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/lib -c -o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.q6QhmvUN.o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c
/var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c: In function 'check_SDL_Linked_Version':
/var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c:2: error: 'SDL_Linked_Version' undeclared (first use in this function)
/var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c:2: error: (Each undeclared identifier is reported only once 
/var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.NYPJoPCV.c:2: error: for each function it appears in.) 

或者如下错误
[Bash shell] 纯文本查看 复制代码
BEGIN /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
    1   #include <SDL_version.h>
    2   long check_SDL_GetVersion(void) { return (long) SDL_GetVersion; }
    3   int main(void) { return 0; } 
END /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -std=c99 -mdynamic-no-pic -fomit-frame-pointer -fPIC -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/local/lib -c -o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.E9d2cGZ6.o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
gcc -Wl,-dynamic,-search_paths_first -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -L/usr/local/lib -o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.Z74XFGa5 /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.E9d2cGZ6.o -lSDL2 -lm -lbz2 -lz
check_cpp_condition SDL.h (SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201 -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE
check_cpp -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE
BEGIN /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
    1   #include <SDL.h>
    2   #if !((SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201)
    3   #error "unsatisfied condition: (SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201"
    4   #endif
END /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -std=c99 -mdynamic-no-pic -fomit-frame-pointer -fPIC -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -E -o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.E9d2cGZ6.o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
check_cpp_condition SDL.h (SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300 -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE
check_cpp -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE
BEGIN /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
    1   #include <SDL.h>
    2   #if !((SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300)
    3   #error "unsatisfied condition: (SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300"
    4   #endif[/size][/font][/align][align=left][font=Helvetica][size=12px]bbs.chinaffmpeg.com 孙悟空
END /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -std=c99 -mdynamic-no-pic -fomit-frame-pointer -fPIC -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE -E -o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.E9d2cGZ6.o /var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c
/var/folders/z5/31tj_ff977n3r59bx1cwg98c0000gn/T//ffconf.mfC1B2mW.c:3:2: error: #error "unsatisfied condition: (SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300"

根据对ffplay与ffmpeg中libavdevice中SDL相关的接口与SDL1和SDL2的初步对比,发现SDL2与SDL1差别还是蛮大的,要改libavdevice也是力气活,所以如果SDL1不影响太多的话,还是用SDL1吧  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2013-10-9 08:02:14 | 显示全部楼层
意思就是ffplay还不支持SDL2.0啦?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 09:39:32 | 显示全部楼层
pqiankui 发表于 2013-10-9 08:02
意思就是ffplay还不支持SDL2.0啦?

是的,好多接口目前还是SDL,比如Overlay相关的
回复 支持 反对

使用道具 举报

发表于 2013-10-9 10:02:15 | 显示全部楼层
T-Bagwell 发表于 2013-10-9 09:39
是的,好多接口目前还是SDL,比如Overlay相关的

那就是只能用libSDL1.2这样的稳定版了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 10:06:03 | 显示全部楼层
pqiankui 发表于 2013-10-9 10:02
那就是只能用libSDL1.2这样的稳定版了?

可以用SDL2,关键是改代码力气活,而且很费力气
回复 支持 反对

使用道具 举报

发表于 2013-10-10 08:30:33 | 显示全部楼层
被make -j16亮瞎了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-4-25 00:11 , Processed in 0.053029 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表