我正在尝试了解流式用例的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创建对应的播放器引擎,在您的示例中为StagefrightPlayernativeStagefrightPlayer之间的交互更多是管理本机的,其中传递用户命令和请求,并将来自底层的反馈提供给用户层。

实际数据交易的发生位置远低于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 来源作为
AudioTrackAudioPlayer中提取包含OMXCodec的数据。编解码器从MediaExtractor中提取数据,然后从NuCachedSource2中提取数据。在流数据的情况下,one can buffer or cache the data via MediaExtractor 基本上创建了页面缓存。当ojit_code请求数据时,从页面高速缓存中提供数据,而不是等待来自网络源的缓冲。

07-24 18:58