diff --git a/parser/pom.xml b/parser/pom.xml
old mode 100644
new mode 100755
index 67508fd..015b842
--- a/parser/pom.xml
+++ b/parser/pom.xml
@@ -4,7 +4,7 @@
net.chilicat.m3u8
m3u8parser
jar
- 0.2
+ 0.3
m3u8
http://m3u8parser.chilicat.net/
diff --git a/parser/src/main/java/net/chilicat/m3u8/M3uConstants.java b/parser/src/main/java/net/chilicat/m3u8/M3uConstants.java
old mode 100644
new mode 100755
diff --git a/parser/src/main/java/net/chilicat/m3u8/PlaylistParser.java b/parser/src/main/java/net/chilicat/m3u8/PlaylistParser.java
old mode 100644
new mode 100755
index 36ccaf9..e03ced0
--- a/parser/src/main/java/net/chilicat/m3u8/PlaylistParser.java
+++ b/parser/src/main/java/net/chilicat/m3u8/PlaylistParser.java
@@ -5,7 +5,9 @@
import java.nio.channels.Channels;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -51,7 +53,7 @@ public Playlist parse(Readable source) throws ParseException {
boolean firstLine = true;
int lineNumber = 0;
-
+
final List elements = new ArrayList(10);
final ElementBuilder builder = new ElementBuilder();
boolean endListSet = false;
@@ -89,7 +91,9 @@ public Playlist parse(Readable source) throws ParseException {
builder.programDate(programDateTime);
} else if (line.startsWith(EXT_X_KEY)) {
currentEncryption = parseEncryption(line, lineNumber);
- } else {
+ } else if (line.startsWith(EXT_X_STREAM_INF)){
+ parseStreamInf(line,builder);
+ } else {
log.log(Level.FINE, new StringBuilder().append("Unknown: '").append(line).append("'").toString());
}
} else if (line.startsWith(COMMENT_PREFIX)) {
@@ -120,7 +124,32 @@ public Playlist parse(Readable source) throws ParseException {
return new Playlist(Collections.unmodifiableList(elements), endListSet, targetDuration, mediaSequenceNumber);
}
- private URI toURI(String line) {
+
+ private void parseStreamInf(final String line, final ElementBuilder builder)
+ {
+ String ln = line.replace(EXT_X_STREAM_INF + ":", "");
+
+ //this isn't the proper way to parse these, this will break for parameters that
+ // can have comma separated lists for their value (eg CODECS)
+ String[] split = ln.split(",");
+
+ Map params = new HashMap();
+
+ for (String kvp : split)
+ {
+ String param = kvp.substring(0, kvp.indexOf('='));
+ String value = kvp.substring(kvp.indexOf('=') + 1);
+ params.put(param, value);
+ }
+
+ final int programId = Integer.parseInt(params.get("PROGRAM-ID"));
+ final int bandwidth = Integer.parseInt(params.get("BANDWIDTH"));
+
+ builder.playList(programId, bandwidth, null);
+ }
+
+
+ private URI toURI(String line) {
try {
return (URI.create(line));
} catch (IllegalArgumentException e) {
@@ -175,7 +204,7 @@ private void parseExtInf(String line, int lineNumber, ElementBuilder builder) th
try {
builder.duration(Double.valueOf(duration)).title(title);
} catch (NumberFormatException e) {
- // should not happen because of
+ // should not happen because of
throw new ParseException(line, lineNumber, e);
}
}