MplayerSDL移植.docx
- 文档编号:16485641
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:21
- 大小:1.58MB
MplayerSDL移植.docx
《MplayerSDL移植.docx》由会员分享,可在线阅读,更多相关《MplayerSDL移植.docx(21页珍藏版)》请在冰点文库上搜索。
MplayerSDL移植
系统综合应用开发课程考核报告
SDL移植
2019年6月
摘要
将开源软件的移植到其他的应用领域的需求也随之而来,此次课题以移植Mplayer软件和SDL的移植来展开。
前期准备:
1、软件:
MPlayer-1.0rc4.tarlibmad-0.15.1b.tarSDL-1.2.13.tar.gz
2、环境:
Linux虚拟机下,配置交叉编译器,nfs服务,xshell(或者超级终端),串口驱动(PL2303.。
。
)
3、硬件:
虚拟机下Linux系统,USB转串口线,ARM开发板
1、课题需求
此课题以移植Mplayer软件和SDL的为主。
1.1系统开发的目标和思想
1.1.1Mplayer
首先,Mplayer是一款开源多媒体播放器,以GUN通用公共许可证发布。
此款软件可在各主流操作系统使用,例如:
Linux和其他Unix系统、windows和MacOSX系统。
Mplayer建基于命令行界面,在各个操作系统也可以选择安装不同的图形界面,Mplayer的另一个大的特色是广泛的输出设备支持。
它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,且能使用GGI和SDL和一些低级的硬件相关的驱动模式(比如Matrox、3Dfx和Radeon、Mach64、Permedia3)。
MPlayer还支持通过硬件MPEG解码卡显示,如DVB和DXR3与Hollywood+。
多种解码器
MPlayer本身编译自带了多种类型的解码器,不需要再安装xvid、ffdshow、ac3filter、ogg、vobsub等等所谓看DVDrip必备解码器,也不会跟你的电脑原来所安装的解码器有任何冲突。
极速播放器
MPlayer相对其它播放器来说,资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,对于MPEG/XviD/DivX格式的文件支持尤其好,不仅拖动播放速度快得不可思议,而且播放破损文件时的效果也好得出奇,在低配置的机器上使用更是能凸显优势。
因此,Mplayer开源音频播放器常作为音频播放器的源码移植到arm开发板上,应用于其他领域
1.1.2SDL
SDL(simpleDirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成,SDL提供了数种控制图像、声音、输出入的函数,让开发者只要是用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、MacOSX等)的应用软件,目前SDL多用于开发软件游戏、模拟器、媒体播放器等多媒体应用领域。
视频
设置8bpp或更高的任意色彩深度的视频模式。
如果某个模式硬件不支持,可以选择转化为另一模式。
直接写入线性的图像帧缓冲(framebuffer)。
用颜色键值(colorkey)或者alpha混合属性创建surface。
Surface的blit能自动的转化为目标格式。
blit是优化过的,并能使用硬件加速。
x86平台上有针对MMX优化过的blit。
硬件加速的blit和fill(填充)操作,如果硬件支持的话。
事件
提供以下事件:
应用程序的visibility发生改变
键盘输入
鼠标输入
用户要求的退出
每种事件都能通过SDL_EventState()关闭或者打开。
事件经由用户指定的过滤函数再被加入到内部的事件队列。
线程安全的事件队列。
音频
设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。
由独立的线程执行音频部分,并提供用户回调(callback)机制。
设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。
CD音频
完整的CD音频控制API
因此,SDL常用其源代码移植开发多种平台的游戏。
1.2系统的可行性分析
1.2.1Mplayer
Mplayer是自带mp3lib库来进行MP3解码的,但是arm系列的cpu,一般都没浮点运算单元,而mplayer的MP3解码默认使用MP3lib这个是浮点运算库,arm上面运行不了,因此需要libmad库,作为mplayer的前提依赖。
1.2.2SDl
SDL的运行需要大量的支持库,因此配置configure,剪裁不需要的功能,make编译,makeinstall安装生成的动态库文件、头文件等。
到此SDL的移植就完成了,进入test目录下,用arm-linux-gcc交叉编译器编译测试文件,生成可以在ARM环境下的可执行文件。
1.3系统功能及性能分析
1.3.1Mplayer
多种解码器
MPlayer本身编译自带了多种类型的解码器,不需要再安装xvid、ffdshow、ac3filter、ogg、vobsub等等所谓看DVDrip必备解码器,也不会跟你的电脑原来所安装的解码器有任何冲突。
极速播放器
MPlayer相对其它播放器来说,资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,对于MPEG/XviD/DivX格式的文件支持尤其好,不仅拖动播放速度快得不可思议,而且播放破损文件时的效果也好得出奇,在低配置的机器上使用更是能凸显优势。
强大音频支持
MPlayer广泛地支持音视频输出驱动。
它不仅可以使用X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、libcaca、DirectFB、Quartz、MacOSXCoreVideo,也能使用GGI,SDL(及它们的所有驱动),所有VESA兼容显卡上的VESA(甚至不需要X11),某些低级的显卡相关的驱动(如Matrox、3dfx及ATI)和一些硬件MPEG解码器卡,比如SiemensDVB、HauppaugePVR(IVTV)、DXR2和DXR3/Hollywood+。
它们中绝大多数支持软件或硬件缩放,所以你可以享受全屏电影。
OSD功能
MPlayer具有OSD(屏上显示)功能显示状态信息,有抗锯齿带阴影的漂亮大字幕和键盘控制的可视反馈。
支持的字体包括欧洲语种/ISO8859-1,2(匈牙利语、英语、捷克语等等),西里尔语和韩语,可以播放12种格式的字幕文件(MicroDVD、SubRip、OGM、SubViewer、Sami、VPlayer、RT、SSA、AQTitle、JACOsub、PJS及我们自己的:
MPsub)和DVD字幕(SPU流、VOBsub及隐藏式CC字幕)。
MEncoder
MEncoder(MPlayer'sMovieEncoder)是一个简单的电影编码器,设计用来把MPlayer可以播放的电影
(AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA)编码成别的MPlayer可以播放的格式。
它可以使用各种编解码器进行编码,例如DivX4(1或2passes)、libavcodec、PCM/MP3/VBRMP3音频。
同时也有强大的插件系统用于控制视频。
Mplayer移植成功后可以在arm开发板上运行MP3文件以及MP4文件。
1.3.2SDL
视频
设置8bpp或更高的任意色彩深度的视频模式。
如果某个模式硬件不支持,可以选择转化为另一模式。
直接写入线性的图像帧缓冲(framebuffer)。
用颜色键值(colorkey)或者alpha混合属性创建surface。
事件
提供以下事件:
应用程序的visibility发生改变
键盘输入
鼠标输入
用户要求的退出
每种事件都能通过SDL_EventState()关闭或者打开。
音频
设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。
由独立的线程执行音频部分,并提供用户回调(callback)机制。
CD音频
完整的CD音频控制API
线程
简单的线程创建API
用于同步的简单的二进制信号量(semaphores)
定时器
读取已流逝的毫秒数。
等待指定的毫秒数。
设置一个10毫秒精度的周期性定时器。
字节序无关
2、结果分析
2.1部分源程序
2.1.1Mplayer
将MPlayer-1.0rc4.tarlibmad-0.15.1b.tar放入新创建的mplayermove文件夹下(此文件夹为mplayer移植的总文件夹),
我将mplayermove文件夹创建在了/home/ryh目录下(这个可以随意)
2.1.1.1Libmad库配置
①创建文件夹mplayermove
命令:
mkdirmplayermove
ls
②进入mplayermove文件夹下,将MPlayer-1.0rc4.tarlibmad-0.15.1b.tar两个文件放入mplayermove文件夹下
命令:
cdmplayermove/
ls
③解压压缩包libmad-0.15.1b.tar解压到当前文件夹
命令:
tarxzvflibmad-0.15.1b.tar
④解压压缩包MPlayer-1.0rc4.tar
命令:
tarxzvfMPlayer-1.0rc4.tar
ls查看解压后的文件
⑤在mplayermove文件夹下创建文件夹mplayer和libmad(在后面的配置中要将一些文件放入这两个文件夹中。
)用于存放lib库和Mplayer应用文件
命令:
ls
mkdirmplayer
mkdirlibmad
ls
⑥对libmad库进行一些配置,进入libmad-0.15.1b目录下./configure进行剪裁(将一些不需要的功能减掉)其中,--prefix表示makeinstall之后生成的文件存放的路径(路径是绝对路径)
./configureCC=arm-linux-gcc--host=arm-linux--disable-shared--disable-debugging--prefix=/home/ryh/mplayermove/libmad
查看libmad-0.15.1b文件下的Makefile进行
⑦输入命令make,会出现错误信息。
对错误信息进行调试,修改:
⑧Vim编译器进入Makefile文件中
进入行末模式,输入搜索命令(:
g/-fforce-mem)按下回车,光标会指示此处,
进入插入模式,将其删除,wq保存退出。
删除后
再次make编译
编译后的最终结果,无错误出现,编译通过
⑨运行安装makeinstall
运行最终结果,无错误出现
查看home/ryh/mplayermove/libmad目录,已成功生成includelib两个文件
2.1.1.2Mplayer应用软件
⑩进入MPlayer-1.0rc4文件下
./configure对MPlayer-1.0rc4进行剪裁(将一些不需要的文件关闭),其中--prefix表示后面运行的文件生成的路径我将其放入/home/ryh/mplayermove/mplayer目录下(生成的文件有:
bin、etc、lib、share)
命令:
./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=/home/ryh/mplayermove/mplayer>&1|teelogfile
ls查看MPlayer-1.0rc4文件夹下是否存在config.mak
⑪vim打开config.mak文件,进入行末模式,搜索(:
g/-lmad)
按下回车,光标将移动到搜索的当前行
⑫编译libmad库是我们生成文件夹lib下的库函数时需要使用的,但是在配置这一点并没有被修改,所以我们要将该路径指出来。
在此行的末尾添加libmad库的lib的路径,进入插入模式,
添加内容:
-L/home/wei/mplayermove/libmad/lib
此配置是和前面产生的libmad库的lib路径相对的,路径配置应一一对应。
⑬Vim进入/MPlayer-1.0rc4/libmpeg2/motion_comp_arm_s.S文件
在文件的开头添加内容如下:
#ifndefHAVE_PLD
.macropldreg
.endm
#endif
查看MPlayer-1.0rc4目录下,是否存在Makefile文件
⑭
Vim进入Makefile文件,
查资料看install带-s参数时会自动调用strip来strip应用程序。
但是arm编译时要调用arm-linux-strip才有正确处理。
解决办法是取消-s参数,查看Makefile可以发现-s是如下
$(INSTALL)-m755$(INSTALLSTRIP)mplayer$(EXESUF) $(BINDIR)
的INSTALLSTRIP设置的,它默认是-s,因此只要简单在Makefile的install部分前面加入:
INSTALLSTRIP:
= #(将其置为空即可)
进入行末模式,搜索命0令(:
g/INSTALLSTRIP)
按下回车,光标会出现在搜索目标的当前行
在install部分的开始前面加上:
INSTALLSTRIP:
=#,加入后保存退出(命令:
wq)
⑮执行:
make编译
makeinstall运行安装
安装成功,在mplayer目录下存在四个文件夹,分别为:
bin、etc、lib、share
进入mplayer的bin目录中,存在mplayer可执行文件(最终得到的结果)
移植成功
2.1.2、SDl
将SDL-1.2.13.tar.gz拷进/home/ryh/mplayermove目录下
解压SDL-1.2.13.tar.gz压缩包
tarxzvfSDL-1.2.13tar.gz
查看解压后的SDL-1.2.13文件
Ls
进入SDL-1.2.13目录内ls查看SDL-1.2.13的文件内容
对configure进行配置
./configure--host=arm-linux--disable-video-nanox--disable-video-qtopia--disable-video-photon--disable-video-ggi--disable-video-svga--disable-video-aalib--disable-video-dummy--disable-video-dga--disable-arts--disable-esd--disable-alea--disable-video-x11--disable-nasm--enable-joystick--enable-input-tslib--enable-video-fbcon--enable-build=i386--prefix=/home/ryh/mplayermove/sdl
配置过程如下
配置成功后可以在SDL-1.2.13目录下
ls查看到Makefile文件,可对此make编译
make编译
makeinstall生成所要安装的动态库
进入SDL-1.2.13目录下的test文件夹下
cdtest
ls//查看测试文件
交叉编译testsem.c生成可执行文件arm_test
#arm-linux-gcc testspring.c -I /home/wei/mplayermove/sdl/include/SDL -L /home/wei/mplayermove/sdl/lib -l SDL -o arm-test
(-I指定我们程序所需的头文件所在的路径。
-L(大写)指定程序所需的库文件所在的路径
-l(小写)指定所需的库)
2.2结果分析
2.2.1Mplayer
①
将生成的可执行文件mplayer复制到nfs文件共享的文件夹中,测试文件mp3,或者mp4的文件与mplayer放入同一级目录下
虚拟机IP为:
②
在xshell上运行(Xshell与PC机串口相连,网络相通)
(网络相通的方法:
1、将一根网线一段插入PC机网口,一段插入开发板网口;2、将两根网线连接于一个交换机上,两根网线的另一端,一个插入PC机,另一个插入开发板,【前提条件是:
两根网线在同一个交换机下】)
ifconfig//查看网络IP
ifconfigeth010.25.100.**netmask255.255.0.0//配置IP、子网掩码
③
配置IP(IP需要和虚拟机IP在一个网端上即10.25.100.***子网掩码相同)
挂载的IP为PC机虚拟机的IP,nfsroot为nfs服务开启时设定的共享文件夹,mnt为开发板对应的文件夹(UPTECH开发板的耳机插孔在屏幕右边红色圆插孔)
④
运行MP3文件
运行界面如下:
⑤运行MP4文件-zoom为调整画面使其全屏
运行界面如下
3、测试、调试、运行程序过程产生的问题及采取的措施
3.1Mplayer测试、调试、运行
编译libmad库是我们生成文件夹lib下的库函数是需要使用的,但是在配置这一点并没有被修改,所以我们要将该路径指出来。
在此行的末尾添加libmad库的lib的路径,进入插入模式,我的路径为(/home/wei/mplayermove/libmad/lib目录下。
错误:
在这一步时,因为没有将lib库的路径添加正确,导致make时出现错误
解决办法:
将lib库的绝对路径添加正确,仔细检查lib库的绝对路径
添加内容:
-L/home/wei/mplayermove/libmad/lib
此配置是和前面产生的libmad库的lib路径相对的,路径配置应一一对应。
Mplayer是自带mp3lib库来进行MP3解码的,但是arm系列的cpu,一般都没浮点运算单元,而mplayer的MP3解码默认使用MP3lib这个是浮点运算库,arm上面运行不了,因此需要libmad库,作为mplayer的前提依赖。
3.2SDL测试、调试、运行
arm开发板插上电源线,串口线,网线,开机
通过xshell控制终端,ifconfig查看开发板ip,通过ifconfigeth010.215.100.**netmask255.255.0.0更改IP,子网掩码
在arm的xshell上,将挂载目录下的lib拷贝到/mnt/yaffs/Qt/lib
查看/mnt/yaffs/Qt/lib/lib下的库文件
将arm_test可执行文件复制到挂载目录下
运行arm_test可以在板子的屏幕上看到效果
总结
通过以上两个课题使我对软件的移植过程有了初步的了解,通过这次实验,使我学到了不少有用的知识,思考问题的方法,真正使我受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mplayer SDL移植 SDL 移植
![提示](https://static.bingdoc.com/images/bang_tan.gif)