基于Symbian 平台的流媒体播放器设计与实现

出处:杨真人 发布于:2011-01-21 10:26:46

     1 引言

  继语音通话、短信服务、数据通信之后,音乐无线及实时播放正在成为手机运营商提供的新兴服务之一,引发广泛的关注。与传统的基于个人电脑的音乐播放器相比,手机音乐播放器的优势在于其和播放方式的方便快捷,可以给用户带来轻松舒适的使用体验。以手机音乐播放器为媒介,运营商可以依靠其自身对移动通信网络服务的强大控制力,为顾客提供更好的服务。由于移动通信服务的灵活性和多样性,使其在增值业务方面也有较强的扩展性。

  Symbian S60 平台的Multimedia Framework( MMF) API 可以为上层应用程序提供多媒体服务,为用户创建和分发丰富多彩的音乐应用。作为一个多媒体处理单元的插件集,MMF 提供了操作终端硬件的通用接口,支持不同的音频操作,可实现本地回放和流式回放两种模式,可播放多种音频格式。

  在现有基于Symbian OS 的多媒体播放器的相关文献中,讨论了基于Symbian 平台的流媒体播放器移动客户端的设计原理,给出了指导性意见,并在结构、缓冲等方面给出了优化建议,在此基础上提出了用户界面的设计方案。但该文献没有给出多媒体技术的具体实现。本文设计并实现了基于Symbian 平台的多媒体播放器,但其仅支持本地播放,并没涉及到流式播放的相关技术。

  MMusic 是一款基于MMF 架构,用于播放多种音乐文件的多媒体播放软件。它不仅实现了音乐文件的本地播放,同时支持流式播放。除此之外,该音乐播放器还支持音乐、歌词及播放同步等功能。其界面美观、操作简单且具有多种功能。

  2 系统总体框架设计

  在设计系统框架时,首先明确了播放器需要实现的四项基本功能: ①支持mp3、wmv、aac 等多种格式的本地音频播放; ②支持流式音频播放; ③支持歌曲搜索及的功能; ④支持歌词同步的功能。

  MMusic 播放器的程序实现基于Symbian S60 平台的应用程序架构,采用多视图框架,根据不同的功能构造不同的视图。其视图包括播放界面( 主界面) 、搜索歌曲界面、音乐媒体库界面和电台列表界面。其中播放界面是整个播放器的界面,主要负责音频媒体的播放,包括本地播放和流式播放。

  根据播放模式的不同,动态选择相应的菜单和播放引擎。本地播放使用CPlayerAdapter 引擎。该引擎使用音频播放类CMdaAudioPlayerUtility 类及其相关的观察器MMdaAudioPlayerCallback 来实现本地音频播放。流式播放则使用CPluginAdaper 引擎来实现,它使用了CMdaAudioOutputStream 和MMdaAudioOutputStreamCallback 类。

  MMusic 音乐播放器按功能可划分为六个模块:

  ①UI 模块,负责各个界面显示和界面间的切换,并对用户按键进行处理;②本地播放模块,可以提供本地音频文件播放及音量控制等服务;③流式播放模块,实现与服务器的交互与流式播放;④数据模块,负责音频数据的及存储;⑤歌词同步模块,保证音频播放与歌词播放的同步;⑥服务器模块,提供音乐文件和歌词等资源。不同模块的关系如图1 所示。

MMusic 播放器功能关系图

图1 MMusic 播放器功能关系图

  3 关键技术的介绍

  3. 1 音频播放

  音频播放功能可以通过MMF 所提供的接口来实现。其中音频播放类CMdaAudioPlayerUtility 类提供本地播放的API,而CMdaAudioOutputStream 类则提供流式播放的API。

  3. 1. 1 本地播放引擎

  MMusic 播放器把对音频文件的初始化、播放、暂停等操作封装在本地播放引擎CPlayer - Adapter中。该引擎包含支持音频回放操作和简单元数据读取操作的音频播放类CMdaAudio - PlayerUtility。由于它的所有操作都是异步的,需要一个客户端来*音频播放操作。播放引擎CPlayerAdapter 须继承MMdaAudioPlayerCallback 接口类。该接口类提供了两个方法,MapcInitComplete( ) 和MapcPlayComplete( ) 。本地播放流程如图2 所示。首先通过调用CMdaAudioPlayerUtility: : NewFilePlayerL( ) 函数构造并创建一个音频播放器的实例。当打开及初始化一个音频采样的工作结束后,系统自动调用MapcInit-Complete( ) 方法,通知客户端创建实例的结果。若成功创建,则可调用CMdaAudioPlayerUtility: : Play( ) 方法来播放音频文件。当播放某段音频采样操作完成后,系统再通过MapcPlayComplete( ) 回调函数通知客户端播放已完成。

  3. 1. 2 流式播放引擎

  对于流式音频播放,则使用多媒体框架的CMdaAudioOutputStreamAPI。CPluginAdaper 为封装好的流式播放引擎,由它来调用流媒体播放的相关接口。本地内容播放和流式播放的主要不同在于文件打开方式、初始化方法及对音频数据流的处理方式。

  要实现流式播放,在程序里需要编写一个实现了MMdaAudioOutputStreamCallback 的客户端类。

  这个类提供三个回调函数,向客户端提示音频输出的流式过程结果,让程序能处理可能的错误。这些回调函数是MaoscOpenComplete( ) 、MaoscBufferCopied() 及MaoscPlay - Complete ( ) ,它们都必须由CMdaAudioOutputStream 类的使用类实现。因此,CPluginAdaper 须继承观察类MMdaAudioOutputStreamCallback来得到流式播放过程的结果。

本地播放流程图

