蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88
全部博文(311)
分类: LINUX
2009-11-23 21:27:59
2.MPlayer 的编译安装.
运行MPlayer
这是运行效果图
关于live555的编译,请参见 http://blog.chinaunix.net/u3/105675/showart.php?id=2113220
这里假设已经用编译好live555四个库
将其拷入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即可。
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