移植mplayer到开发板

转载 移植mplayer的时候出错从这位小哥得到了启发
https://wenku.baidu.com/view/3d3f7c8f8762caaedd33d4c4.html
mplayer播放是出错: [AO OSS] audio_setup: Can't open audio device /dev/dsp: No such file or directory
解决办法: 原因是你的linux系统的linux内核版本中没有加入oss的音频输入框架。
默认的情况想2.4以上的内核默认只带alsa的架构的。而你当前版本的mplayer里面不支持alsa输出。
用命令:./mplayer -ao -help得到的打印中:
oss OSS/ioctl audio output
mpegpes DVB audio output
v4l2 V4L2 MPEG Audio Decoder output
null Null audio output
pcm RAW PCM/WAVE file writer audio output
没有alsa输出可选。
明白了上面的两种区别之后就有两种解决办法:其一是在你现有的内核版本中加入oss输出的支持,
其二就是让mplayer支持alsa输出。在这里我选择了第二个解决方式。

上述只是音频问题的解决,如果mplayer视频观看不正常,同理可用./mplayer -vo help查看
当前的mplayer支持哪些视频播放模式,如果缺少某一种就在后叙编译的时候enable上


先指定交叉编译器
#echo PATH=/usr/local/arm/4.5.1/bin:$PATH
#vi ~/.bashrc查看一下是否指定交叉编译器了
#source ~/.bashrc使配置生效

配置安装alsa-lib1.1.5
#./configure --host=arm-none-linux-gnueabi --prefix=/usr/local/arm4.5-mplayer
#make
#make install

配置安装alsa-utils1.1.5
#./configure --host=arm-none-linux-gnueabi --prefix=/usr/local/arm4.5-mplayer --with-alsa-inc-prefix=/usr/local/arm4.5-mplayer/include --with-alsa-prefix=/usr/local/arm4.5-mplayer/lib --disable-alsamixer --disable-xmlto
#make
#make install


配置安装zlib1.2.3
执行如下操作:
#./configure --prefix=/usr/local/arm4.5-mplayer
修改Makefile中的如下内容的值如下:
CC=arm-none-linux-gnueabi-gcc
LDSHARED=arm-none-linux-gnueabi-gcc
CPP=arm-none-linux-gnueabi-gcc -E
AR=arm-none-linux-gnueabi-ar rc
RANLIB=arm-none-linux-gnueabi-ranlib
然后执行继续如下操作:
#make
#make install

配置安装libid3tag0.15.1b
执行如下操作:
#./configure --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc CPPFLAGS=-I/usr/local/arm4.5-mplayer/include LDFLAGS=-L/usr/local/arm4.5-mplayer/lib --prefix=/usr/local/arm4.5-mplayer
上面的相关参数意义如下
CPPFLAGS 添加一个自定义头文件路径
LDFLAGS 添加一个自定义的库文件路径
#make
#make install

配置安装libmad0.15.1b
执行如下操作:
#./configure --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc --enable-fpm=arm --disable-debugging CPPFLAGS=-I/usr/local/arm4.5-mplayer/include LDFLAGS=-L/usr/local/arm4.5-mplayer/lib --prefix=/usr/local/arm4.5-mplayer
#make
#make install

注:上诉所有库的安装不建议静态编译(将参数--enable-static ---disable-shared加上的话,库安装完成之后,就只生成静态库文件不生成动态文件)
具体的configure配置命令可参考当前目录下,执行./configure -h查看

make过程中可能会出现的错误:
1
注意:根据自己的错误提示来输入命令
如果提示是t-ru.gmo的话,就用命令:touch alsaconf/po/t-ru.gmo
如果提示是t-ja.gmo的话,就用命令:touch alsaconf/po/t-ja.gmo
值得注意的地方是:如果还是报错,那就make clean一下
避免之后make报错
2
cc1: error: unrecognized command line option “-fforce-mem”
(其实这个错误是编译安装libmad时候引起的,audacity包含libmad)
解决方式是:找到libmad configure之后的Makefile,并vi Makefile
去掉129行"-fforce-mem"字符串,因为arm-eabi编译器都不支持这个选项,将其删除之后,就ok了
3

4
5
6

配置安装mplayer1.1以上
./configure --cc=arm-none-linux-gnueabi-gcc --host-cc=gcc --target=arm-none-linux-gnueabi --disable-win32dll --disable-dvdread --disable-ivtv --enable-alsa --enable-static --enable-fbdev --disable-mencoder --disable-live --disable-mp3lib --enable-mad --language=zh_CN --disable-armv5te --disable-armv6 --extra-cflags="-I/usr/local/arm4.5-mplayer/include/ -DHAVE_ARMV8=0" --extra-ldflags="-L/usr/local/arm4.5-mplayer/lib/ -lz -lasound"
make
不需make install(没必要)
make过程中可能会出现的问题:
1
Error:motion_comp_arm_s.S

在libmpeg2/motion_comp_arm_s.S文件的最前面加上如下的内容:

#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
2
vo_ivtv.c:79: error: storage size of ’sd’ isn’t known

vo_ivtv.c:80: error: storage size of ’sd1′ isn’t known

在./configure配置命令添加--disable-ivtv
3
undefined reference to `video_out_ivtv'

在文件 file libvo/video_out.c, 找到
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
extern vo_functions_t video_out_dxr3;
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif
edit it like this:
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
#ifdef HAVE_DXR3 //这一句是要添加的
extern vo_functions_t video_out_dxr3;
#endif //这句是要添加的
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif

使用arm-linux-gcc 3.3.2编译mplayer可能会出现in.h头文件错误如下:

/usr/local/arm/3.3.2/include/netinet/in.h:259: parse error before '(' token
/usr/local/arm/3.3.2/include/netinet/in.h:259: parse error before "__u32"
/usr/local/arm/3.3.2/include/netinet/in.h:260: parse error before '(' token
/usr/local/arm/3.3.2/include/netinet/in.h:260: parse error before "__u16"
/usr/local/arm/3.3.2/include/netinet/in.h:262: parse error before '(' token
/usr/local/arm/3.3.2/include/netinet/in.h:262: parse error before "__u32"

需要修改一下/usr/local/arm/3.3.2/include/netinet/in.h中,在 __BEGIN_DECLS 后面增加下述文字

#undef ntohl
#undef ntohs
#undef htonl
#undef htons
4

5
6

成功移植后的mplayer拷贝到arm板子执行,如果缺少什么库就去编译主机的/usr/local/arm4.5-mplayer/lib目录下找,拷贝到板子的/lib目录即可(拷贝时要注意软连接和硬链接)
音频测试:./mplayer *.mp3/*.wma/...
视频测试:./mplayer *.mp4/*.avi/... -fs

原文地址:https://www.cnblogs.com/cyyz-le/p/12555914.html