图2 本地播放流程图

  在实现流式播放前,需要与服务器进行连接,获得待播放的音频数据流。在MMusic 播放器里,使用套接字来实现服务端与客户端的通信。客户端首先需要连接到Symbian OS 套接字服务器,然后打开一个套接字并指定TCP 作为传输协议。接着从列表文件得到服务器的IP 地址和端口,向服务器发送请求。等服务器作出响应后,读取响应的数据并进行分析,用来初始化播放引擎。客户端继续对服务端请求播放的音频数据。

  得到要播放的音频数据流后,则开始流式播放。

  其播放流程如图3 所示。首先初始化CMdaAudioOutputStream类。初始化完成后,Multimedia 框架会调用MaoscOpenComplete( ) 回调函数,指出音频输出已经可用。该框架所给出的参数是一个出错值,它指出初始化是否成功。如果成功,则给出KErrNone。此处可以设置采样率和音量等。成功初始化后,则可以在客户端调用PlayL( ) 函数来播放音频数据流。它调用FillBufferL( ) 函数把数据往缓冲区填充,并使用CMdaAudioOutputStream: : WriteL( const TdesC8&aData) 进行播放。其中参数aData 为缓冲区数据。

  WriteL( ) 是一个异步函数。当复制了描述符aData中的数据到音频硬件之后,该框架将调用MMdaAudioOutputStreamCallback: : MaoscBufferCopied( ) 回调方法,通知客户端应用已收到aData 并将其复制到播放流。此时,可以再调用FillBufferL( ) 函数继续填充缓冲区,从而实现连续不断地流播放。

流式播放流程图

图3 流式播放流程图

  3. 2 音频文件及断点续传

  MMusic 使用超文本传输协议HTTP 来实现音频文件和歌词的。HTTP 是在TCP /IP 协议上实现的应用层协议,用于在互联网上传输信息。它使用Socket 在服务器和客户端之间进行数据传输。

  在Symbian OS 版本中,提供了对HTTP 客户端的API 支持。

  使用HTTP 进行通信时,客户端需要建立一个HTTP 客户端会话,在会话上处理与HTTP 服务器的通信。在会话上建立HTTP 通信事务,事务由请求和响应组成,在同一个会话上可以建立一个或多个事务。也可以同时建立多个会话,来实现不同的连接。

  在创建HTTP 引擎时,首先创建一个RHTTPSession类的对象,然后调用该类的Open( ) 方法,打开这个新建立的会话。然后使用RHTTPTransaction类代表HTTP 事务。事务是在HTTP 客户端会话打开的。打开事务时,需制定事务使用的数据传输方法,GET 或POST,同时传入要打开的URL。服务端处理完成后,返回响应数据。HTTP 客户端通过对MHTTP - TransactionCallback 的回递,处理响应结果和接收响应数据。

  歌曲的分两步来实现。首先把要搜索的歌曲名字用HTTP 引擎发送到服务器,服务器返回XML 格式的文件给客户端。该XML 文件包含了搜索到的歌曲名字、地址、音频文件格式和大小等信息。客户端用Symbian 自带的XML 解析器对文件进行解析,把解析后的歌曲信息存放在数组里。

  每个数组的元素为自定义的结构体,包含歌曲名,地址等内容。

  解析完毕后,切换到列表界面。列表界面显示刚的XML 文件的解析结果。用户可以根据自己的喜好选择要的歌曲。此时,客户端提取出歌曲的地址,用封装好的HTTP 引擎向服务器发送请求。客户端首先判断待的文件是否已存在,如果不存在,则使用HTTP 引擎普通模式音频文件。如果待的文件已存在,则获得现有文件大小,并把它作为参数传给HTTP 引擎,发送到服务器端,实现断点续传。具体代码如下:



  3. 3 歌词同步

  首先在用户终端进行本地搜索与正在播放的音乐文件名字相同的歌词文件。若搜索到符合条件的文件,则对其进行解析。把文件的每一行内容作为一个数组单元存放在数组里,数据的单元包括有播放时间和歌词内容。由CMdaAudioPlayerUtility 类的GetPosition( ) 函数获得当前音频文件的播放位置,与数组中记录的歌词文件的时间做对比,来实现歌词同步。若没有搜索到歌词文件,则用歌词引擎从服务器并解析。

  4 软件实现及效果

  根据播放器的整体架构设计,在Symbian 平台上实现音乐媒体播放器,并在实际的移动通信网络中进行了测试。测试环境是中国移动GPRS /EDGE网络。测试手机为Nokia N95,操作系统为V9. 2,用户界面为S60 第三版。其ARM 主频11 332MHz,内存160MB。在真机上进行测试时,本地音频文件播放流畅。而播放在线电台的内容时( 即流式播放) ,其效果会受到网络状况的制约,但整体比较流畅。

  播放器在真机上的效果如图4 所示。其中( a) 显示的是播放器的功能菜单,( b) 为本地播放和歌词同步的效果,( c) 显示流式播放时连接服务器的状态,( d) 为连接服务器成功后流式播放的效果,界面上可以显示当前的连接速度、音频文件的格式、流量等。

 软件效果图
( a) 播放器功能菜单( b) 本地播放和歌词同步的效果( c) 流式播放时连接服务器的状态( d) 连接服务器成功后流式播放的效果

图4 软件效果图

  5 结束语

  MMusic 音乐播放器很好的实现了音频播放、音乐、歌词同步等功能。在此基础上,还可以增加一些音频的效果,使用户有更好的视听感受。同时在歌词同步方面,程序还可以增加调整歌词的功能,当出现歌词不同步时,用户可以根据实际情况进行调整。


  

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!