MPlayer 是相当有名的跨平台多媒体播放软件,并且支持软件较多格式.(官方网站http://www.mplayerhq.hu/)在嵌入式领域也应用使用较多.因为教学和项目关系.我分别移植了MPlayer 桌面版,MPlayer的ARM和MIPS版,并且在上面加入live555的rstp支持.下面将基汇总.
- MPlayer v1.0rc2
http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc2.tar.bz2 - Binary Codec Packages(解码插件)
下载地址 http://www1.mplayerhq.hu/MPlayer/releases/codecs/
我们选择如下版本.
http://www1.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2 - x86_64系统支持包(解码包),64位CPU安装
http://www1.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2 - 下载皮肤
http://www.mplayerhq.hu/design7/dload.html
我选中是的 http://www.mplayerhq.hu/MPlayer/skins/PowerPlayer-1.1.tar.bz2
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
这是运行效果图
关于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)' |
这个是一个典型的链接错误,根源就是用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即可。
![](http://blogimg.chinaunix.net/blog/upfile2/091207222706.jpg)