首页 » 技术文章 » 基于Symbian 平台的流媒体播放器设计与实现

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

作者:  时间:2011-04-01 18:51  来源:EDN

   3 1 2 流式播放引擎

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

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

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

2 本地播放流程图

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

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

  其播放流程如图3 所示。首先初始化CMdaAudioOutputStream类。初始化完成后,Multimedia 框架会调用MaoscOpenComplete( ) 回调函数,指出音频输出已经可用。该框架所给出的参数是一个出错值,它指出初始化是否成功。如果成功,则给出KErrNONe。此处可以设置采样率和音量等。成功初始化后,则可以在客户端调用PlayL( ) 函数来播放音频数据流。它调用FillBufferL( ) 函数把数据往缓冲区填充,并使用CMdaAudioOutputStream: : WriteL( const TdesC8aData) 进行播放。其中参数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 解析器对文件进行解析,把解析后的歌曲信息存放在数组里。

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

相关推荐

诺基亚赵科林:前段时间中国渠道确实出了问题

诺基亚  Symbian  2011-08-30

诺基亚将Symbian开发外包给埃哲森

诺基亚  Symbian  2011-06-23

诺基亚裁员4千人 Symbian研发外包埃森哲

诺基亚  symbian  2011-04-28

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

Symbian  S60  流媒体播放器  2011-04-01

诺基亚智能手机营收落后苹果9%

诺基亚  Symbian  智能手机  2011-03-22

诺基亚无奈收回Symbian控制权

诺基亚  Symbian  2010-11-11
在线研讨会
焦点