1

我正在使用 ExoPlayer 2.6.1 播放实时 HLS,并且需要能够判断 HLS 播放列表是滑动窗口还是完整播放列表(不断增长)。我想根据正在使用的播放列表类型显示不同的播放器控件,但我无权访问该元数据。所以我很好奇是否有可能从 ExoPlayer 本身获取这些信息。

我认为我可以使用此处描述的时间轴,但我似乎无法区分。

4

1 回答 1

2

HLS 播放列表可以是三种不同的类型:直播(默认)、活动或视频点播(规范)。对于事件或 vod,类型在播放列表中设置为

#EXT-X-PLAYLIST-TYPE:EVENT

或者

#EXT-X-PLAYLIST-TYPE:VOD

根据规范,事件类型就是您所说的完整实时播放列表:

清单 2 中显示的事件播放列表与上面的实时媒体播放列表具有相同的格式,但多了一行:#EXT-X-PLAYLIST-TYPE:EVENT。该指定会提醒媒体播放器,该播放列表的行为将不同于实时媒体播放列表。事件播放列表保持对旧媒体的引用,同时获得新的引用。

使用 ExoPlayer,您可以注册一个监听器来监听时间线的变化。回调有一个清单参数,您可以参考:

player.addListener(new Player.DefaultEventListener() {
  @Override
  public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
    if (manifest != null) {
      switch (((HlsManifest)manifest).mediaPlaylist.playlistType) {
        case HlsMediaPlaylist.PLAYLIST_TYPE_VOD:
          Log.d("TAG", "playlist type VOD");
          break;
        case HlsMediaPlaylist.PLAYLIST_TYPE_EVENT:
          Log.d("TAG", "playlist type EVENT");
          break;
        default:
          Log.d("TAG", "playlist type LIVE");
          break;
      }
    }
  }
});
于 2018-03-23T19:14:07.287 回答