基于Symbian平台的流媒体播放器设计与实现
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 地址和端口,向服务器发送请求。等服务器作出响应后,读取响应的数据并进行分析,用来初始化播放引擎。客户端继续对服务端请求播放的音频数据。
得到要播放的音频数据流后,则开始流式播放。
评论