gpt4 book ai didi

android - 某些流的 Google Cast 速度慢

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:43 47 4
gpt4 key购买 nike

我有一个 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);

奇怪的是,有些流非常快,而有些则不是:

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

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

我很感激任何帮助或想法如何解决这个问题。

最佳答案

第二个链接有一个更大的缓冲区来刷新给你。

Throughput Analysis

此图显示吞吐量。第一个问题是我在 stream.funradio.sk:8000 上测试第一个 URL 时。第二个问题是我在 stream.expres.sk:8000 上测试第二个 URL 时。

您会注意到,在两者中,连接开始时都会出现大量数据。这些旨在尽快填充播放器缓冲区,以立即开始播放。您还会注意到第二个流在连接开始时有更多这样的内容。这是因为它有一个准备就绪的音频数据缓冲区。

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

I appreciate any help or idea how to fix this.

除了代理流之外,您无能为力。 Android 设备和 Chromecast 对 MP3 流特别挑剔,需要大量数据才能与其同步。

此外,Chrome 用于确定缓冲区是否足够满以在不停止的情况下播放的算法不知道您正在为其提供 radio 流,并且会在开始之前看到速率下降和缓冲区更多。这个问题可以通过完全编码你自己的播放器来解决,缓冲数据然后将它传递给解码器,而不是仅仅给底层系统一个 URL。在网络上,这可以通过媒体源扩展来完成。对于 Android,我没有太多经验。

关于android - 某些流的 Google Cast 速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52504992/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com