其他分享
首页 > 其他分享> > android-某些流的Google Cast速度很慢

android-某些流的Google Cast速度很慢

作者:互联网

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

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

> http://stream.funradio.sk:8000/dance128.mp3-20秒后发出声音
> 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浏览器正在使用的算法来确定缓冲区是否足够满,可以播放而不会停顿,这并不知道您正在向其发送广播流,并且看到速率下降并在开始播放前缓冲了更多缓冲区.可以通过完全编码自己的播放器来解决此问题,该播放器可以缓冲数据,然后将其传递给解码器,而不仅仅是给底层系统提供URL.在网络上,这可以通过Media Source Extensions完成.对于Android,我在那儿没有太多经验.

标签:google-cast,audio-streaming,chromecast,internet-radio,android
来源: https://codeday.me/bug/20191108/2008658.html