【问题标题】:Audio buffer management at Android StackAndroid Stack 中的音频缓冲区管理
【发布时间】:2014-09-08 06:14:17
【问题描述】:

我正在尝试了解流用例的 android 音频缓冲区管理,例如YouTube 流媒体。根据我对以下 URL 的理解:http://quandarypeak.com/2013/08/androids-stagefright-media-player-architecture/,应用程序通过本机媒体播放器子系统将数据发送到 Stagefright 媒体播放器。

谁能解释一下 Native Media Player 和 Stagefright Media Player 之间的缓冲区传输是如何发生的?媒体数据是否在 Native Media Player 或 Stagefright Media Player 中下载?

【问题讨论】:

    标签: android audio streaming audio-streaming stagefright


    【解决方案1】:

    您的问题有点开放,我将尝试总结答案以提供概述。建议参考源文件或有针对性的问题,以更好地了解系统。播放器的生命周期请参考MediaPlayer documentation

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

    真正的数据交易发生在远低于StagefrightPlayer的位置。当用户创建播放器时,会提供一个URI (setDataSource),它会在创建过程中传递给播放器引擎。

    Stagefright player creates AwesomePlayerdata source is set on AwesomePlayer

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

    现在,音频的数据事务将从 SinkSource 作为

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

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多