嵌入式爱好者

查看: 10751|回复: 20

成功移植Mplayer到OK6410开发板上,发帖详述移植过程

  [复制链接]

0

主题

0

帖子

0

积分

扫一扫,手机访问本帖
发表于 2011-5-30 22:25:25 | 显示全部楼层 |阅读模式
移植Mplayer到OK6410开发板

  项目需要,需要将Mplayer移植到开发板上,所以今天花了一下下午成功移植,其中参考很多文档,后发现许多文档陈旧,些许文档有少量错误,所以这里整理一下放出来。经过测试,avi、mp3等音视频播放流畅,运行正常,下面就是移植过程,给大家做参考。测试步骤我觉得没必要放上来,请见谅。作者lcc76161113,欢迎转载。

    编译器:arm-linux-gcc(4.3.2)
    Pc平台:ubuntu

    在移植之前有必要先说明一下几个问题:
    Mplayer是自带的mp3lib库来进行mp3解码的,但是arm系列的cpu,一般都没浮点运算单元,而mplayer的mp3解码默认使用mp3lib,这个是浮点运算库,arm上肯定跑不了。所以使用libmad库应该就没问题了,所以需要提前移植libmad库。

(1)准备工作
①下载库文件libmad-0.15.1b.tar.gz并解压到 /usr/local/libmad
  ②下载Mplayer的tar包,官方下载地址http://www.mplayerhq.hu,进去后在ftp里面很多版本可以选,我选的最新的MPlayer-1.0rc4.tar.gz,大小12.3M。
③准备编译前请先确定已安装交叉编译器arm-linux-gcc(4.3.2),并已经在终端设置好环境变量,做好这些就可以开始移植工作了。


(2)编译libmad
①先下载压缩包到本地,并解压libmad-0.15.1b.tar.gz到/usr/local/libmad:
lcc@ubuntu: /usr/local/libmad # tar zxvf mysql-5.1.51.tar.gz
②进入解压得到的源码目录中:
      lcc@ubuntu: /usr/local/libmad # cd libmad-0.15.1b
③运行configure,生成makefile:
      lcc@ubuntu: /usr/local/libmad/libmad-0.15.1b #./configure CC=arm-linux-gcc --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/libmab/mad
④修改makefile:
    lcc@ubuntu: /usr/local/libmad/libmad-0.15.1b #./gedit Makefile
    找到里面的“--fforce-mem”,然后删除保存退出即可
⑤直接开始运行make编译源代码:
lcc@ubuntu: /usr/local/libmad/libmad-0.15.1b # make

(3)交叉编译Mplayer
①先下载压缩包到本地,并解压MPlayer-1.0rc4.tar.gz到/usr/local/mplayer:
lcc@ubuntu: /usr/local/mplayer # tar zxvf MPlayer-1.0rc4.tar.gz

②进入解压得到的源码目录中:
lcc@ubuntu: /usr/local/mplayer # cd MPlayer-1.0rc4

③运行configure,生成makefile:
lcc@ubuntu: /usr/local/mplayer/ MPlayer-1.0rc4#
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --enable-fbdev --enable-static --disable-dvdread --disable-live --disable-mp3lib --enable-mad --disable-win32dll --disable-mencoder --disable-ivtv --disable-dvdnav --disable-dvdread-internal --disable-libdvdcss-internal --enable-libavcodec_a --prefix=/usr/local/Mplayer/mplayer 2>&1 | tee logfile

这个就是我的配置内容,这里详细说明一下:
--host-cc=gcc --cc=arm-linux-gcc --target=arm-linux   //这个不需要解释
--enable-fbdev                           //打开framebuffer支持.ARM开发板必须的
--enable-static                           //静态编译,编译成功后只需要将exe文件拷走即可以使用
--disable-dvdread --disable-dvdnav --disable-dvdread-internal //全部与DVD相关,无视即可
--disable-libdvdcss-internal        //这个不加低版本mplayer也会出错
--disable-live                              //禁止流媒体,我们用不到
--disable-mp3lib --enable-mad  //关闭默认的MP3解码库,使用我们刚才编译的libmad
--disable-win32dll                      //禁用win32动态链接库支持
--disable-mencoder                   //交叉编译mencoder会有问题,而且arm上不需要这个功能
--disable-ivtv                             //如果不加会出现ivtv文件产生的错误  
--enable-libavcodec_a               //启用静态的libavcodec解码
--prefix=/usr/local/Mplayer/mplayer 2>&1 | tee logfile  //不解释

