package com.zhan_dui.utils.m3u8; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.util.Iterator; import java.util.List; /** * @author dkuffner */ public final class Playlist implements Iterable<Element> { public static Playlist parse(Readable readable) throws ParseException { if (readable == null) { throw new NullPointerException("playlist"); } return PlaylistParser.create(PlaylistType.M3U8).parse(readable); } public static Playlist parse(String playlist) throws ParseException { if (playlist == null) { throw new NullPointerException("playlist"); } return parse(new StringReader(playlist)); } public static Playlist parse(InputStream playlist) throws ParseException { if (playlist == null) { throw new NullPointerException("playlist"); } return parse(new InputStreamReader(playlist)); } public static Playlist parse(ReadableByteChannel playlist) throws ParseException { if (playlist == null) { throw new NullPointerException("playlist"); } return parse(makeReadable(playlist)); } private static Readable makeReadable(ReadableByteChannel source) { if (source == null) { throw new NullPointerException("source"); } return Channels.newReader(source, java.nio.charset.Charset.defaultCharset().name()); } private final List<Element> elements; private final boolean endSet; private final int targetDuration; private int mediaSequenceNumber; Playlist(List<Element> elements, boolean endSet, int targetDuration, int mediaSequenceNumber) { if (elements == null) { throw new NullPointerException("elements"); } this.targetDuration = targetDuration; this.elements = elements; this.endSet = endSet; this.mediaSequenceNumber = mediaSequenceNumber; } public int getTargetDuration() { return targetDuration; } public Iterator<Element> iterator() { return elements.iterator(); } public List<Element> getElements() { return elements; } public boolean isEndSet() { return endSet; } public int getMediaSequenceNumber() { return mediaSequenceNumber; } @Override public String toString() { return "PlayListImpl{" + "elements=" + elements + ", endSet=" + endSet + ", targetDuration=" + targetDuration + ", mediaSequenceNumber=" + mediaSequenceNumber + '}'; } }