2016-04-04 50 views
1

我使用Andorid ExoPlayer通过http(HLS)从互联网传输内容。当我开始播放它工作正常,但是当我尝试改变播放内容的质量 -Android ExoPlayer更改所选轨道

player.setSelectedTrack(TYPE_VIDEO, 1)

例如,我GET和HTTP 403禁止错误。如果我初始化播放器并再次运行内容,那很好。我正在使用Demo项目作为源。

你知道什么可能导致这种行为,以及播放初始流和改变曲目有什么不同?

有没有一种方法可以在不重新初始化整个播放器的情况下重置流式传输,因为当播放器初始化时url会传递给构建器?

回答

1

我发现了这个问题。我传递给ExoPlayer的URL从外部API返回并且相当长,所以我没有注意到它实际上是由“|”(http://my_url_1.m3u8|http://my_url_2.m3u8)连接的2个URL。奇怪的是,如果你将这个字符串传递给ExoPlayer,它将播放一个没有错误的流..但是如果你试图改变播放流的质量,你就会遇到问题。

1

您不会使用setSelectedTrack()更改流的质量。这用于从可用的流中选择要播放的内容(如音频,字幕的语言,或者视频非常罕见,但例如可以设置不同的视频角度)。

所有这些流可以有多个质量级别,ExoPlayer的FormatEvaluator根据网络条件选择要下载的质量。

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

我建议手动下载HLS清单(.m3u8),然后检查列出的信息,在浏览器中逐一尝试。一切都应该工作,你也不应该在这个测试中得到403测试。