我正在尝试了解流式用例的android音频缓冲区管理,例如YouTube流媒体。根据我对以下URL的理解:http://quandarypeak.com/2013/08/androids-stagefright-media-player-architecture/,应用程序通过本机媒体播放器子系统将数据发送到Stagefright Media Player。
有人可以解释一下本机媒体播放器和Stagefright Media Player之间的缓冲区传输如何发生吗?是否可以在Native Media Player或Stagefright Media Player上下载媒体数据?
最佳答案
您的问题是未解决的问题,我将尝试总结答案以提供概述。建议引用源文件或有更多针对性的问题,以更好地了解系统。有关玩家的生命周期,请参阅 MediaPlayer
documentation。
从体系结构的 Angular 来看,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中。
现在,音频的数据事务将从 Sink 到来源作为AudioTrack
从AudioPlayer
中提取包含OMXCodec
的数据。编解码器从MediaExtractor
中提取数据,然后从NuCachedSource2
中提取数据。在流数据的情况下,one can buffer or cache the data via MediaExtractor
基本上创建了页面缓存。当ojit_code请求数据时,从页面高速缓存中提供数据,而不是等待来自网络源的缓冲。