绪论:写作既是个人情感的抒发,也是对学术真理的探索,欢迎阅读由发表云整理的11篇多媒体播放器范文,希望它们能为您的写作提供参考和启发。
【关键词】Android 播放器 多媒体 移动应用
随着智能手机的普及,越来越多的人通过手机观看视频和欣赏音乐,这给人们的生活带来很大的便捷。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。本文介绍的多媒体播放器就是基于Android进行开发的,主要模块有:播放器界面、播放音乐、播放视频以及多媒体文件管理。
1 多媒体播放器界面设计
多媒体播放器界面旨在为用户提供可视的操作界面,需要在用户界面设计中提供进度控制、开始、快退、快进、暂停等控件。效果如图1所示。
设置项目主题区域,利用LinearLayout和TextView两种XML元素进行布局。媒体播放区域用于播放媒体文件,需要使用SurfaceView控件。SurfaceView控件以流的方式来显示媒体文件。控制区主要由快退、暂停、开始和快进组成。设计要求:控制区域水平居中,相邻控件要有一定的间隙,开始和暂停按钮不能同时出现。进度区域要求显示媒体文件总时长、已播放时长、进度,选择LinearLayout、SeekBar和TextView等XML元素进行布局。
2 播放音乐
本模块要求实现音乐文件的播放,在播放界面上显示音乐的文件名、播放的时间、总的时间、音乐播放控制等。效果如图2所示。
MediaPlayer类用于管理媒体播放的操作,android多媒体框架支持播放不同位置存放的多媒体资源,如:本地资源、内部URI和外部URL。MediaPlayer类的构造函数比较简单,只有一个无参的构造函数:MediaPlayer()。
5 总结
本文介绍了如何在Android平台上设计多媒体播放器,本项目主要涉及的关键技术包括:播放控制条的控制、消息处理、声音的播放、视频图像的显示、多媒体文件的搜索等。
参考文献
[1]许瑾.基于Android平台音乐播放器的设计与实现[D].北京邮电大学,2011.
[2]李刚.基于Android平台的智能手机流媒体播放器的研究及实现[D].南京邮电大学,2012.
[3]聂茹,黄诚灿.基于Android系统的音乐播放器设计与实现[J].微型电脑应用,2013,10:23-26.
[4]李江,曹家庆,陈文生.手机音乐播放器的设计与实现[J].信息通信,2013,09:128-129.
[5]郝俊寿,丁艳会.基于Android系统的影音播放器研究与实现[J].硅谷,2013,22:20-21.
[6]叶晓静,黄俊伟.基于Android系统的多媒体播放器解决方案[J].现代电子技术,2011,24:73-76.
[7]单俊丽.基于Android的流媒体客户端的研究与设计[D].西安电子科技大学,2013.
[8]赵金龙.基于Android平台音频播放系统设计与实现[D].西安电子科技大学,2012.
作者简介
郑逸凡(1983-),男,现为福州外语外贸学院教师,福州大学数学与计算机科学学院研究生,主要从事Web编程和软件开发。
一、引言
随着通信技术和计算机技术的迅猛发展,3G时代的到来,使得人们对手持设备的应用有了更高的要求,人们已不满足于简单的通话,收发短信等基本功能,而更多的是要求有多媒体应用,能利用手机进行上网冲浪,3D游戏,播放视频等。
二、系统的分析与设计
1.目前存在的系统分析
随着通信技术和计算机技术的迅猛发展,使得人们对手持设备的应用有了更高的要求,人们已不满足于简单的通话,收发短信等基本功能,而更多的是要求有多媒体应用,能利用手机进行上网冲浪,3D游戏,播放视频等。移动设备通过网络观看视频将是不可避免的问题。而且目前的城市的网络覆盖率比较的好。
在这种情况下,多媒体播放器在设计与实现在有一些问题:
(1)由于多媒体手机在硬件性能上与PC机有着显著的差异,所以在多媒体手机上播放的视频短片的比特率要远远低于PC机上的,所以在设计多媒体手机时要受到多媒体手机硬件与操作系统的影响。
(2)现在多媒体手机外接的存储卡容量不是很高,当你在旅行的过程中或者在移动的过程中,因为你的存储卡的容量有限,所以你只能看少量的视音文件。
(3)现在多媒体手机在播放视音频文件的过程中,如果你看到自已喜欢的图片,你就想要保存下来,作为永久的珍藏。
(4)如何设计一项全新多媒体播放器,为将来的多媒体移动服务打下坚实的基础。
2.对目前系统的改进
本项目是一个关于手机播放器的系统,通过移动终端手机能够实现在任何时间,地点进行多媒体音频与视频的播放,本项目在空间上延伸了基于internet的网络服务,在时间上更具有灵活性。本系统只能播放视频文件的格式为MPEG格式与音频文件的格式为WAV格式,这是因为由底层的开发包所决定的。
本项目具有以下几个功能模块:
(1)首先视频(主要是MPEG格式)的播放模块,播放形式主要采用两种形式:本地播放与网络播放。本地播放也就是所谓的视频文件在本地手机存储器里,直接进行播放,网络播放主要是视频文件放在网络服务器,手机进行调用播放。它在空间上延伸了internet网络服务,在时间上更具有灵活性。
(2)其次实现音频(主要是WAV格式)的播放模块,播放形式主要采用两种形式:本地播放与网络播放。运行方式与视频播放模块相似。
(3)再次抓图模块,在进行播放本地与网络视频时,当你认为哪一个视频的瞬间你很鼓欢,你就可以进行抓图,把它抓下来。
(4)最后是控制模块,在进行播放音频与视频的同时,有一些基本的控制功能,比如:播放,停止,暂停,增加音量,减小音量等。
1>以下是本地播放视频或音频文件流程图
以上图的说明:这是一个本地播放视频或音频文件的流程图,首先生成一个等待WaitCanvas的对象,之后生成一个等待界面,然后生成一个VideoCanvas对象,它主要是用来进行播放文件控制的,用VideoCanvas生成的对象来打开用户在刚开始的界面上所输入URL,URL里包括IP地址,端口号(8080)以及被访问的文件名。如果打开成功都进行播放,如果失败者结束程序。最终关闭MIDlet程序。
2>以下是网格播放视频或音频文件流程图
以上图的说明:这是一个网络播放视频或音频文件的流程图,首先生成一个等待WaitCanvas的对象,之后生成一个等待界面,然后生成一个VideoCanvas对象,它主要是用来进行播放文件控制的,用VideoCanvas生成的对象来打开用户在刚开始的界面上所输入URL,URL里包括IP地址,端口号(8080)以及被访问的文件名。如果打开成功都进行播放,如果失败者结束程序。最终关闭MIDlet程序。
三、客户端的实现
手机客户端MIDlet的设计是本课题研究的重点,是实现本地与无线播放器应用的关键,客户端MIDlet需要解决的关键问题有:MIDlet程序结构流程控制,界面的开发;准确地提交用户请求参数问题等。根据系统需求分析,本项目终端支持系统的客户端主要面向的活动者是有具有多媒体手机的用户。以多媒体手机的用户所应具有的功能进行介绍手机客户端MIDlet开发的过程和主要解决的问题。
1.客户端流程设计
主要的流程说明:首先启动MIDlet,进行输入所要访问的服务器的IP和所要播放的文件的全称,如果输入错误,都重新输入,如果输入正确者,进行下面的一个操作,机器根据你所输入的IP地址来判断是本地播放,还是要进行网络的播放,当你如果输入的是本地IP,那么手机只播放你在手机存储介质里面的视频或音频文件。如果你输入的是网络IP,那么手机会播放在服务器中的视频或音频文件。在进行播放视频与音频的过程中,可以对作对象进行一系列的操作,比如抓图等。
2.MIDLET主程序的设计
一个MIDP应用程序的基本执行单元――MIDlet,所以ControlVideo继承MIDlet了,并有以下几个方法:startApp(),pauseApp(),destroyApp(),commandAction()还有一个线程PlayImage,这个程序它所要实现在的主要功能是,形成一个输入的界面,在这个界面里面要实现让用户输入URL,URL里面包含访问计算机的IP,端口号及所要访问的播放文件全称。还有在界面上还形成几个按钮比如开始,退出这是由commandAction()来进行控制等,它还进行控制整个程序的运行,选形成一个等待的界面,然后根据用户所输入的信息进行打开URL,再进行播放文件的控制等等。
3.播放控制的设计
它主要是由VideoCanvas继承Canvas,并有以下几个方法:VideoCanvas(), initialize(), paint(), time2pix(),open()等方法。它主要实现的功能是:对播放的视频或音频文件进行一系列的操作比如播放,停止,暂停,增加音量,减小音量。
4.播放文件判断的设计
在这里主要是设计一个单独的类,名称为VideoType,它主要先从用户输入的URL来分析出用户输入的信息,从中分离出输入的IP地址,端口号以及文件的名称,再进行判别用户输入的文件的类型。它里面有以下几个方法:guessContentType(),splitURL()。
5.网络连接等待介面的设计
这是一个所设计的一个等待界面,名称WaitCanvas,它继承了Canvas类,它主要的功能是:当用户输入IP地址时,手机在连结服务器的时候,可能会有一个过程,所以这个时候出现一个等待界面。它里面有以下几个方法:WaitCanvas(),void setMessage(),paint()。
四、结束语
本文研究的重心在于利用流媒体技术使手机播放器中本地与网络(无线)终端MIDP应用开发技术的解决方法及资源的网络通信,信息整合问题。因此在论文中深入研究了J2ME体系结构及其平台下手机程序MIDP的开发技术,详细分析了本地终端与无线终端和资源的通信解决方法,并构造了一个手机多媒体播放器系统,通过该系统,完整说明了MIDP应用程序开发的流程控制,界面设置与流媒体和视频压缩技术。本系统还会不断的改进,实现更广,更新,更实际的功能,以适应时代的需求。
参考文献:
[1]吴一丁:J2ME技术在移动设备上的应用.java研究组织,2005
中图分类号:TN919-34; TP317;TP37 文献标识码:A 文章编号:1004-373X(2011)24-0073-04
Software Solutions of Multimedia Player Based on Android Operating System
YE Xiao-jing, HUANG Jun-wei
(College of Communication and Information Engineering, Chongqing University of Posts and Telecommunications, Chongqing 400065, China)
Abstract: A multimedia player software solution based on Android operating system is introduced. The multimedia player is composed of splash screen, audio display module, video display module, etc. The graphical user interface (GUI) design, data storage, multimedia applications and other technical difficulties are analyzed emphatically. The function testing and verifyication carried out with Android V2.3 simulator and HTC A3380 show that the software solution can meet users′ needs and dependent demands for audio and video file playback. A summary and prospect for the further improvement of the software solution are given.
Keywords: android; user interface; data storage; multimedia application
收稿日期:2011-07-25
基金项目:国家高科技发展规划项目(2010ZX03002-005)
0 引 言
Android本义为“机器人”,是目前最流行的移动终端开发平台,依靠Google的强大开发和媒体资源,Android成为众多移动终端厂商竞相追逐的对象。当今全球信息时代,移动终端不再局限于通信业务,多媒体业务的应用才是终端厂商的发展方向。音视频播放作为一项不可或缺的多媒体业务,对于具有丰富的可编程扩展性的Android操作系统,可以开发出个性化的音视频播放应用软件。
1 Android平台
1.1 Android系统架构
Android是Google于2007年11月5日宣布的基于Linux平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成。从软件分层的角度来看,Android平台自上而下由应用程序、应用程序框架、Android运行时、库及Linux内核共5部分构成[1]。
1.2 Android应用程序组件
Android系统的基本组件包括Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)等,此外还包括专门负责在基本组件之间传递消息的Intent(意向)组件[2-3]。
2 软件解决方案
2.1 概述
基于Android平台的多媒体播放器软件主要由3个模块组成:启动画面模块、音频播放模块、视频播放模块。该播放器具有播放列表预览、前进、后退、暂停、继续、进度拖曳和停止等功能[4]。
2.2 用户界面设计
在Android应用中,UI(用户界面[5-6])是人与手机之间传递、交换信息的媒介和对话接口,是Android系统的重要组成部分。本文设计的多媒体播放器界面主要由主界面、音/视频资源列表界面、音/视频播放列表界面、音/视频播放界面等组成。本文重点介绍前2种界面设计。
2.2.1 主界面设计
主界面采用标签布局,使用TabHost(标签页视图)并定义2个标签,分别是音频播放列表标签页和视频播放列表标签页。
TabHost(标签页视图)必须配合TabActivity(标签Activity组件)使用。该播放器主界面的MainActivity继承自TabActivity,初始化2个标签页,并为每个标签分配不同的用户Activity(活动),MusicActivity(音频播放)和VedioActivity(视频播放),通过调用指定的Intent来打开合适的Activity(活动)。
2.2.2 资源列表界面设计
资源列表界面采用ListView(列表视图)作为核心视图。以视频资源列表为例,SD卡中的视频资源列表如图1所示。
该列表的Activity组件(VideoLibrary)继承自ListActivity。通过Android平台为基础数据类型(视频信息)装载ContentProvider(内容提供器),来获取位于SD卡设备目录/data/data/com.android.providers.media/ databases里的视频数据库信息,并使用SimpleCurosrAdapter适配器作为列表适配器将视频资源信息填充到列表视图中。
public class VideoLibrary extends ListActivity {
…
//设置内容视图
setContentView(R.layout.list_item_view);
//从当前上下文对象获得内容解析器
resolver = getContentResolver();
//查询sd卡的视频文件并返回结果集游标
Cursor c =resolver.query(MediaStore.Video
.Media.EXTERNAL_CONTENT_URI,null,null,null,null);
//初始化列表数据适配器
adapter = new SimpleCursorAdapter(this,
R.layout.list_item_layout,c,
new String[]{TITLE},
new int[]{R.id.VideoName});
//为播放列表设置数据适配器
this.setListAdapter(adapter);
…
}
2.3 数据存储
Android平台主要提供了4种数据存储机制[7]:Preferences(参数选项),Databases(数据库),Files(文件)和Network(网络)。
Preferences(参数选项)是一种轻量级的、用于存储或获取数据类型的“键-值”项的机制。它通常用来存放应用程序的配置信息。本文设计的多媒体播放器采用Preferen ces机制来存储或获取音/视频历史播放信息等配置信息。
2.3.1 获取数据
若要获取Preferences文件的数据,例如继续播放动作需要读取播放历史信息。首先通过调用Context.getSharedPreferences(String name,int mode)方法传入Preferences文件名和打开模式来获得一个SharedPreferences对象sp,若该Preferences文件不存在,在提交数据后会创建该Preferences文件。利用该sp对象调用getter方法,传入相应的键来读取数据。
//读取存放在SharedPreferences文件夹里的上一次播放的Uri
SharedPreferences sp;
sp=getSharedPreferences(PREF,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
String uriString = sp.getString(URI_KEY,null);
nowPlaying = Uri.parse(uriString);
在Android平台中,所有音/视频文件的相关信息都是以Content的形式提供给开发者的,所以历史播放信息是content://样式的URI,也就是前面提到的nowPlaying。
2.3.2 存储数据
若要修改Preferences文件的数据,例如暂停当前播放,或停止播放并退出该播放器软件会引起播放历史信息的变更。而产生该动作的原理是,每当播放新的音/视频文件首先将其URI赋值到全局变量nowPlaying,然后在退出该播放软件时处理变更工作:利用SharedPreferences对象sp调用edit()方法获得一个内部类Editor对象editor,利用该editor对象对Preferences文件进行编辑,即读取nowPlaying的数据,随后必须调用commit()方法才可以完成修改该Preferences文件里键为URI_KEY的对应数值。
SharedPreferences.Editor editor = sp.edit();
editor.putString(URI_KEY,nowPlaying.省略mit();
2.4 多媒体应用
2.4.1 多媒体宏观结构
Android的多媒体部分框架涉及应用程序、Java框架层、C语言框架、硬件抽象层等环节。其中Android Java框架层提供标准多媒体API供上层相关应用程序调用。而媒体的播放过程实际上是由下层的OpenCore和Stagefright等实现的。Android多媒体宏观结构如图2所示[8]。
2.4.2 多媒体处理过程
典型数据流在多媒体播放器中的运行过程主要经过以下环节[9]:最上层的Java应用程序将媒体URI(媒体文件或者流媒体)作为输入设置到媒体播放器中(主要是通过Android平台提供的标准接口API,如MediaPlayer(媒体播放器接口)等),经过Java框架层,JNI和本地框架层,一直设置到PVPlayer(OpenCore)。该过程中只是传递媒体URI路径,并无数据流传递。由PVPlayer进行解析后,将媒体分成音频流(MP3,AMR,AAC等)和视频流(H263,H264,MPEG4等),经过编解码器的处理和同步(AVSync)处理后转换成原始数据(音频通常是PCM,视频通常是YUV或RGB格式)。随后音视频原始数据将被送入音频和视频的输出环节(扬声器或者显示屏等硬件)[6-7]。
2.4.3 多媒体播放接口
Android平台提供android.media包来管理各种音频和视频的媒体接口,该包中的MediaPlayer(媒体播放器接口)用于控制音频或视频文件和流的回放。另外在android.widget包中还提供Video View(视频视图)组件用于播放视频文件,以简化相对于使用MediaPlayer播放视频的繁琐控制过程[10]。
(1) MediaPlayer
对播放音频而言,通过MediaPlayer.crea te(Context context,Uri uri)方法来获取播放器实例,无需播放准备,直接通过MediaPlay er.start()方法来启动播放动作。其中nowPlaying就是用户当前选中的待播放文件[9]。
//开始播放
MediaPlayer mPlayer = MediaPlayer.create(context,nowPlaying);
mPlayer.start();
通过播放器实例mp调用MediaPlayer.pause()方法可以暂停当前播放行为,可以使用start()方法恢复播放。
首先调用MediaPlayer.stop()停止当前播放行为,再调用释放与播放器相关资源的方法MediaPlayer.release()来完成停止播放动作。
对于播放视频来说,通过MediaPlayer (媒体播放器接口)的“setDataSource”方法可以指定视频文件路径。与播放音频数据不同的是,视频播放还要设置显示视频内容的承载体,使用MediaPlayer的“setDisplay”方法为当前播放器实例设置一个用于显示视频内容、代表屏幕描绘的控制器。这样用于播放视频的播放承载体必须实现Surface Holder (表面视图处理接口)的视图组件。
(2) Video View
首先视频播放布局资源中必须定义2个组件:“VideoView”标记定义视频视图组件,“MediaController”标记定义视频播放控制器组件。在Acitity组件对布局资源填充完成后,获取布局资源中定义的视频视图和播放控制器组件实例(mVideo和mController),视频视图实例mVideo指定要播放的视频文件路径或URI,用于承载待显示视频内容,并为mVideo设置播放控制器用于控制该视频文件的播放行为(如暂停、前进、后退和进度拖曳等),再调用VideoView.start()方法启动播放行为。停止播放行为可以调用Video View.stopPlayback()来停止回放行为[9]。
//获取视频视图和播放控制器组件实例
mVideo=(VideoView)findViewById(R.id.video_view);
mController=(MediaController)findViewById(R.id.media_controller);
//设置视频文件URI
mVideo.setVideoURI(nowPlaying);
//设置播放控制器
mVideo.setMediaController(mController);
3 测 试
本文设计的多媒体播放器是在Android SDK 2.3平台下开发完成的。该播放器以应用程序apk的形式分别集成到在Android 2.3模拟器和HTC A3380手机上,通过测试能够实现音/视频文件的本地播放功能,例如暂停、继续、停止、进度拖曳等。以音频播放为例,测试效果如图3所示。
4 结 语
本文重点介绍基于Android平台的多媒体播放器解决方案。侧重分析UI(用户界面)设计、音/视频数据信息读写,及音/视频播放等过程;并在Android SDK2.3平台上进行功能性测试,测试结果满足预期,能够正常播放本地多媒体文件。随着用户对移动终端的媒体播放功能的需求日益增加,提供支持更高分辨率的视频播放,以及和网络结合的流媒体方面的功能将是下一步的研究重点。
参 考 文 献
[1] E2ECloud工作室.深入浅出 Google Android [M].北京:人民邮电出版社,2009.
[2] 高焕堂.Android应用框架原理及程式设计36技[M]. [出版地不详 ]:广悦文化事业有限公司,2009.
[3] 佚名.Android开发教程&笔记[EB/OL].[2009-11-19].省略/tech/509.htm.
[4] 张正政,林耀荣.基于Android系统的影音播放器开发[J].现代电子技术,2011,34(2):5-8.
[5] 赵亮,张维.基于Android 技术的界面设计与研究[J].电脑知识与技术,2009,29(5):8183-8185.
[6] 公磊,周聪.基于Android 的移动终端应用程序开发与研究[J].计算机与现代化,2008(8):85-89.
[7] 小试牛刀.解读:Android平台数据存储机制[EB/OL].[2010-12-17].hb.省略/a/20101217/000047.htm.
[8] 韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社,2010.
[9] 韩超,梁泉.Android系统级深入开发[M].北京:电子工业出版社,2010.
[10] 汪永松.Android平台开发之旅[M].北京:机械工业出版社,2011.
[11] 贺丹丹,施展.基于Android的VoIP系统的设计与实现[J].现代电子技术,2011,34(6):28-31.
[12] 车一,龙华,蒋华龙.下一代移动通信业务的自相似研究和实现[J].电子科技,2008(2):55-57.
[13] 王凤妮,王金宝.基于P2P架构和SIP协议的多媒体邮件网络研究[J].电子科技,2008(1):60-62.
分辨率:最高720P
输出格式:NTSC/PAL
存储设备:SD\SM\MMC\XD卡、USB接移动硬盘
文件系统:FAT32、NTFS
众所周知,互联网上RM、RMVB压缩视频格式电影大为流行,任何一个普通网民都能轻易地找到并且享用这个免费大餐。过去,大家习惯于通过PC下载电影并在电脑上观看,但并不是所有人的PC都配置有“超级”音响、超大显示器,如果下载的电影拿到液晶电视上播放,那该多好呢?如今,天敏推出的天敏炫影DMP100多媒体播放器为我
们提供了一个非常完美的解决方案。
外观精巧,接口设计合理
炫影DMP100体积小巧,整体为灰色。外壳采用了喷漆表面处理技术,不仅做工精良,而且美观大方,放置于客厅相信是非常适合的。
机身左侧,我们可以看见炫影DMP100的YPbPr以及AV输出接口。而机身背面从左向右分别是电源、音频线以及两个USB(部分移动硬盘需要两个USB接口来提供电能),可以连接闪盘或移动硬盘等设备,最右侧是4合1读卡器接口,支持SD、SM、MMC、XD等多种类型的存储卡。
视频直接播放,无需转换
炫影DMP100内部集成了多媒体解码芯片,通过YPbPr(色差)输出,可以在LCD、电视机等提供该接口的显示器上直接播放RM、RMVB、MPEG-1/2、DAT、AVI、DIV等视频格式文件,各种格式文件都是无需转换的,非常方便和人性化。另外,和一般的带视频输出的MP4产品相比,炫影DMP100最大优势在于分辨率可高达720P,能够满足大屏幕液晶电视的片源标准。
操控方便,操控界面友好
作为一款采用瑞芯微RK2706B方案的便携式播放器,台电M36在视频的支持方面十分全面,AVI、RM、RMVB、FLAV、WMV、MPG、3GO、VOB、DAT、MP4等视频格式都可兼容,最大支持720×480分辨率的影片,但高码率视频略显吃力,但目前网上流行的视频格式来说,这样的小巧的播放器不可能苛求播放“高清”视频了。
M36最大的卖点就在有支持CMMB移动电视接收功能。M36内置了创毅视讯CMMB电视芯片,支持CMMB移动电视播电视标准,支持CA、QPSK等模式,可以随身收看所有CMMB加密/非加密数字移动电视,在北京实测可以轻松收到7个以上的电台(央视综合、文艺、体育、英语、少儿、新闻和北京卫视,在一些信号不错的位置还可以看到央视科教频道)。收看电视节目时仍然以16∶9的方式显示,画面流畅。不过由于CMMB传送的节目分辨率为320×240,因此字幕等较小的文字不太容易分辨。
除了视频播放和CMMB电视接收功能,M36还支持FM收音机、录音、TXT电子书阅读等功能。
缤纷时尚
奋达“水木年华”S330多媒体音箱
近日,奋达针对年轻人群全新打造推出了“水木年华”系列,该系列产品外观风格年轻化,配色大胆活泼,很符合年轻时尚的定位,S330音箱就是其中之一。
奋达S330是一款2.1音箱产品,属于新系列“水木年华”。S330外观风格年轻化,配色大胆,采用了年轻人比较喜欢的冰蓝、粉红、鲜橙色、淡绿作为点缀,让产品更具活力,其简洁生活化的设计风格吸取了欧美“简洁至上”的理念,稳重大器,没有多余修饰。
1 引言
在本次设计中,考虑用Microsoft Windows Media Player为数字音频和视频提供支持,还可以根据需要修改视频内容的播放方式。使用 Windows Media Player 软件开发工具包 ,可以扩展独立Player 的功能,借助 ActiveX 控件资源和其他现有的控件资源并将播放功能嵌入到自己的应用程序中。本次课程设计实现了一个基于Media Player组件的多媒体播放器,能够支持目前多数格式的媒体文件。
2 设计思路
Windows Media Player是一款Windows系统自带的播放器,支持通过插件增强功能。其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通常每个电脑都应有这个控件,方便设计出来的软件在各个电脑运行。在WMP(Windows Media Player的简称)控件里,与多媒体播放器实现功能有关的类有:Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings 五大类。播放器的一些基本的功能如播放、暂停等主要是调用CWMPControl 和 CWMPPlayer 类中的成员函数来进行实现。 对于打开按钮,需要调用通用文件对话框类,调用 szFileFilter()文件过滤函数和 GetFileName()获取文件名函数。播放列表主要是通过对 CListBox 类进行初始化,调用 m_ListCtrl 中的 AddString()函数来加载文件名到列表,再定义 Onlist()、SelchangeList1()、Onsave()、Ondelist()函数来实现展开、隐藏等功能。音量滑动条Slinder 是通过对 CSliderCtrl 类进行初始化,调用 m_slinder 中的CustomdrawSlider()函数来定义音量的改变。
3 软件设计
设计平台可以是Win32的操作平台上,使用已安装的VC6.0++进行设计和调试。在设计前要确保平台中有WMP控件。结合之前的设计思路,使用 Windows Media Player 等控件来制作多媒体视频播放器。若是Win64这与VC6.0++不兼容,可以选择更高的版本。
3.1 设计步骤
打开 VC++6.0,点击“新建”,在“新建”窗口选择“工程”选项卡。由于程序是基于对话框的 MFC 应用程序使用 Windows Media Player等控件来制作多媒体视频播放器。设置好地址位置和工程名后点“确定”。这里的工程名字可以是自己的名字拼音缩写,也可以没有任何含义。比如以“CCYMFC多媒体播放器1.0”为工程名,然后点击“确定”。
在点击“确定”后进入到了“MFC 应用程序向导―步骤 1”的O置界面,选择“基本对话框”,可以自己选择语言,然后点击“下一步”。接着点击“下一步”,由于其他的设置因与初始设置一样,所以保持所有选项不改变,再次点击“下一步”直到“完成”。在建立的对话框中,点击右键,选择“插入 ActiveX 控件” ,在跳出的对话框中选择“Windows Media Player”,点击“确定”。
虽然已经插入控件了,但这时的控件还不能使用,因为控件的各种类并没有一起加入工程类中。右击鼠标,选择“建立类向导……”,这时系统跳出对话框提示是否加入来自控件的类,直接点击“确定”就可以了。右键单击 “建立类向导”,在对话框中选择“Member Variables”选项卡,单击“ADD Variables”,“Confirm Classes”中点击“OK”会 “Add member name”对话框,命名为“m_player”,设为控制“Control”型,单机“OK”。关联变量之后才算是真正的添加了该控件,可以发现在关联变量之后,控件工具栏多了“Windows Media Player”控件的选项,并且在“Source Files”中增加了17个类,相应头文件也增加了17个,其中最主要的类为Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings 五大类。
3.2 界面设计
对于多媒体播放器的,本次课程设计要求系统能选择打开、播放、暂停、停止,全屏视频文件,并能控制声音的大小,其中函数的响应大多是对鼠标左键单击的响应。可以通过下表设置安排按钮的位置以及分类,使用户快速对控件ID进行修改。然后是加入一些关联变量的控件,之前加入了WMPlayer,还要加入类别为“滑块”的Slinder来当调节声音的滑块,还有加入类别为“列表框”的List Control来充当播放列表。
除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,如当一首歌播放完后的模式选择。应用到 WM_TIMER 消息响应函数以及SetTimer()和KillTimer()函数,建立OnTimer函数。
3.3 关键功能的实现
对于各个按钮、列表功能的实现主要是通过对各个函数加入相应的代码,下文将列出相应的关键代码,按键功能可对应关键代码添加在相应的位置。
播放列表主要有“播放列表”、“保存列表”、“删除列表”、“清空列表” 这四个功能。这个列表的四个功能实现前提是在工程的文件夹里新建一个txt文档并命名为“list.txt”。文档可以保存播放文件列表使在下次打开时可自动的生成播放列表。然后是“播放列表”功能,其实就是在重新设置窗口大小,若展开则恢复原来的窗口大小,这里使用了SetWindowPos()函数。最后是“删除当前”和“清除列表”,使用了“DeleteString()”来删除播放列表中的代表文件路径的字符串。用“ResetContent()”直接清除列表。同时不管那种功能,执行完成后要保存列表,这样才能使播放列表与list.txt同步。“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter()函数。点击确定时,首先是把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。然后又把文件路径通过SetUrl()交给控件读取播放。
这里有三种播放模式:“顺序播放”、“随机播放”、“单曲循环”。这三种模式的实现是在OnTimer()一个时间消息响应函数的实现的。先判断一个文件播放完毕后,再分别判断OnRadio1、OnRadio2和OnRadio3对应的按钮是否按下,若有按钮按下就进入到对应的if语句中。顺序播放就是int index=m_ListCtrl.GetCurSel()+1跟上一首相同;随机播放先是用srand(time(0))来每次都能产生不同的随机数序列,再用rand()%m_ListCtrl.GetCount()产生随机光标;循环播放是m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_PathName)实现的。
音量滑动条是区别于其他命令按钮的,它是滑块,所以相应的是Customdraw类型,是调用 CSliderCtrl 控件的 m_slinder 变量来实现的。音量调节函数主要是使用一个嵌套函数“m_WMPlayer.GetSettings().SetVolume(m_slinder.GetPos());”实现的。设置音量用的是“SetVolume()”函数。在“OnInitDialog()”函数中已对滑块范围进行初始化――m_slinder.SetRange(0,100)。使音量化范围为0~100。
4 问题发现与解决
在完善程序和调试过程中出现了各种各样的语法错误,通过百度查阅相关语法问题以及细心的检查中得到了解决,现将我遇到的问题以及解决方法摘录如下:
您听明白了吗?不明白没关系,因为和大多数新产品一样,MP5这个产品概念目前还没有准确的定义,从行业的角度来说,就是没有一个明确的行业标准。MP5期待一个行业标准,制定标准的目的在于净化市场环境,让消费者能够明明白白消费,使便携式多媒体播放器产业有一个更好的前景。
在中国,MP3、MP4等产品是最炙手可热的两类消费电子类产品。但是由于行业标准的缺失,以至于部分厂商的产品鱼目混珠,扰乱了市场秩序。
而值得欣慰的是,现在针对MP3、MP4的两个国家标准已经基本落定,今年年底有望执行。在爱国者第一款MP5产品之后,有关方面也开始了MP5标准的起草。
参与该标准制定的中国电子技术标准化研究所高级工程师高健认为:“便携式多媒体播放器产品标准的制定,是一个难度很大的问题。以前没有MP3、MP4、MP5这些概念,而现在概念建立起来了,但需要明确相应的标准。但是具体如何操作,还需要不断地进行探索。”
就MP5而言,产品化之后,应该有CPU、存储和接口三大部分。而这些设备本身可以看作是计算机产品的延伸:MP5中的微处理器对应计算机的CPU,闪存对应计算机的磁盘和光盘的存储器,而MP5的接口也是计算机技术的延伸。
但多媒体播放器仍然与计算机有着巨大不同。评价一台计算机的性能,可以通过测试软件运行、数据读写的速度等方式来了解,而对于多媒体播放器,则很难用上述办法来实现对产品的定义。
分辨率:最高720P
输出格式:NTSC/PAL
存储设备:SD\SM\MMC\XD卡、USB接移动硬盘、2.5英寸笔记本硬盘
文件系统:FAT32、NTFS
长久以来,很多消费者习惯了利用电脑下载并观看电影,但并不是所有人都配有“超级”音响、超大显示器。为了让消费者能像原来的DVD影碟机一样,很方便地欣赏互联网上丰富的视频资源,天敏推出了系列多媒体播放器产品,利用这样的播放器,消费者在不需要进行格式转换的情况下,就可在大屏幕的电视上欣赏RM和RMVB视频,非常方便。
由于网络上RM和RMVB资源非常丰富,天敏的多媒体播放器推出后就受到了广大消费者的喜爱。近日,天敏在原来的基础上推出了其第三代多媒体播放器新品――炫影硬盘版多媒体播放器,型号为DMP220,它最大的改进在于播放器直接支持2.5英寸笔记本硬盘,这样大大提高播放器的移动性。
硬盘的安装需要将DMP220拆开,首先拧下右侧两颗固定螺丝之后,将PCB板取出,此时可以看到PCB板的一面是主控和缓存芯片等元件,另外一面则是一个2.5英寸的SATA硬盘接口。这时将准备好的硬盘插上去,然后将PCB板安装好即可。
由于除了视频播放功能外,DMP220还支持图片浏览、音乐播放以及文件浏览,可以浏览硬盘内存放的各种文件。其中,音乐格式包括MP3、WMA等,而图片则支持JPG、BMP和PNG等,并且支持幻灯播放,旋转、缩放等功能。因此可以这么说,插上SATA硬盘,DMP220既是一个DVD播放器,也是一个移动硬盘盒,为此天敏还专门提供了一个小布袋,考虑相当周到。
外形设计上,DMP220与之前的版本相类似,不过在配色上则更加炫丽,红色的按钮点缀浅灰色的面板,搭配更具时尚感。外壳经过磨砂处理,做工也更精良。包装上也采用精美的礼盒包装,整体显得十分高档。
目前,国内车载电子设备市场极度缺乏多媒体综合软件,该软件能有效地将车载导航、影音图像、倒车雷达、娱乐互动等多个功能整合,方便乘客和车主的使用[1]。将多种娱乐和使用功能整合统一,使得设备简洁美观,同时降低了重复安装的成本和投入。可以极大地减少车内空间消耗,降低整车油耗[2]。多媒体共屏展示也能保证驾驶员的操作强度,保证行车安全。因此,将行车信息、娱乐互动、交流通信、车载导航等功能集于一体的嵌入式综合媒体系统符合市场和环境的发展要求[3]。
1 车载嵌入式播放器总体设计
出于应用领域、自带资源、可扩展资源、功耗等多方面的考虑,选择Linux 内核为嵌入式多媒体播放器的操作系统核心。将多媒体技术应用于嵌入式系统中面临着诸多的技术难题,嵌入式设备的特点决定了其资源通常非常有限,而有限的资源意味着需要进行多方面技术的优化[4]。
首先,嵌入式设备采用蓄电池提供能源,所以对系统的功耗要求比较严格;第二,嵌入式设备上通常没有实用的图像加速器,声卡等硬件加速设备的支持;第三,不存在DirectX,DirectShow等高层多媒体的支持。基于上述考虑,有必要设计适用于嵌入式应用的嵌入式处理器,嵌入式操作系统。根据嵌入式多媒体播放器的功能需求及技术特点,通常将嵌入式多媒体播放器的体系结构划分为硬件层、内核层和应用层,具体如图1所示。
系统的硬件层的硬件平台包括嵌入式微处理器和外围设备,通过合理选型和匹配可以完成满意的底层硬件组合。本系统的嵌入式MCU使用三星公司的S3C2410高速微处理器,S3C2410高速微处理器作为整个硬件系统的控制核心,接收、处理相关数据并实时发出控制指令。与其配合的系统外围设备是完成系统功能的必要组建和模块,涉及系统存储模块FLASH和E2PROM,LCD输出单元、主控外围电路和音频输出模块等。
软件部分包含应用层和内核层两个部分。应用层包含嵌入式Linux操作系统和硬件驱动程序,包括BootLoader, Linux内核,根文件系统3部分。应用层包含嵌入式用户应用程序、音频解码器和GUI。本系统选择嵌入式Linux操作系统作为操作系统[5]。
2 操作系统平台的构建
内核是整个Linux系统的核心,根据实际情况针对内核的配置进行选择,本质上指根据开发系统的功能需求对已有的操作系统进行选择,保留开发需求的系统单元,删除不需要的模块单元。在本系统中,嵌入式Linux内核选择ARM?Linux内核。Linux内核的配置系统由Makefile、配置文件(config.in)、配置工具组成[6]。完成内核的数据参数配置后,不能将程序数据直接下载到嵌入式系统中进行调试运行,因为此时数据仍然以源代码的形式存在。此时,为了生成最终能在嵌入式操作系统上运行的可执行代码[7],需要进一步对内核进行编译。
过程结束后,Image和zImage两个内核映像文件会在arch/arm/boot目录下生成,zImage为压缩后的映像文件,Image为正常大小的映像文件。得到内核映像文件后,首先在开发板使用的宿主机(PC)上建立一个tftp服务,使用DNW工具,在开发板上电时按任意键进入U?Boot提示符,执行以下命令:
在嵌入式操作系统正常运行时,需要使用根文件系统支持各种功能[8],在内核刚启动运行时根文件系统需要挂载起来用于支持访问外部设备,同时完成内核模块应用程序的装载和运行,避免出现Kernelpanic的情况,防止系统内核在启动时没有根文件的支持。在实际应用中,嵌入式操作系统使用动态随机存取器、同步动态随机存取器、FLASH存储器作为存储设备[9]。基于存储设备,使用JFFS2,YAFFS,CRAMFS,ROMFS,RAMFS等常见系统作为存储设备的嵌入式文件系统。在本系统中,选择NANDFLASH作为硬件提案所使用的存储芯片,选用NANDFLASH上使用比较广泛的Cramfs文件系统作为嵌入式根文件系统。
嵌入式Linux 操作系统的启动流程如图2所示。系统启动流程包括六个步骤:
(1) 系统复位,从地址0x00开始执行,进入步骤(2);
(2) 启动Bootloader模块,进入步骤(3);
(3) 判断系统是否进入Linux,启动Linux内核映像,不启动则进入U?boot的命令操作环境,如果启动内核,进入步骤(4);
(4) 系统从NANDFLASH加载内核到内存中,完成对硬件设备的初始化工作,进入步骤(5);
(5) 挂载根文件系统,执行init进程,并从/etc/inittab取得配置文件,进入步骤(6);
(6) 提示执行用户应用程序或用户登录信息。
3 视频播放器软件设计
3.1 基于Mplayer实现多媒体播放器
Mplayer是一个Linux下的电影播放器(也能运行在许多其他的Unices和非X86的CPU上)。Mplayer的逻辑结构可以分为四个层次,即:输入层、分流层、解码层和输出层,其结构如图3所示。
本文选择Mplayer作为后台设计播放软件。利用Qt/E为软件平台设计GUI图形控制界面,对多媒体播放器的播放过程进行控制。由于条件限制,本实验在宿主机上编译并安装了Mplayer,通过Qt设计基于X86的多媒体播放器。
3.2 软件总体模块设计
由于Qt/Embedded工具可以绕过X Windows System协议客户端库,直接读/写帧缓存的FrameBuffer的数据信息,因此实现Qt类库对帧缓存的直接读/写操作,使用基于Qt/Embedded的应用程序可以完成。本系统使用嵌入式Linux作为操作系统,通过Qt的图形平台和函数库完成嵌入式多媒体综合播放。多媒体播放系统采用模块化设计思想,其架构如图4所示。
嵌入式多媒体播放器包含五个主要的模块:
(1) I/O(输入/输出模块):用于多媒体文件的读入和输出。
(2) UI(用户界面单元):用户界面单元的作用是方便用户操作嵌入式媒体播放器的各项功能,提供良好的人机操作互动界面和使用体验。
(3) 插件接口单元:读入多媒体数据(通过输入插件获取I/O模块发送过来的数据)、调用Mplayer对文件进行解码播放、文件总的时间长度、编码类型、比特率等信息的获取、暂停、快进、快退、停止、输出、输入等的动作,输入动作具体指将输出插件完成解码的数据信息传送到系统输出输入单元的过程。
(4) Mplayer解码单元:为了对不同类型的多媒体文件进行解码操作,系统选择的Mplayer解码单元由分离器、音视频解码器等部分组成。
(5) GUI单元:为了方便快捷的产生读/写FrameBuffer以及用户界面, GUI单元通过使用Qt/E嵌入式工具作为底层图形库。
软件总体模块中各单元之间的相互连接关系是:通过输入/输出单元读入音视频信息数据,用户界面单元在接收到播放信息指令后,调用插件模块相应的函数,产生相应的信号,调用Mplayer完成对多媒体文件的解码,完成解码之后将数据送到I/O模块输出。
3.3 控制流程设计
主程序设计流程如图5所示。当从菜单项打开视频文件时会触发triggered()信号,执行slotopen()槽函数,调用Qfiledialog的getOpenFileName()函数从对话框中选择要播放的视频文件。系统首先判断文件格式是否为*.avi格式,如果是,则创建一个Qprocess进程,通过该进程调用Mplayer后台对视频文件进行播放,并在指定区域进行输出显示。
4 交互式图形界面设计
QImage类提供了一种与硬件访问无关的图片存储方式。QPainter则主要用来完成绘图事件。QPushButton提供了图形用户界面最长用到的命令按钮部件。此GUI交互界面利用Qt Designer以QMainWindow类为基础设计了主框架,包括菜单栏以及状态栏等;同时,以QWidget类为基础创建了一个对视频播放进行控制的插件接口,并通过合理的布局与主窗体组合在一起。
在指定目录打开avi格式视频文件,运行效果如图7所示。在播放过程中,通过状态栏实时显示当前视频文件的播放时间。通过界面下方的按钮对播放器的播放过程进行音量调节、暂停、快进、快退、停止等控制,基本达到了预期的效果。打开视频文件时,终端开始输出文件的加载路径,开始读取并输出ANS_TIME_POSITION(视频播放时间)参数值,在Qt与Mplayer之间完成了通信。
当在控制台实施各种控制操作时,在终端输出执行的操作动作并发送该信号,调用相应的槽函数完成对视频播放的控制动作。
以上是在主机上运行播放程序执行播放控制的过程。在主机上运行的Qt程序是基于X结构的,而在实际的嵌入式开发中,需要直接通过FrameBuffer进行显示。由于条件限制及其他因素,通过qvfb模拟程序在嵌入式开发板中运行的情况,如图8所示。
从图8中可以看出,在qvfb中运行该程序时,菜单项的中文显示出现了方块型的乱码,这说明菜单项已经得到了识别,只是qtopia中缺少相应的中文字体库,在默认的情况下,qvfb会调用字体库中的默认字体,这样在显示中文时会出现如上问题。可以在网络上下载相应的中文字体库并拷贝到Trolltech/Qtopiacore?opensource?4.3.0/lib/fonts中。
5结 论
TtBigTyp14Pro散热器是Tt公司最新推出的一款14cm直吹式风冷散热器。这款散热器给我们的第一印象便是“雄伟壮观”,风扇尺寸达到140×140×30mm,几乎把CPU插槽上方的空间塞了个满满当当。风扇顶部采用了黑色半透明设计,而且还加入蓝色LED灯,运转起来的效果十分酷炫。散热器还专门为风扇配备了调速旋钮,让使用者根据自身需求调整适当的风扇转速,做到散热与静音的平衡。Tf BigTypt4P ro散热器的散热片由两块组合而成,这样可以有效地增加散热面积。为了实现更强的散热效果,Tt BigTyp14Pro散热器还采用了六根热管通过横向穿插的形式贯穿于底座,也就是说底座上的热量可以同时通过两边热管进行散热,在一定程度上等效于12根热管。这样夸张的设计让我们对其实际表现充满了期待。
在室温为20摄氏度的条件下,我们搭建了以英特尔Pentium Dual-Core E5200为主的敞开式平台,并使用ORTHOS软件对其进行10分钟的满负荷测试。在使用原装散热器的情况下,CPU在待机时的核心温度达到34,而在满负荷测试中,CPU核心温度立刻上升到50。当换成Tt BigTypl4Pro散热器后,温度果然发生了很大的变化,当风扇低速运转时,待机温度只有29,而且满载温度也只有42℃左右,比原装散热器下降了接近10℃。我们再把转速调至最高速后,CPU满载温度更是只在37℃左右徘徊,表现出很强的散热性能,而且噪音也不是很大。如果你是硬件发烧友或超频玩家,对自己平台的散热性能十分在意的话,那不妨考虑一下这款产品。
存储介质更丰富――天敏炫影硬盘版DMP220多媒体播放器
天敏炫影硬盘版DMP220是一款直接接入显示设备,就能播放视频,音频以及图片的多媒体播放器。它在保留DMP200所有功能的情况下,最大的改变就是可以支持硬盘。它的内部提供了SATA接口,用户可自行在它内部安装2,5英寸SATA硬盘,容量不限。在放入硬盘后,DMP220就不只是一个多媒体播放器,还兼顾了移动硬盘的功用,一举两得。DMP220的外观相比DMP200改变较大,深灰色的机身上点缀橙红色按键,配色更显时尚。磨砂处理的外壳采用全金属打造,能为硬盘带来良好的保护。输出接口方面,为了兼顾不同的显示设备,DMP220具有D-Sub、色差分量以及AV接口。而除了可以播放硬盘上的视频之外,DMP220仍然具有SD读卡器以及OTG/HOST接口,能直接播放sD卡,DV、DC、U盘和其它USB设备上的媒体资源。在视频输出能力方面,DMP220能支持最高720p的色差输出,以及最高1024×768分辨率的VGA输出。它的主控芯片采用了一性能不错但成本较高的Amlogic AML7228方案,性能方面比目前PMP播放器中常用的华芯飞方案更强。实际测试中,DMP220的表现与我们曾报道过的DMP200一样,在这里不再赘述,读者可参见《微型计算机》2008年11月上的相关文章。DMP220的价格比DMP200仅贵了几十块,但兼具了移动硬盘盒的功能,更显实用,推荐给想要组建家庭影院的玩家。(张臻)
据介绍,作为MP5中的代表产品,爱国者MP5 P881 PLUS绝对领先于便携式手持多媒体终端领域,成为许多人的必选装备。它不仅支持主流的Real格式,使人无须转换即可直接下载播放,还支持MP4、MPEG格式影片,特别是增加了DVD直接拷贝播放功能,既方便快捷,也会让拥有许多碟片的朋友找到用武之地。更为吸引人的是,它具有4.3英寸高解析度特丽屏,支持D1效果分辨率720×480,3M码流,保证高清画质,品质享受如同影院。此外,爱国者P881 PLUS还有多种附加增值功能,为在户外放松的你带来更多便捷和舒心。如在全面升级之后,几乎已经能够支持所有的网络视频资源直接播放,并且具有电视录制等多种附加功能。