Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1675018
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: LINUX

2009-11-23 21:27:59

  MPlayer 是相当有名的跨平台多媒体播放软件,并且支持软件较多格式.(官方网站)在嵌入式领域也应用使用较多.因为教学和项目关系.我分别移植了MPlayer 桌面版,MPlayer的ARM和MIPS版,并且在上面加入live555的rstp支持.下面将基汇总.
  
X86快速安装
 
1.相关源码,解码库下载
 
为减少编译.除了MPlayer本身用源码编译外,其余都使用已经编译好的包.首先需要下载如下包
  • MPlayer v1.0rc2
  • Binary Codec Packages(解码插件)
     下载地址
     我们选择如下版本.
  • x86_64系统支持包(解码包),64位CPU安装
  • 下载皮肤

    我选中是的

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即可。

 

 

 

 


 


 
阅读(3713) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-06-11 17:34:21

你好,我也是以上的链接错误,也一直得不到解决,请问还有什么办法吗?我的是交叉编译的,不过应该没什么影响吧?谢谢!

bluedrum2010-03-24 22:13:52

这个要看环境,看提示你检查一下libmpdemux/libmpdemux.a,中是否有相应的object文件.这里都提示没有找到.最好用nm倒一下符号表来确认一下

chinaunix网友2010-03-16 20:30:35

你好 我加入流媒体支持的时候也出现了同样的错误,按照你的方法没有解决 你能不能帮我看看该怎么解决 谢谢 我的邮箱jianl@mail.ustc.edu.cn 错误如下: root@smart:~/workspace/MPlayer-1.0rc2# g++ -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