CentOS6平台编译安装MPEG4IP

原创 2013年09月23日 16:26:25


环境

1,  系统

# uname -a

Linux CentOS62.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64GNU/Linux

 

2,  相关软件

SDL-1.2.14-3.el6.x86_64

SDL-devel-1.2.14-3.el6.x86_64

ffmpeg-0.6.5-1.el5.rf.x86_64

ffmpeg-devel-0.6.5-1.el5.rf.x86_64

 

3,  Mpeg4ip

mpeg4ip-1.6.1.tar.gz

下载地址:http://people.freebsd.org/~ahze/distfiles/mpeg4ip-1.6.1.tar.gz

安装SDL

yum -y installSDL SDL-devel

 

安装FFMPEG

Centos下无法直接安装ffmpeg-devel,先用第一条命令升级一个数据源,就可以安装了

rpm -Uhvhttp://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

yum install -y automake autoconf libtool gcc gcc-c++

yum install -y ffmpegffmpeg-devel xvidcore-devel twolame-devel x264-devel

 

安装MPEG4IP

Mpeg4ip安装过程很简单,主要问题在于编译过程中的错误解决,本文也主要为解决这些问题

1,  解包

tar -zxvf mpeg4ip-1.6.1.tar.gz

2,  进入mpeg4ip-1.6.1目录,运行配置脚本

./bootstrap --prefix=/root/test/mpeg4ip

3,  编译,安装

make

make install

 

MPEG4IP编译错误及解决办法

1,  运行配置脚本bootstrap报错

checking fornasm... true

checking nasmversion...... nasm: error: unrecognised option `-r'

nasm: error: noinput file specified

type `nasm -h'for help

util/testnasm.sh:line 8: test: =: unary operator expected

util/testnasm.sh:line 8: test: =: unary operator expected

util/testnasm.sh:line 8: test: =: unary operator expected

util/testnasm.sh:line 8: test: =: unary operator expected

 

问题分析:nasm版本BUG,2.0以上版本中,参数‘-r’改为了‘-v’

解决办法:修改当前目录下configure文件29214行中的“nasm -r”为“nasm -v”

 

2,  编译过程报错

In file includedfrom 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*, constchar*)'

make[3]: ***[config_opts.lo] Error 1

make[3]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/lib/utils'

 

问题分析

解决办法:注释掉mpeg4ip.h:126的定义

 

3,  编译过程报错

cc1plus:warnings being treated as errors

sys_decoder_blkdec.cpp:In member function 'Void CVideoObjectDecoder::decodeIntraBlockTexture(PixelC*,Int, Int, Int, Int, MacroBlockMemory*, CMBMode*, const Int*, Int, constPixelC*, Int, Int)':

sys_decoder_blkdec.cpp:190:error: suggest parentheses around '&&' within '||'

sys_decoder_blkdec.cpp:205:error: suggest parentheses around '&&' within '||'

sys_decoder_blkdec.cpp:In member function 'Void CVideoObjectDecoder::inverseDCACPred(const CMBMode*,Int, Int*, Int, Int, const Int*, Int)':

sys_decoder_blkdec.cpp:631:error: suggest parentheses around '&&' within '||'

make[6]: ***[sys_decoder_blkdec.lo] Error 1

make[6]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/common/video/iso-mpeg4/src'

 

问题分析:编译过程把警告当做错误输出,cc1plus:warnings being treated as errors

解决办法:修改对应目录下的makefile,删除“-Werror”编译参数

 

4,  编译过程报错

type_basic.cpp:320:error: '<anonymous>' has incomplete type

type_basic.cpp:320:error: invalid use of 'Void'

type_basic.cpp:320:error: prototype for 'Void CMotionVector::setToZero(<type error>)' doesnot match any in class 'CMotionVector'

./../include/basic.hpp:441:error: candidate is: Void CMotionVector::setToZero()

make[6]: ***[type_basic.lo] Error 1

make[6]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/common/video/iso-mpeg4/src'

 

问题分析:参数列表中的“void”会被识别

解决办法:删除type_basic.cpp:320中参数列表中的“void”

 

5,  编译过程报错

cc1: warningsbeing treated as errors

config.c: Infunction 'enter_chn':

config.c:636:error: array subscript is above array bounds

config.c:637:error: array subscript is above array bounds

make[5]: ***[config.lo] Error 1

make[5]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/player/lib/audio/faad'

 

问题分析:编译过程把警告当做错误输出,cc1:warnings being treated as errors

解决办法:修改对应目录下的makefile,删除“-Werror”编译参数

 

6,  编译过程报错

In file includedfrom ffmpeg.cpp:26:

ffmpeg.h:29:28:error: ffmpeg/avcodec.h: No such file or directory

 

问题分析:FFMPEG库高版本更改了文件路径

解决办法:修改ffmpeg.h:29中的“#include<ffmpeg/avcodec.h>”为“#include <libavcodec/avcodec.h>”

后面多次碰到该问题,解决办法相同,不再重复

 

7,  编译过程报错

ffmpeg.cpp: Infunction 'int ffmpeg_decode(codec_data_t*, frame_timestamp_t*, int, int*,uint8_t*, uint32_t, void*)':

ffmpeg.cpp:225:error: 'avcodec_decode_audio' was not declared in this scope

make[5]: ***[ffmpeg.lo] Error 1

make[5]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/player/plugin/audio/ffmpeg'

 

