如何在MAC上编译FFMpeg

来源:互联网 发布:mac删除当前用户 编辑:程序博客网 时间:2024/05/29 06:35
刚刚入手了一台MAC,所以想把FFMpeg在上面编译一下(以前都是在linux上面玩的,在MAC上还是第一次)
废话少说

首先,下载FFMpeg的代码,具体链接:
http://www.ffmpeg.org 
我下载的版本是ffmpeg-2.7.2.tar.bz2,之后就是解压和运行configure脚本(根据情况,考虑是否yasm)
之后就是make -j 8
编译过程很顺利,但是我发现ffplay这个文件没有生成。看过config.log之后才发现,ffplay是依赖SDL的,里面很多东西都是调用SDL来实现的。

那么,问题来了,怎么办?本着程序员的精神,自己下载SDL,编译安装。具体链接:
http://www.libsdl.org
我下载的版本是SDL-1.2.15.tar.gz,之后就是解压安装

但是,路曼曼其修远兮,哪有那么容易的事情,我发现了一些x window相关的编译错误,才发现高大上的苹果把x window在最新的
MAC上面去掉了。不过,还好,事情做的不是很绝,苹果提供了一个链接,可以下载相关的组件。具体链接:
http://xquartz.macosforge.org/landing/
这个事我试图尝试运行/usr/X11R6/bin下面的可执行文件,苹果提供的链接地址。没办法,人家都已经设计好了,只能下载安装。

万事具备,只欠东风。终于有开始编译SDL了。其中只有两个编译错误,我的patch在下面。

diff -u -w -r SDL-1.2.15/src/video/quartz/SDL_QuartzVideo.h SDL-1.2.15.ok/src/video/quartz/SDL_QuartzVideo.h
--- SDL-1.2.15/src/video/quartz/SDL_QuartzVideo.h 2012-01-19 14:30:06.000000000 +0800
+++ SDL-1.2.15.ok/src/video/quartz/SDL_QuartzVideo.h 2015-09-22 17:17:59.000000000 +0800
@@ -91,7 +91,7 @@
     CGDirectDisplayID  display;            /* 0 == main display (only support single display) */
     const void         *mode;              /* current mode of the display */
     const void         *save_mode;         /* original mode of the display */
-    CGDirectPaletteRef palette;            /* palette of an 8-bit display */
+    //CGDirectPaletteRef palette;            /* palette of an 8-bit display */
     NSOpenGLContext    *gl_context;        /* OpenGL rendering context */
     NSGraphicsContext  *nsgfx_context;     /* Cocoa graphics context */
     Uint32             width, height, bpp; /* frequently used data about the display */
diff -u -w -r SDL-1.2.15/src/video/x11/SDL_x11sym.h SDL-1.2.15.ok/src/video/x11/SDL_x11sym.h
--- SDL-1.2.15/src/video/x11/SDL_x11sym.h 2012-01-19 14:30:06.000000000 +0800
+++ SDL-1.2.15.ok/src/video/x11/SDL_x11sym.h 2015-09-22 17:29:32.000000000 +0800
@@ -165,7 +165,7 @@
  */
 #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(int,_XData32,(Display *dpy,register const 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编译大告成功。紧接着就是ffplay,哈哈,OK了。

如果大家遇到和我一样的问题,希望能对你们有所帮助。
0 0