当前位置: 技术问答>linux和unix
移植mplayer通过,散分
来源: 互联网 发布时间:2015-12-20
本文导语: 今天终于将mplayer移植到了ARM-LINUX上,散分庆祝!!!!现将移植步骤说一下: 1.在mplayer官方网站下载最新版源码 2.编写脚本文件build.sh,文件内容如下: ./configure --cc=arm-linux-gcc --host-cc=gcc --enable-cross-compi...
今天终于将mplayer移植到了ARM-LINUX上,散分庆祝!!!!现将移植步骤说一下:
1.在mplayer官方网站下载最新版源码
2.编写脚本文件build.sh,文件内容如下:
./configure --cc=arm-linux-gcc
--host-cc=gcc
--enable-cross-compile
--target=arm-armv4l-linux
--enable-linux-devfs
--disable-win32
--disable-dvdread
--enable-fbdev
--disable-mencoder
--enable-libavcodec
--enable-liba52
--disable-libmpeg2
--disable-mp3lib
--enable-static
--disable-live
3.为该文件加上可执行权限: chmod +x build.sh
4.执行此脚本文件: ./build.sh
5.如果你的板子上没有RTC驱动,就修改顶层目录下的config.h文件,将文件中的#define HAVE_RTC 1这一行给注释掉
6.如果你不想修改你的音频驱动(之所以要修改音频驱动,网上有相关介绍,主要原因是代码中与驱动的结合不太好,代码中出现了一个整数除以0的情况导致程序异常),就按照以下的方法修改libao2/ao_oss.c文件:
第一步:找到static int play(void* data,int len,int flags)函数,在第一行加入ao_data.outburst = 8192;
第二步:找到static float get_delay(void)函数,注释掉里面所有内容,最后加入:return 0.8;
第三步:找到static int init(int rate,int channels,int format,int flags)函数中的如下代码,并注释掉:
if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)==-1){
int r=0;
mp_msg(MSGT_AO,MSGL_WARN,MSGTR_AO_OSS_CantUseGetospace);
if(ioctl(audio_fd, SNDCTL_DSP_GETBLKSIZE, &r)==-1){
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (config.h)n",ao_data.outburst);
} else {
ao_data.outburst=r;
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (GETBLKSIZE)n",ao_data.outburst);
}
} else {
mp_msg(MSGT_AO,MSGL_V,"audio_setup: frags: %3d/%d (%d bytes/frag) free: %6dn",
zz.fragments, zz.fragstotal, zz.fragsize, zz.bytes);
if(ao_data.buffersize==-1) ao_data.buffersize=zz.bytes;
ao_data.outburst=zz.fragsize;
}
在之后加入以下两行:
ao_data.outburst=8192;
ao_data.buffersize=32768;
到此大功告成,在命令行下输入make,最终将会在当前目录下生成mplayer文件,大概有十来M,下载到板子上就可以播放音频或者视频文件了.注意:如果你没有使用RTC,就需要用软件同步的方法,也就是在播放同时有音频与视频的文件时,需要加上参数
-softsleep
1.在mplayer官方网站下载最新版源码
2.编写脚本文件build.sh,文件内容如下:
./configure --cc=arm-linux-gcc
--host-cc=gcc
--enable-cross-compile
--target=arm-armv4l-linux
--enable-linux-devfs
--disable-win32
--disable-dvdread
--enable-fbdev
--disable-mencoder
--enable-libavcodec
--enable-liba52
--disable-libmpeg2
--disable-mp3lib
--enable-static
--disable-live
3.为该文件加上可执行权限: chmod +x build.sh
4.执行此脚本文件: ./build.sh
5.如果你的板子上没有RTC驱动,就修改顶层目录下的config.h文件,将文件中的#define HAVE_RTC 1这一行给注释掉
6.如果你不想修改你的音频驱动(之所以要修改音频驱动,网上有相关介绍,主要原因是代码中与驱动的结合不太好,代码中出现了一个整数除以0的情况导致程序异常),就按照以下的方法修改libao2/ao_oss.c文件:
第一步:找到static int play(void* data,int len,int flags)函数,在第一行加入ao_data.outburst = 8192;
第二步:找到static float get_delay(void)函数,注释掉里面所有内容,最后加入:return 0.8;
第三步:找到static int init(int rate,int channels,int format,int flags)函数中的如下代码,并注释掉:
if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)==-1){
int r=0;
mp_msg(MSGT_AO,MSGL_WARN,MSGTR_AO_OSS_CantUseGetospace);
if(ioctl(audio_fd, SNDCTL_DSP_GETBLKSIZE, &r)==-1){
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (config.h)n",ao_data.outburst);
} else {
ao_data.outburst=r;
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (GETBLKSIZE)n",ao_data.outburst);
}
} else {
mp_msg(MSGT_AO,MSGL_V,"audio_setup: frags: %3d/%d (%d bytes/frag) free: %6dn",
zz.fragments, zz.fragstotal, zz.fragsize, zz.bytes);
if(ao_data.buffersize==-1) ao_data.buffersize=zz.bytes;
ao_data.outburst=zz.fragsize;
}
在之后加入以下两行:
ao_data.outburst=8192;
ao_data.buffersize=32768;
到此大功告成,在命令行下输入make,最终将会在当前目录下生成mplayer文件,大概有十来M,下载到板子上就可以播放音频或者视频文件了.注意:如果你没有使用RTC,就需要用软件同步的方法,也就是在播放同时有音频与视频的文件时,需要加上参数
-softsleep
|
mark是个好习惯
|
我的手机E680i就是使用ARM体系芯片Linux系统,早就使用了Mplayer的移植了,这个在手机论坛上早就有了,而且它还只能在交叉编译系统中完成编译,再传到目标上调试的。
|
恭喜楼主
以后还望楼主多多指教
以后还望楼主多多指教
|
吼吼
|
接分
这种移植, 熟能生巧:)
这种移植, 熟能生巧:)
|
学习,做个标记先。
|
10m 也太大了八
|
恭喜~~~~
|
厉害
|
我的板子上音频是1341的,参照楼主的方法make出了mplayer,但是在播放"qq爱.mp3"时没声音。
主要表现在start playing就不动了。
我是在U盘上播放的,U盘的灯这时也不闪了,正常应该是要闪的。
请楼主帮忙!
主要表现在start playing就不动了。
我是在U盘上播放的,U盘的灯这时也不闪了,正常应该是要闪的。
请楼主帮忙!