MPlayer X86 下编译

MPlayer 是相当有名的跨平台多媒体播放软件,并且支持软件较多格式.(官方网站http://www.mplayerhq.hu/)在嵌入式领域也应用使用较多.因为教学和项目关系.我分别移植了MPlayer 桌面版,MPlayer的ARM和MIPS版,并且在上面加入live555的rstp支持.下面将基汇总.

  
X86快速安装
 
1.相关源码,解码库下载
 
为减少编译.除了MPlayer本身用源码编译外,其余都使用已经编译好的包.首先需要下载如下包

2.MPlayer 的编译安装.

  •  创解压解码库,(放入/usr/local/lib/codecs当中)
    •  tar xvjf essential-20071007.tar.bz2 -C /usr/local/lib/
    • mv /usr/local/lib/essential-20071007 /usr/local/lib/codecs
  • 解压MPlayer源码,编译
    •  tar xvjf MPlayer-1.0rc2.tar.bz2;cd MPlayer-1.0rc2
    • ./configure --enable-gui --enable-x11 ; make ; make install
  • 安装皮肤,将所选的包解压,拷入MPlayer的安装目录当中.将其改名为default,
    • mkdir -p /usr/local/share/mplayer/skins
    • tar xvjf PowerPlayer-1.1.tar.bz2 -C /usr/local/share/mplayer/skins
    • cd /usr/local/share/mplayer/skins ;mv PowerPlayer/  default/
  • 安装字体
    • 从WINDOWS找一款TrueType 字体.改名为subfont.ttf,放在/usr/local/share/mplayer目录下.

   运行MPlayer

  • gmplayer 是Mplayer 的GUI前端. 
  • 如果提示 "It seems there is no Xvideo support for your video card available",则执行时可以,这样速度慢点,但可播放.
    • gmplayer -vo x11

这是运行效果图

加入流媒体支持
 
MPlayer的流媒体的支持.需要第三方库支持,其中对RSTP流媒体的支持.需要用live555的库支持.并且在生成MPlayer 的Makefile 时,加入 --enable-live 选项.
MPlayer的解释是  --enable-live          enable LIVE555 Streaming Media

关于live555的编译,请参见 http://blog.chinaunix.net/u3/105675/showart.php?id=2113220

这里假设已经用编译好live555四个库

  • live/BasicUsageEnvironment/libBasicUsageEnvironment.a
  • live/groupsock/libgroupsock.a
  • live/UsageEnvironment/libUsageEnvironment.a
  • live/liveMedia/libliveMedia.a

将其拷入MPlayer 能找到的库路径下.(假设是 output/linux_x86/lib)

把live555所有头文件,统一拷入到MPlayer 能找到的包含目录(假设output/linux_x86/include)

这样configure 脚本就变成了

./configure --enable-gui --enable-x11 --enable-mad --enable-live --with-extraincdir="$PWD/../output/linux_x86/include" --with-extralibdir="$PWD/../output/linux_x86/lib"

然后make clean & make.最后会在链接时候报错.

demux_rtp_codec.cpp:(.text+0x8f5): undefined reference to `operator new[](unsigned int)'
demux_rtp_codec.cpp:(.text+0x9b4): undefined reference to `operator delete[](void*)'

这个是一个典型的链接错误,根源就是用gcc链接C程序时,链接了C++的库.这样gcc 并不认识new,delete之类C++关键字.解决办法有几种.

一种是把C程序用g++重编译一次.这样相当于把整个程序当成C++程序来处理,这种方法比较省事。但是不合适的MPlayer,因为mplayer.c 有一千多句中指针转换没有使用强制类型转换。这个在C无所谓,在C++会报编译错误

另外一种是在C++库中使用一个C的代理函数,让调用的C程序去通这个代理函数来调用C++库。这意味要调整代码。这里不太合适这样做。

还有一种比较简单但是不太通用的方法。就是在链接应用程序时,使用g++来链接。但对复杂Makefile,不太容易找到最后的链接语句,一种简单方法是在编译时最后的链接语句拷贝出来修改成g++后,再拷回终端执行。Mplayer的链接语句如下,把cc改成g++重新执行一次则不会报错。

cc -o mplayer mplayer.o m_property.o mp_fifo.o mp_msg.o mixer.o parser-mpcmd.o subopt-helper.o command.o asxparser.o codec-cfg.o cpudetect.o edl.o find_sub.o get_path.o m_config.o m_option.o m_struct.o mpcommon.o parser-cfg.o playtree.o playtreeparser.o spudec.o sub_cc.o subreader.o vobsub.o unrarlib.o libvo/libvo.a libao2/libao2.a input/libinput.a vidix/libvidix.a gui/libgui.a libmpcodecs/libmpcodecs.a libaf/libaf.a libmpdemux/libmpdemux.a stream/stream.a libswscale/libswscale.a libvo/libosd.a libavformat/libavformat.a libavcodec/libavcodec.a libavutil/libavutil.a libpostproc/libpostproc.a loader/libloader.a mp3lib/libmp3.a liba52/liba52.a libmpeg2/libmpeg2.a libfaad2/libfaad2.a tremor/libvorbisidec.a dvdread/libdvdread.a libdvdcss/libdvdcss.a libass/libass.a osdep/libosdep.a -lXv -lXinerama -lXxf86vm -lXxf86dga -lGL -ldl -Wl,-rpath,/usr/local/lib -lSDL -lpthread -lartsc -lpthread -lgmodule-2.0 -ldl -lgthread-2.0 -lglib-2.0 -lesd -laudiofile -lm -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lglib-2.0 -L/lib -L/lib -L/lib -L/usr/local/lib -Wl,-z,noexecstack -L/home/hxy/project/porting/MPlayer_x86/MPlayer-1.0rc2/../output/linux_x86/lib  -liconv -lncurses -lsmbclient -lpng -lz -ljpeg -lungif -lasound -ldl -lpthread -lfreetype -lfontconfig  -lz -lmad -lpthread -ldl -rdynamic  -lm 

这种方法的问题是不能用make install来安装,这样一执行又会因上面原因报错。只能手工安装,所以最好是在原来成功的用make install安装一次后,再手工把这支持流媒体播放的mplayer 版本拷到/usr/local/bin下面。

播放时,选择图形界面的中URL按钮。再输入相应RTSP的URL即可。

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值