某些流的 Google Cast 速度很慢
Posted
技术标签:
【中文标题】某些流的 Google Cast 速度很慢【英文标题】:Google Cast slow for some streams 【发布时间】:2019-03-01 11:31:07 【问题描述】:我有一个 android 应用,它通过 Google Cast 播放来自网络的直播(主要是 icecast)。一切正常且快速,但现在一些流开始(发出声音)需要更长的时间。这可能与 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);
奇怪的是,有些流非常快,有些则不然:
-
http://stream.funradio.sk:8000/dance128.mp3 - 超过 20 秒后发出声音
http://stream.expres.sk:8000/128.mp3 - 这会在 1 秒内发出声音
我还注意到第二个流几乎立即触发 load() 函数的 ResultCallback,而第一个流大约需要 3 秒。
感谢任何帮助或解决此问题的想法。
【问题讨论】:
【参考方案1】:第二个链接有一个更大的缓冲区要刷新给你。
此图显示吞吐量。第一个曲线是当我在stream.funradio.sk:8000
上测试第一个 URL 时。第二个曲线是当我在 stream.expres.sk:8000
上测试第二个 URL 时。
您会注意到,在这两种情况下,连接开始时都会出现大量数据。这些旨在尽可能快地填充播放器缓冲区,以立即开始播放。您还会注意到,第二个流在连接开始时有更多这样的内容。这是因为它有一个音频数据缓冲区可供使用。
缓冲区大小可按流配置。配置第二个流的人认为会增加这个缓冲区,这可以让听众快速启动,这对于留住听众来说至关重要。这里唯一真正的权衡是延迟。第二个流已经有效地预先录制了几秒钟的音频以发送给新客户。对于大多数互联网广播电台来说,这种延迟根本不是问题。最好让该流快速启动,并且对于连接不稳定的听众来说更可靠。
感谢任何帮助或解决此问题的想法。
没有代理流,您无能为力。 Android 设备和 Chromecast 对 MP3 流特别挑剔,需要大量数据才能与它们同步。
此外,Chrome 用于确定缓冲区是否足够满以不停止播放的算法不知道您正在为其提供无线电流,并且在开始之前看到速率下降并缓冲更多。这个问题可以通过完全编码自己的播放器来解决,该播放器缓冲数据,然后将其传递给解码器,而不是仅仅给底层系统一个 URL。在网络上,这可以通过媒体源扩展来完成。对于 Android,我没有太多经验。
【讨论】:
非常有趣!我喜欢你如何打破wireshark来解释缓冲!好东西!以上是关于某些流的 Google Cast 速度很慢的主要内容,如果未能解决你的问题,请参考以下文章