基于Symbian平台的流媒体播放器关键技术简介
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 所示。
图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 为封装好的流式播放引擎,由它来调用流媒体播放的相关接口。本地内容播放和流式播放的主要不同在于文件打开方式、初始化方法及对音频数据流的处理方式。
要实现流式播放,在程序里需要编写一个实现
- 智能小区中嵌入式MP3流媒体网络广播系统设计 (05-05)
- 视音频、流媒体、图像编码标准综述(02-11)
- 基于嵌入式DSP的流媒体编解码器(04-22)
- IPTV测试流程与测试技巧(05-06)
- WebCDN流媒体多节点综合管理应用平台方案(10-06)
- 基于Symbian平台的流媒体播放器设计与实现(07-01)