我正在使用 ExoPlayer 2.6.1 播放实时 HLS,并且需要能够判断 HLS 播放列表是滑动窗口还是完整播放列表(不断增长)。我想根据正在使用的播放列表类型显示不同的播放器控件,但我无权访问该元数据。所以我很好奇是否有可能从 ExoPlayer 本身获取这些信息。
我认为我可以使用此处描述的时间轴,但我似乎无法区分。
我正在使用 ExoPlayer 2.6.1 播放实时 HLS,并且需要能够判断 HLS 播放列表是滑动窗口还是完整播放列表(不断增长)。我想根据正在使用的播放列表类型显示不同的播放器控件,但我无权访问该元数据。所以我很好奇是否有可能从 ExoPlayer 本身获取这些信息。
我认为我可以使用此处描述的时间轴,但我似乎无法区分。
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;
}
}
}
});