问题分析:FFMPEG库高版本删除了“avcodec_decode_audio”函数

解决办法:修改ffmpeg.cpp:225中的“avcodec_decode_audio”为“avcodec_decode_audio2”

 

8,  编译过程报错

ffmpeg.cpp: Infunction 'int ffmpeg_decode(codec_data_t*, frame_timestamp_t*, int, int*,uint8_t*, uint32_t, void*)':

ffmpeg.cpp:591:error: 'img_convert' was not declared in this scope

make[5]: ***[ffmpeg.lo] Error 1

make[5]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/player/plugin/video/ffmpeg'

 

问题分析:FFMPEG库高版本删除了“img_convert”函数

解决办法:在ffmpeg.cpp文件增加如下代码,使用FFMPEG库新的函数实现一个img_convert函数

#include<libswscale/swscale.h>

intimg_convert(AVPicture *dst, int dst_pix_fmt,

                const AVPicture *src, intsrc_pix_fmt,

                int src_width, int src_height)

{

    int w;

    int h;

    SwsContext *pSwsCtx;

 

    w = src_width;

    h = src_height;

    pSwsCtx = sws_getContext(w, h,(PixelFormat)src_pix_fmt,

                            w, h,(PixelFormat)dst_pix_fmt,

                            SWS_BICUBIC, NULL,NULL, NULL);

 

    sws_scale(pSwsCtx, src->data,src->linesize,

            0, h, dst->data,dst->linesize);

 

    //删除分配的内存

    if(pSwsCtx)

    {

        free(pSwsCtx);

        pSwsCtx = NULL;

    }

 

    return 0;

}

 

9,  编译过程报错

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*'

make[4]: ***[media_utils.lo] Error 1

make[4]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/player/src'

 

问题分析:格式转换

解决办法:修改media_utils.cpp:613中的“name”为“(char*)name”

 

10,             编译过程报错

In file includedfrom ../../../server/mp4live/media_source.h:29,

                 from../../../server/mp4live/media_flow.h:27,

                 from gui_private.h:28,

                 from mp4live_gui.h:29,

                 from audio_dialog.cpp:25:

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

make[4]: ***[audio_dialog.lo] Error 1

make[4]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/server/mp4live/gui'

 

问题分析:奇葩问题。。。源文件中函数声明参数名都冲突

解决办法:直接把cpp文件中的函数定义复制过来

 

11,             编译过程报错

video_ffmpeg.cpp:In member function 'virtual bool CFfmpegVideoEncoder::Init()':

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'

make[4]: ***[video_ffmpeg.lo] Error 1

make[4]: Leavingdirectory `/root/test/mpeg4ip-1.6.1/server/mp4live'

 

问题分析:版本差异

解决办法:如果不用server的相关功能,可以直接注释掉,如果一定要用,只能去对照一下FFMPEG库的老版本和新版本之间的变量对应

 

参考文档

http://www.111cn.net/sys/linux/43014.htm


相关文章推荐

流媒体服务器全配置:Darwin Streaming Server,ffmpeg安装和Mpeg4IP ,MP4Box Mp4 hint媒体流化

系统环境为CentOS 6.2 64位  一,准备工作 DSS主页:http://dss.macosforge.org/ 下载安装包:wget http://dss.macosf...

ubuntu下编译libfaac 1.28遇到错误: mpeg4ip.h:126:58: error: new declaration ‘char*

libfaac 1.28 compilation fails with: mpeg4ip.h:126:58: error: new declaration ‘char* strcasestr(cons...

MP4文件写入音频和视频(使用mpeg4ip)

使用MPEG4IP库接口实现音视频存储 MP4WriteSample   写音视频帧(需要精确控制时间戳,时间戳可以使用相对值,即当前帧时间戳减去上一帧的时间戳) MP4AddH264Vi...

MPEG4IP

http://code.csdn.net/openkb/p-MPEG4IP 项目介绍: MPEG4IP提供一个端对端的系统来实现音视频流的传输,支持包括MPEG4/H.261/MPEG...

mpeg4ip

https://github.com/stsquad/mpeg4ip
  • wishfly
  • wishfly
  • 2017年02月22日 14:15
  • 419

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

今天编译通过Mpeg4ip和darwin streamer server

操作系统:Ubuntu 7.04Mpeg4ip:http://mpeg4ip.sourceforge.net/Darwin Streamer Server: http://developer.appl...
  • emlinux
  • emlinux
  • 2007年07月26日 11:27
  • 6030

Darwin Streaming Server源码分析

所谓的流式媒体简单的讲就是指人们通过网络实时的收看多媒体信息:如音频流、视频流等。与流式媒体对应的传统工作方式是下载+播放模式,即用户首先下载多媒体文件,然后再在本地播放,这种方法的一个主要缺点是启动...

Red5流化MP3遇到问题解决办法

在使用red5 0.8版本时,流化Mp3遇到问题: 日志记录: [ERROR] [pool-3-thread-1] org.red5.server.messaging.InMemoryPullPu...
  • zzaihl
  • zzaihl
  • 2011年11月04日 17:56
  • 3584

Vs2008编译mpeg4ip

Vs2008编译mpeg4ip          最近项目中要添加一个MP4文件录制功能,准备用mpeg4ip实现这个功能。下面是mpeg4ip在vs2008下编译的过程,遇到的一些问题,解决办法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CentOS6平台编译安装MPEG4IP
举报原因:
原因补充:

(最多只允许输入30个字)