特别说明:
    注意!!configure里面没有下面2句:
   --enable-static --with-extraincdir=/usr/local/libmab/mad/include
      --with-extralibdir=/usr/local /libmab/mad/lib


    本来是还要有这2句话来指定我们编译的新的libmad的库的,但是由于新下载的mplayer源代码在配置的时候--with-extraincdir   –with-extralibdir提示没有此配置选项,因此需手动添加libmad库的支持,我的解决方法是将/ usr/local /libmab/mad/include下文件直接拷贝到mplayer源代码中,而对于其下面的库libmad.a,则先执行上面的“运行configure”一步,会生成config.mak文件,然后修改config.mak中在-lmad -L/usr/local /libmab/mad/lib,然后执行下一步即可。
④修改Makefile.
修改MPlayer-1.0rc4/libmpeg2/motion_comp_arm_s.S文件
lcc@ubuntu: /usr/local/mplayer/ MPlayer-1.0rc4#
gedit  /libmepg2/motion_comp_s.S
在最前加入:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif

⑤直接开始运行make编译源代码:
lcc@ubuntu: /usr/local/mplayer/ MPlayer-1.0rc4# make
⑥Make完成后,执行makeinstall命令,但是我遇到了如下问题:
lcc@ubuntu: /usr/local/mplayer/ MPlayer-1.0rc4# make install

        install -m 755 -s mplayer /home/hxy/MPlayer/
        MPlayer-1.0rc4/../mplayer/bin
        strip: Unable to recognise the format of the input file
       `/user/local/Mplayer/MPlayer-1.0rc4/../mplayer/bin/mplayer'



解决方法:
查资料看install带-s 参数时会自动调用strip来strip应用程序。但是arm编译时要调用arm-linux-strip才有正确处理。解决办法是取消-s参数,查看Makefile可以发现-s是如下
$(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF)     $(BINDIR)
    的INSTALLSTRIP设置的,它默认是-s,因此只要简单在Makefile的install部分前面加入:
INSTALLSTRIP :=  #将其置为空即可

⑥再次执行makeinstall命令,生成mplayer:
    lcc@ubuntu: /usr/local/mplayer/ MPlayer-1.0rc4# make install

附带一个只有图像没有声音的错误解决办法:
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound/
原因:目标系统上有 /dev/dsp 音频设备文件,只是OSS音频驱动需要的是 /dev/sound/dsp 设备文件,这问题的简单解决方法是建一个符号链接,当然这两条命令可以写在系统的启动文件的适当位置,即修改系统的/etc/init.d/rcS文件。

至此,mplayer已经交叉编译成功,放在板子上测试一切正常。

欢迎到baidu文库下载,里面颜色比较明显方便阅读,免费下载的
我的文库还有交叉编译mysql数据库的全过程文档.
baidu文库搜索lcc76161113
回复

使用道具 举报

29

主题

9048

帖子

5593

积分

发表于 2011-5-31 10:40:06 | 显示全部楼层
谢谢分享
该会员没有填写今日想说内容.
idolidolidol 该用户已被删除
发表于 2011-6-3 09:07:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
idolidolidol 该用户已被删除
发表于 2011-6-3 09:09:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

0

帖子

0

积分

发表于 2011-6-3 09:18:13 | 显示全部楼层
支持一下,有空我也尝试。。谢谢!!

0

主题

0

帖子

0

积分

 楼主| 发表于 2011-6-3 09:53:13 | 显示全部楼层
所谓顶层,其实也就是一个播放界面.我是拿QT写的
至于能不能一帧一帧的播放,我觉得可以,但是还不知道怎么尝试。因为avi播放的时候,串口会把每一帧的数据都显示出来,既然这样那么就应该可以一帧一帧的操作
idolidolidol 该用户已被删除
发表于 2011-6-3 12:30:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
idolidolidol 该用户已被删除
发表于 2011-6-3 12:37:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

0

帖子

0

积分

 楼主| 发表于 2011-6-7 13:32:22 | 显示全部楼层
测试:
你交叉编译好了,放到开发板上  往开发板放一个mp3 或者avi
然后./mplayer ***(你视频的位置) 就可以播放了阿
idolidolidol 该用户已被删除
发表于 2011-6-8 09:11:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
idolidolidol 该用户已被删除
发表于 2011-6-8 09:13:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
tbauto 该用户已被删除
发表于 2011-6-10 09:33:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
shushu 该用户已被删除
发表于 2011-6-10 09:38:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
大头葱 该用户已被删除
发表于 2011-6-10 12:22:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
大头葱 该用户已被删除
发表于 2011-6-10 16:54:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
idolidolidol 该用户已被删除
发表于 2011-6-30 16:26:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
jophy 该用户已被删除
发表于 2011-6-30 17:04:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
edisonzhao 该用户已被删除
发表于 2011-7-16 11:09:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
myem007 该用户已被删除
发表于 2011-7-17 23:16:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
myem007 该用户已被删除
发表于 2011-7-30 02:16:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-5-2 10:36

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表