Android Stack的音频缓冲管理

时间:2014-07-17 11:36:10

标签: android audio streaming audio-streaming stagefright

我试图理解用于流式用例的Android音频缓冲管理,例如YouTube直播。根据我对以下URL的理解:http://quandarypeak.com/2013/08/androids-stagefright-media-player-architecture/,应用程序通过Native Media Player子系统将数据发送到Stagefright Media Player。

有人可以解释如何在Native Media Player和Stagefright Media Player之间进行缓冲区传输吗?媒体数据是否在Native Media Player或Stagefright Media Player下载?

1 个答案:

答案 0 :(得分:1)

您的问题稍微悬而未决,我将尝试总结答案以提供概述。建议您参考源文件或提出更具针对性的问题,以便更好地了解系统。有关播放器的生命周期,请参阅MediaPlayer documentation

从架构的角度来看,native图层会创建相应的播放器引擎,在您的示例中为StagefrightPlayernativeStagefrightPlayer之间的交互更多是管理本机,其中传递用户命令和请求,并将来自底层的反馈提供给用户层。

实际数据交易发生在低于StagefrightPlayer以下。当用户创建播放器时,提供URIsetDataSource),在创建期间将其传递给播放器引擎。

Stagefright player creates AwesomePlayerdata source is set on AwesomePlayer

AwesomePlayer a MediaExtractor is created and the data source is provided as part of it's creation

现在,音频的数据交易将从接收转换为来源

AudioTrackAudioPlayer中提取包含OMXCodec的数据。编解码器从MediaExtractor中提取数据,后者又从源中提取数据。在流数据的情况下,one can buffer or cache the data via NuCachedSource2,基本上创建页面缓存。当MediaExtractor请求数据时,页面缓存提供相同的内容,而不是等待来自网络源的缓冲。