Welcome 微信登录

首页 / 操作系统 / Linux / CentOS 6.2下编译mpeg4ip

一、环境1、操作系统版本CentOS 6.2 64uname -a的输出:Linux localhost.localdomain 2.6.32-220.17.1.el6.x86_64 #1 SMP Wed May 16 00:01:37 BST 2012 x86_64 x86_64 x86_64 GNU/Linux2mpeg4ip版本版本:1.6.1下载链接:http://people.freebsd.org/~ahze/distfiles/mpeg4ip-1.6.1.tar.gz  二、编译 1、编译mpeg4ip需要的库 首先安装libtool库,命令如下: yum install libtool 然后进入到mpeg4ip的目录,运行./bootstrap进行配置,如果出错,是因为bash版本及名称的问题,修改bootstrap文件中第一行,改sh 为bash.或运行 bash ./bootstrap。 提示如下:  *** ffmpeg encoder is not installed*** xvid encoder is not installed*** x264 encoder is not installed*** lame encoder is not installed*** faac encoder is not installed*** twolame encoder is not installed 安装相应库: yum install ffmpeg-devel xvidcore-devel twolame-devel x264-devel 编译:make 2、编译中的错误处理 2.1 报错内容:  In file included from config_opts.cpp:1:/include/mpeg4ip.h:126: error: new declaration "char* strcasestr(const char*, const char*)"/usr/include/string.h:369: error: ambiguates old declaration "const char* strcasestr(const char*, const char*)"解决办法:vi include/mpeg4ip.h 注释掉函数声明,如下所示:2.2 报错内容: cc1plus: warnings being treated as errorssys_decoder_blkdec.cpp:190: error: suggest parentheses around "&&" within "||"sys_decoder_blkdec.cpp:205: error: suggest parentheses around "&&" within "||" 如图所示:解决办法:vi common/video/iso-mpeg4/src/Makefile 去掉Werror vi命令: %s/-Werror//2.3 报错内容: type_basic.cpp:320: error: "<anonymous>" has incomplete typetype_basic.cpp:320: error: invalid use of "Void"type_basic.cpp:320: error: prototype for "Void CMotionVector::setToZero(<type error>)" does not match any in class "CMotionVector"./../include/basic.hpp:441: error: candidate is: Void CMotionVector::setToZero()解决办法: vi common/video/iso-mpeg4/src/type_basic.cpp 在320行去掉括号内的Void,如图所示:2.4 报错内容:  cc1: warnings being treated as errorsconfig.c: In function "enter_chn":config.c:636: error: array subscript is above array boundsconfig.c:637: error: array subscript is above array bounds解决办法: vi player/lib/audio/faad/Makefile 去掉Werror 2.5 报错内容: /usr/local/include/libavutil/common.h: In function ‘int32_t av_clipl_int32(int64_t)’:/usr/local/include/libavutil/common.h:154: error: ‘UINT64_C’ was not declared in this scope...解决办法: 涉及到标准c和c99的问题,在出问题的文件中加上下面三句话就好了 #ifndef UINT64_C#define UINT64_C(value)__CONCAT(value,ULL)#endif2.6 报错内容: In file included from ffmpeg.cpp:26:ffmpeg.h:29:28: error: ffmpeg/avcodec.h: No such file or directory... 解决办法:版本遗留问题,修改下路径就行了。其实这是一类问题,接下来还会遇到好多次,以这个为例展例下,其它的照此修改就OK了。vi player/plugin/audio/ffmpeg/ffmpeg.h在第30行进行修改,替换成完整路径:#include <ffmpeg-spice/libavcodec/avcodec.h> 2.7 报错内容: ffmpeg.cpp: In function "codec_data_t* ffmpeg_create(const char*, const char*, int, int, format_list_t*, audio_info_t*, const uint8_t*, uint32_t, audio_vft_t*, void*)":ffmpeg.cpp:180: error: "AVCODEC_MAX_AUDIO_FRAME_SIZE" was not declared in this scopeffmpeg.cpp: In function "int ffmpeg_decode(codec_data_t*, frame_timestamp_t*, int, int*, uint8_t*, uint32_t, void*)": 解决办法:vi /usr/include/ffmpeg-spice/libavcodec/avcodec.h查找 AVCODEC_MAX_AUDIO_FRAME_SIZE,得到如下结果: 复制其值到文件player/plugin/audio/ffmpeg/ffmpeg.h,并把Q去掉:vi player/plugin/audio/ffmpeg/ffmpeg.h添加如下内容:#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 2.8 报错内容: media_utils.cpp: In function "int create_media_for_iptv(CPlayerSession*, const char*, int, control_callback_vft_t*)":media_utils.cpp:613: error: invalid conversion from "const char*" to "char*" 解决办法:vi player/src/media_utils.cpp在613行,对name变量进行强制类型转换,如图所示: 2.9 报错内容:../server/mp4live/video_util_resize.h:93: error: conflicting declaration "uint8_t* fV"../server/mp4live/video_util_resize.h:91: error: "fV" has a previous declaration as "const uint8_t* fV"../server/mp4live/video_util_resize.h:94: error: redefinition of "uint32_t tvStride"../server/mp4live/video_util_resize.h:94: error: "uint32_t tvStride" previously declared here解决办法:
这个就是函数声明的时候变量重名了,把名字修改的不同就OK了。这是我修改:
void CopyYuv(const uint8_t *fY, const uint8_t *fU, const uint8_t *fV,             uint32_t fyStride, uint32_t fuStride, uint32_t fvStride2,             uint8_t *tY, uint8_t *tU, uint8_t *fV2,             uint32_t tyStride, uint32_t tvStride, uint32_t tvStride2,             uint32_t w, uint32_t h); 2.10 报错内容:video_ffmpeg.cpp:124: error: "struct AVCodecContext" has no member named "frame_rate"video_ffmpeg.cpp:125: error: "struct AVCodecContext" has no member named "frame_rate_base"video_ffmpeg.cpp:136: error: "struct AVCodecContext" has no member named "aspect_ratio"解决办法:这几个错误影响不大,就直接注释掉了,我主要用mp4live 好,编译成功,make install 即可使用。三、安装使用1、安装make install2、使用mp4livegcc命令行详解CentOS 6.2编译安装PHP5.4.0相关资讯      CentOS教程  mpeg4ip 
  • CentOS上使用Dropbox  (02/07/2013 09:11:47)
  • CentOS 网络设置修改  (02/04/2013 21:28:42)
  • CentOS如何安装whois命令  (01/20/2013 14:33:29)
  • CentOS 下修改/dev/shm 大小解决  (02/04/2013 21:30:15)
  • CentOS 注销在线用户, Linux 注销  (02/04/2013 21:24:06)
  • CentOS安装完重启后不能进入终端  (01/02/2013 16:04:02)
本文评论 查看全部评论 (0)
表情: 姓名: 字数