我试图理解用于流式用例的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下载?
答案 0 :(得分:1)
您的问题稍微悬而未决,我将尝试总结答案以提供概述。建议您参考源文件或提出更具针对性的问题,以便更好地了解系统。有关播放器的生命周期,请参阅MediaPlayer
documentation。
从架构的角度来看,native
图层会创建相应的播放器引擎,在您的示例中为StagefrightPlayer
。 native
和StagefrightPlayer
之间的交互更多是管理本机,其中传递用户命令和请求,并将来自底层的反馈提供给用户层。
实际数据交易发生在低于StagefrightPlayer
以下。当用户创建播放器时,提供URI
(setDataSource
),在创建期间将其传递给播放器引擎。
Stagefright
player creates AwesomePlayer
和data source is set on AwesomePlayer
。
AwesomePlayer
a MediaExtractor
is created and the data source is provided as part of it's creation。
现在,音频的数据交易将从接收转换为来源
AudioTrack
从AudioPlayer
中提取包含OMXCodec
的数据。编解码器从MediaExtractor
中提取数据,后者又从源中提取数据。在流数据的情况下,one can buffer or cache the data via NuCachedSource2
,基本上创建页面缓存。当MediaExtractor
请求数据时,页面缓存提供相同的内容,而不是等待来自网络源的缓冲。