【问题标题】:live Streaming audio delays while playing in android-16?在 android-16 中播放时直播音频延迟?
【发布时间】:2013-04-22 11:59:18
【问题描述】:

我正在开发一个小型 android 应用程序,我在其中使用 android 媒体播放器播放 rtsp 链接。它在少于 android 16 api 上正常工作。但问题是,当我在 android 16 上运行时,它需要很长时间才能播放,有时甚至无法播放。以下是我正在使用的代码

sdrPlayer = new MediaPlayer();
sdrPlayer.setDataSource(url);
sdrPlayer.prepare();
sdrPlayer.setOnCompletionListener(video.this);
sdrPlayer.setOnPreparedListener(video.this);
sdrPlayer.setOnBufferingUpdateListener(video.this);
sdrPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

以下是一些测试用例

  1. ZTE N860 – 开始播放收音机大约需要 4 到 5 分钟。
  2. 三星 Galaxy S4 – 音频根本不起作用。它调用启动方法 在onprepare 方法中但没有音频。
  3. Samsung SCH1415 - 开始播放收音机大约需要 8 分钟
  4. HTC V5 – 音频始终无法正常工作。它开始播放,但是 没有音频。行为不一致,这导致 更多的挫败感。

【问题讨论】:

  • Nitin,如果可以的话,我建议您嗅探到服务器的流量并比较两个 RTSP 交换。我记得在某处读到某些 Android 版本上的 RTSP 实现更新破坏了许多现有应用程序。如果是这种情况,您应该会在 RTSP 交换中看到一些不同。
  • 首先感谢@Ralf 的评论,但是当我们第一次加载链接时,android 16 总是需要时间来加载链接,有时会随机加载。媒体播放器的播放方法也给出了 true.so我无法显示进度。但有时它可以正常工作。服务器是否有可能在开始和某些时候总是发送一些损坏的位。
  • 等待时间是由音频缓冲区大小引起的。我相信 Android 16+ 会增加大小。你的问题是什么?由于您无法控制缓冲区大小,因此如果您想使用 MediaPlayer,那么您就不走运了。我的应用程序使用基于 FFmpeg 的播放器,因此我可以控制缓冲区大小。

标签: android media-player android-mediaplayer rtsp


【解决方案1】:

播放rtsp链接你应该使用sdrPlayer.prepareAsync();而不是

sdrPlayer.prepare();

因为文档说

它以异步方式为播放器准备播放。设置数据源和显示界面后,您需要调用prepare()prepareAsync()对于流,您应该调用prepareAsync(),它会立即返回,而不是阻塞直到缓冲足够的数据。

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    相关资源
    最近更新 更多