基于ARM?Linux多媒体播放器的设计与实现

陈洋君 吴志勇 崔明 张维达
摘 要: 针对目前大多数多媒体播放系统都需要通过专门的视频编解码芯片对视频文件进行编解码,所带来的成本高、开发繁琐等问题,结合ARM微处理器、嵌入式Linux操作系统、MPlayer应用程序等,设计一种基于ARM?Linux的嵌入式多媒体播放系统。该系统采用了低成本、低功耗、高性能的ARM处理器,嵌入了开源、移植性高,功能强大的Linux操作系统。同时使用了网络文件系统NFS,实现不同操作平台上的文件共享。最终在该嵌入式系统下,通过经移植的应用程序MPlayer将音视频文件直接经软解码后实现了多媒体播放器的功能,播放音画质流畅稳定,达到预期效果。结果表明,该设计不仅降低了成本,且简化了开发的过程。
关键词: ARM微处理器; 嵌入式Linux; 多媒体播放器; NFS
中图分类号: TN912.23+1?34; TP368.1 文獻标识码: A 文章编号: 1004?373X(2017)10?0075?04
Abstract: As the most present multimedia player systems need the special codec chip to encode and decode video files, which leads to the high cost and cockamamie fussy development, an embedded multimedia player system based on ARM?Linux was designed in combination with ARM microprocessors, embedded Linux operating system, MPlayer application program, etc. The low cost, low power consumption and high performance ARM microprocessor are adopted in system, in which open source, high portability and powerful Linux operating system is embedded, and the network file system (NFS) is employed for sharing of files on different operating platforms. The function of the multimedia player was achieved after software direct decoding of audio and video files by means of the transplanted application program MPlayer. The expected effect of smooth and stable audio and video playback was realized. The result indicates that the design reduces costs and simplifies the development process.
Keywords: ARM microprocessor; embedded Linux; multimedia player; NFS
当代,信息技术飞速发展,新颖便携的消费类电子产品得到了大众的追捧,成为了IT市场的一个重要的经济增长点[1],嵌入式系统在消费类电子产品得到了广泛的应用[2?3]。本文研究是在嵌入式系统下实现多媒体功能。近十年国内多媒体播放器主要采用简单控制芯片(如单片机等)加上音视频解码芯片的方式,虽然价格低,但功能单一,音画质差,且开发难度大。而国外采用专用解码芯片的多媒体播放器,在处理性能和效果上得到了提升,却因其高昂的价格,不适用于国内市场。针对这些弊端,本文设计的多媒体播放器采用的是ARM?Linux的解决方案,即在ARM开发板上移植Linux操作系统,并通过移植的应用程序MPlayer对音视频软解码后实现多媒体功能。该方案具有反应速度快、移植性高、费用低、功能可扩展性强等特点。
1 ARM微处理器以及Linux嵌入式
1.1 ARM微处理器平台
ARM处理器是一款RISC微处理器[4],共有37个寄存器,其中包括31个通用寄存器,6个状态寄存器(标识CPU的工作状态及程序的运行状态)。ARM处理器主要面向低预算市场。ARM特点主要体现在:成本低、功耗低,性能高,采用双指令集,寻址方式灵活多样等。
该系统采用的ARM处理器是S3C2440A[5],该处理器具有16/32位RISC体系架构和ARM920T CPU核心强大的指令集,增强型的ARM架构MMU以支持WinCE,EPOC32和Linux。共有8个Bank(每个128 MB),支持NOR以及NAND FLASH启动,它具有低功耗,全静态设计等优点,还提供丰富的外设资源,适合多媒体播放器的设计要求。
1.2 嵌入式Linux
嵌入式系统是依托于计算机技术,以应用为目标,并且软硬件都可裁剪,在成本、性能、稳定性、体积大小、功耗等有严格要求的专用计算机系统[6]。
嵌入式操作系统具有可裁剪、可配置、实时性高等特点。近年来,广为人知的嵌入式操作系统有VxWorks,WinCE,嵌入式Linux等。但Linux得益于其免费,开源等优势,Linux操作系统被广泛应用于嵌入式系统中。Linux是类Unix操作系统的一种,用户可以免费使用,也可自由传播的。得益于其成本低以及可定制性,在嵌入式领域异军突起。Linux特点:自由软件,免费试用,多用户、多任务;极强的平台可伸缩性(可裁剪);提供强大的管理功能;完全符合POSIX标准;具有丰富的图形用户界面;具有强大的网络功能。
2 ARM?Linux嵌入式系统总体设计
目前,在嵌入式ARM开发板上运行Linux[7]已经非常普遍,一个基于ARM?Linux的嵌入式系统大致可以分为5部分,如图1所示。
系统软件层次主要由五个部分组成:
引导加载程序(Boot Loader):它是系统上电运行的第一段程序,在操作系统启动前,完成目标板软硬件的初始化,为内核的调用做好准备。本系统使用的是U?boot。
Linux内核:包括嵌入式硬件平台的内核启动参数和依据需求所定制的内核。
文件系统:包括根文件系统和普通的文件系统。
应用程序即用户特定的应用程序。
硬件平台:该系统主要由嵌入式处理器、FLASH、 TFT?LCD屏、串口、电源等构成。
该系统采用的ARM9处理器是三星公司的S3C2440A,首先通过运行在虚拟机(VMware workstation) 的Fedora10上利用交叉编译链arm?Linux?gcc将Linux内核,U?Boot源码包编译成可用镜像文件,然后构建根文件系统,进行相应的NAND FLASH驱动移植,Qt移植、TFT?LCD移植、USB设备驱动移植。在ARM开发板上搭建好多媒体播放器的嵌入式环境后,移植应用程序MPlayer。通过将视频文件NFS挂载到Linux,在ARM芯片控制下由移植的MPlayer软解码来实现多媒体播放器的功能。系统总体结构框图如图2所示。
然后,NAND FLASH驱动移植,网卡驱动移植、USB设备驱动移植、TFT?LCD屏驱动移植[9]、I2C总线移植等。
制作文件系统:包括移植yaffs文件系统[6],编译并安装BusyBox后,在手动添加“dev” ,“etc”,“home” ,“lib”,“mnt”,“opt”等,构建文件系统。
3.2 配置网络文件系统NFS服务
在网络上,通过网络文件系统(Network File System,NFS)[10],一个系统可以与他人共享目录和文件。用户和程序可以像访问本地文件一样的访问远端系统上的文件。在嵌入式开发中,NFS服务是常用于内核启动挂载根文件系统的方式。使用这种方式挂载根文件系统,为嵌入式产品开发和测试提供了廉价而高效的方案。
具体配置[11]流程如下:
(1) 首先关闭防火墙:使用#/etc/init.d/iptables stop或者使用命令#lokkit(永久关闭防火墙)。
(2) 设置共享目录: #gedit/etc/exports,然后编辑NFS的配置文件,添加/opt/EmbedSky/root_nfs *(rw,sync,no_root_squsah)。其中/opt/EmbedSky/ root_nfs为NFS共享目录,通过NFS挂载后它可以作为开发板的根文件系统。
(3) 将前面制作好的根文件系统复制一份后改名为root_nfs,然后修改etc/init.d/rcS,屏蔽掉net_set &。
(4) 测试PC端是否成功设置并启动NFS服务:启动NFS,命令行输入:#/etc/init.d/nfs start;命令行输入 mount?t nfs 192.168.1.58: /opt/EmbedSky /root_nfs/opt/EmbedSky/root,通過检查/opt/ EmbedSky/ root_nfs和/opt/EmbedSky/root目录内容是否一致验证设置成功与否。
(5) 开发板下的设置:首先将PC与开发板连接起来(包括网线、并口线、电源线),进入U?Boot下载模式,然后依次输入命令0?>1?>192.168.1.58(PC的Linux的IP地址)?>192.168.1.2(开发板的Linux的IP地址)?>255.255.255.0(开发板的掩码地址)?>/opt/EmbedSky/root_nfs(PC的Linux中的NFS文件系统的路径)?>s?>q?>8,启动开发版。
(6) 在SecureCRT控制台下输入:mount?t nfs?o intr,nolock,rsize=1024,wsize=1024 192.168.1.58:/opt/ EmbedSky/root_nfs /mnt。
挂载成功后,访问开发板的/mnt/目录时,就相当于访问PC的Linux的NFS目录。
SecureCRT控制台如图3所示,开发板被启动后状态如图4所示。
4 应用程序MPlayer的移植
MPlayer是一款开源的多媒体播放器,可以运行在多种操作系统上[12],例如Linux和类Unix系统、Windows等。其本身编译自带多种解码器,能够播放大多数音视频文件,如AVI,MPEG,MP3,WMV等。还能够观看 DVD,VideoCD,RealMedia和DivX等格式电影[13]。MPlayer还具有广泛的输出设备支持,它可以在OpenGL,XII,DGA,Xv,SVGAlib及AAlib上工作,而且也能够使用一些硬件相关的低级的驱动模式[14]。MPlayer具备解码、播放及音视频同步功能。十分适用于本系统的需求。
具体的移植实现流程如下:
首先准备源码包:MPlayer?1.0rc2.tar.bz2以及libmad?0.15.1b.tar.gz。MPlayer 1.0已经把大部分解码库都自带了,如FFmpeg等,但是自带的音频库在处理器S3C2440A下效果非常不好,换成使用libmad效果不错。因此MPlayer在ARM?Linux的最简单的移植只需要移植这两个即可。移植后进行字符界面的播放。
(1) 编译libmad。配置configure文件,#./configure CC=arm ?linux ?gcc??enable?fpm=arm??host=arm?linux??disable?shared??disable?debugging??prefix=/opt/EmbestSky/video/MPlayer?1.0rc2 ;输入命令make ,make install编译安装libmad。
(2) 编译安装MPlayer。下载并解压源代码MPlayer?1.0rc3.tar.bz2,#tar?jzxvf MPlayer?1.0rc3.tar.bz2。
配置 configure 文件。其中包括指定安装路径,交叉编译工具,添加环境变量,设定静态变量等。
(3) 输入命令make,make install 编译安装MPlayer。
(4) 將编译后的Mplayer通过NFS挂载的方式在开发板上运行:在控制台输入指令:./mplayer?libmad car.avi?framedrop?quiet?vf rotate=1,scale=480:240,如图5所示。开发板视频播放最终全屏显示结果如图6所示。
5 结 语
本文设计的触屏多媒体播放器是在ARM?Linux嵌入式环境下,通过MPlayer软解码实现的。该方案充分发挥了性能优越的S3C2440A微处理器,高兼容性,易剪裁的Linux操作系统以及MPlayer软解码的优势。设计出的多媒体播放器性能稳定,界面友好,达到了预期效果。与传统的多媒体播放器相比,基于ARM?Linux的嵌入式播放器具有功能可扩展、低成本、开发过程简单的优势。
参考文献
[1] 姚放,肖海.嵌入式处理器分类与现状[EB/OL].[2014?02?23].http://www.bol?system.com.
[2] 傅篱.嵌入式系统在我国的应用现状与发展趋势[J].管理观察,2013(11):164?166.
[3] 宫鹏,宫玥,王端宝.基于嵌入式系统的多媒体音乐播放器[J].现代电子技术,2011,34(12):100?103.
[4] 周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.
[5] Samsung Electronics. S3C2440A 32?bit CMOS microcontroller user′s manual [M]. South Korea: Samsung Electronics, 2004.
[6] 马义德,刘映杰,张新国.嵌入式系统的现状及发展前景[J].信息技术,2001,8(12):57?59.
[7] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出报社,2012:197.
[8] 田磊.基于ARM的嵌入式Linux操作系统的移植[D].西安:西安电子科技大学,2009:21.
[9] 纪宁宁,孙灵燕.S3C2440A驱动RGB接口TFT LCD的研究[J].液晶与显示,2008,23(1):96?100.
[10] 聂和平.基于ARM9的嵌入式Linux系统移植与驱动开发[D].南京:南京邮电大学,2013:21?42.
[11] 瑛宣.Linux 下NFS(网络文件系统)的建立与配置方法[J].计算机与网络,2013,39(21):44?45.
[12] 刘玉萍.MPlayer的嵌入移植[J].计算机系统应用,2011,20(1):192?196.
[13] 米韶华.嵌入式多媒体系统的设计与实现[D].成都:成都理工大学,2010:43?57.
[14] 宋丹,马昌萍,马幼鸣.MPlayer在嵌入式开发系统中的应用[J].电子产品世界,2005,13(7):68?71.