新闻中心

EEPW首页 > 测试测量 > 设计应用 > Android系统WMA文件播放功能的设计与实现

Android系统WMA文件播放功能的设计与实现

作者:时间:2011-12-18来源:网络收藏


2 多媒体增加音频格式的设计
从多媒体具体实现的角度来看,音频格式主要经过格式文件解析、WMA编码流解码、PCM输出3个阶段。WMA音频器的结构如图2所示。

本文引用地址:http://www.eepw.com.cn/article/194616.htm

d.JPG


基于多媒体音频播放流程,在WMA音频格式开发过程中主要有4项工作:(1)WMA文件的识别;(2)WMA文件的解析;(3)编码数据的读取;(4)编码数据的解码和输出。
2.1 WMA格式音频播放功能流程设计
通过调用AwesomePlayer的setDataSource函数来设置数据源;AwesomePlayer通过调用MediaExtractor的Create函数来识别该文件的格式,MediaPlayer判断该文件为WMA格式后,会创建一个WMAExtractor,在创建WMAExtraetor的同时,WMAExtractor会解析文件头,获取文件中的相关信息。然后调用WMAExtractor的getTrack函数创建一个WMASource;AwesomePlaye嗵过OMXCOdec创建一个WMADecoder;Awesome Player接着创建一个AudioPlayer,并把WMADecoder做为数据源传给AudioPlayer,并调用AudioPlayer的start函数;AudioPlayer获取WMA Decoder中的相关参数:文件类型、采样率、声道数,并根据该数据开启AudioSink,并把AudioSinkCailhaek做为回调函数传给AudioSink。AudioPlayer先调用WMADecoder解第一帧数据,并把该数据传给AudioSink去播放,当播放完成后AudioSink会调用回调函数AudioSink Call-hack再取解码后的数据,AudioSinkCallbaek又会调用FillButfer函数获取解码后的原始数据,解码后数据如果被取完后,AudioPlayer又会调用WMADecoder解下一帧数据给AudioSink,来回反复,直到文件中数全部被播放,播放流程如图3所示。在拉动滚动条时,上层会传来SeekTime,经AudioPlayer传给WMADeeoder再传给WMAExtractor,WMAExtractor根据上层传来的SeekTime判断出要播放的原始数据的起始位置,然后从该位置读取一个数据包传给WMADecoder解码。

e.JPG


在整个WMA格式解码播放过程中,主要设计有两个模块:WMAExtractor和WMADecoder。WMAExtractor主要执行WMA格式文件解析和数据读取功能。WMADecoder主要执行解码功能;WMA格式音频播放功能实现。

(1)WMA文件的识别。
在判断播放文件格式前,AwesomePlayer会提前把所支持的格式通过DataSource中的RegisterDefaultSniffers函数注册进来。判断播放文件格式时,会逐一按次序把该文件和所支持的格式进行匹配,最匹配的格式就是该文件的格式,所以在Datasource中的RegisterDefauh Sniffers函数中应添加如下代码:
f.JPG

c++相关文章:c++教程




关键词: Android WMA 系统 播放

评论


相关推荐

技术专区

关闭