Android ExoPlayer 正在更改所选曲目

Android ExoPlayer changing selected track

我正在使用 Andorid ExoPlayer 通过 http(HLS) 从 Internet 流式传输内容。当我启动播放器时它工作正常,但是当我尝试更改播放内容的质量时 -

player.setSelectedTrack(TYPE_VIDEO, 1)

例如,我收到 HTTP 403 Forbidden 错误。如果我初始化播放器并再次 运行 内容,就可以了。我正在使用演示项目作为源。

您知道可能导致此行为的原因是什么吗?播放初始流和更改曲目有什么区别?

有没有办法在不重新初始化整个播放器的情况下重置流式传输,因为 url 是在播放器初始化时传递给构建器的?

您不能使用 setSelectedTrack() 更改流的质量。这用于 select 从可用的流中播放什么(比如音频、字幕或视频的语言很少见,但例如你可以为体育赛事设置不同的摄像机角度)。

所有这些流都可以有多个质量级别,ExoPlayer 的 FormatEvaluator select根据网络条件下载什么质量。

如果您select新曲目时解码器不同,则播放器需要重新初始化才能继续播放。

我建议手动下载 HLS manifest (.m3u8),然后查看列出的信息,在浏览器中一个一个地尝试 url。一切都应该有效,你也不应该在这个测试中得到 403 测试。

我发现了问题。我传递给 ExoPlayer 的 URL 是从外部 API 返回的并且相当长,所以我没有注意到它实际上是由“|”(http://my_url_1.m3u8|http://my_url_2.m3u8).奇怪的是,如果您将此字符串传递给 ExoPlayer,它会无误地播放流。但是如果您尝试更改播放流的质量,则会出现问题。