Google Cast的某些视频播放速度很慢

时间:2018-09-25 18:52:32

标签: android audio-streaming chromecast google-cast internet-radio

我有一个Android应用,可通过Google Cast播放来自网络的实时流(主要是冰播)。一切正常且快速,但是现在某些流开始(发出声音)需要更长的时间。这可能与Chromecast固件升级有关,因为我的Chromecast设备最近更新到了最新版本(1.32.124602)。

这就是我通过Cast播放流的方式:

MediaMetadata metadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_GENERIC);
metadata.putString(MediaMetadata.KEY_TITLE, "My title");
metadata.putString(MediaMetadata.KEY_SUBTITLE, "My subtitle");
metadata.addImage(new WebImage(myImageUri);
MediaInfo mediaInfo = new MediaInfo.Builder(streamUrl)
        .setStreamType(MediaInfo.STREAM_TYPE_LIVE)
        .setContentType("audio/mpeg")
        .setMetadata(metadata)
        .build();
MediaLoadOptions options = new MediaLoadOptions.Builder()
       .setAutoplay(true)
       .setPlayPosition(0)
       .build();
sessionManager.getCurrentCastSession().getRemoteMediaClient().load(mediaInfo, options);

奇怪的是,有些流非常快,而另一些却没有:

  1. http://stream.funradio.sk:8000/dance128.mp3-20秒后发出声音
  2. http://stream.expres.sk:8000/128.mp3-在1秒钟内发出声音

我还注意到,load()函数的ResultCallback几乎立即触发了第二个流,而第一个流大约需要3秒。

我非常感谢您提供任何帮助或想法,以解决此问题。

1 个答案:

答案 0 :(得分:3)

第二个链接具有更大的缓冲区可以刷新给您。

Throughput Analysis

此图显示吞吐量。第一个弯曲是当我在stream.funradio.sk:8000上测试第一个URL时。第二种形式是我在stream.expres.sk:8000上测试了第二个URL。

您会注意到,在这两种连接的开头都有大量的数据。它们旨在尽快填充播放器缓冲区,以立即开始播放。您还将注意到,在连接开始时,第二个流具有更多的功能。这是因为它准备好了音频数据的缓冲区。

每个流的缓冲区大小是可配置的。配置第二个流的人们认为可以增加此缓冲区,从而可以使侦听器快速启动,这对于保留侦听器至关重要。唯一真正的权衡是延迟。第二个流已经有效地预先录制了几秒钟的音频,以发送给新客户。对于大多数互联网广播电台而言,此延迟根本不是问题。最好让该流快速启动,并且 对于具有斑点连接的听众来说更可靠。

  

我非常感谢您提供任何帮助或想法,以解决此问题。

代理流的简短内容,您无能为力。 Android设备和Chromecast对MP3流特别挑剔,并且需要大量数据才能与其同步。

此外,Chrome正在使用该算法来确定缓冲区是否足够满,可以播放而不会停顿,这并不知道您正在向其发送广播流,并且看到速率下降并在开始播放前缓冲了更多缓冲区。可以通过完全编码自己的播放器来解决此问题,该播放器可以缓冲数据,然后将其传递给解码器,而不仅仅是给底层系统提供URL。在网络上,这可以通过Media Source Extensions完成。对于Android,我在那儿没有太多经验。