get rid of xul xml parser
This commit is contained in:
parent
7b6dae20be
commit
3404231457
|
@ -1,17 +1,21 @@
|
||||||
package org.schabi.newpipe.extractor;
|
package org.schabi.newpipe.extractor;
|
||||||
|
|
||||||
import android.util.Xml;
|
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
||||||
import org.schabi.newpipe.extractor.stream_info.AudioStream;
|
import org.schabi.newpipe.extractor.stream_info.AudioStream;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringReader;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Christian Schabesberger on 02.02.16.
|
* Created by Christian Schabesberger on 02.02.16.
|
||||||
*
|
*
|
||||||
|
@ -55,57 +59,33 @@ public class DashMpdParser {
|
||||||
throw new ReCaptchaException("reCaptcha Challenge needed");
|
throw new ReCaptchaException("reCaptcha Challenge needed");
|
||||||
}
|
}
|
||||||
Vector<AudioStream> audioStreams = new Vector<>();
|
Vector<AudioStream> audioStreams = new Vector<>();
|
||||||
try {
|
|
||||||
XmlPullParser parser = Xml.newPullParser();
|
|
||||||
parser.setInput(new StringReader(dashDoc));
|
|
||||||
String tagName = "";
|
|
||||||
String currentMimeType = "";
|
|
||||||
int currentBandwidth = -1;
|
|
||||||
int currentSamplingRate = -1;
|
|
||||||
boolean currentTagIsBaseUrl = false;
|
|
||||||
for(int eventType = parser.getEventType();
|
|
||||||
eventType != XmlPullParser.END_DOCUMENT;
|
|
||||||
eventType = parser.next() ) {
|
|
||||||
switch(eventType) {
|
|
||||||
case XmlPullParser.START_TAG:
|
|
||||||
tagName = parser.getName();
|
|
||||||
if(tagName.equals("AdaptationSet")) {
|
|
||||||
currentMimeType = parser.getAttributeValue(XmlPullParser.NO_NAMESPACE, "mimeType");
|
|
||||||
} else if(tagName.equals("Representation") && currentMimeType.contains("audio")) {
|
|
||||||
currentBandwidth = Integer.parseInt(
|
|
||||||
parser.getAttributeValue(XmlPullParser.NO_NAMESPACE, "bandwidth"));
|
|
||||||
currentSamplingRate = Integer.parseInt(
|
|
||||||
parser.getAttributeValue(XmlPullParser.NO_NAMESPACE, "audioSamplingRate"));
|
|
||||||
} else if(tagName.equals("BaseURL")) {
|
|
||||||
currentTagIsBaseUrl = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XmlPullParser.TEXT:
|
try {
|
||||||
// actual stream tag
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
if(currentTagIsBaseUrl &&
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
(currentMimeType.contains("audio"))) {
|
InputStream stream = new ByteArrayInputStream(dashDoc.getBytes());
|
||||||
|
|
||||||
|
Document doc = builder.parse(stream);
|
||||||
|
NodeList adaptationSetList = doc.getElementsByTagName("AdaptationSet");
|
||||||
|
for(int i = 0; i < adaptationSetList.getLength(); i++) {
|
||||||
|
Element adaptationSet = (Element) adaptationSetList.item(i);
|
||||||
|
String memeType = adaptationSet.getAttribute("mimeType");
|
||||||
|
if(memeType.contains("audio")) {
|
||||||
|
Element representation = (Element) adaptationSet.getElementsByTagName("Representation").item(0);
|
||||||
|
String url = representation.getElementsByTagName("BaseURL").item(0).getTextContent();
|
||||||
|
int bandwidth = Integer.parseInt(representation.getAttribute("bandwidth"));
|
||||||
|
int samplingRate = Integer.parseInt(representation.getAttribute("audioSamplingRate"));
|
||||||
int format = -1;
|
int format = -1;
|
||||||
if(currentMimeType.equals(MediaFormat.WEBMA.mimeType)) {
|
if(memeType.equals(MediaFormat.WEBMA.mimeType)) {
|
||||||
format = MediaFormat.WEBMA.id;
|
format = MediaFormat.WEBMA.id;
|
||||||
} else if(currentMimeType.equals(MediaFormat.M4A.mimeType)) {
|
} else if(memeType.equals(MediaFormat.M4A.mimeType)) {
|
||||||
format = MediaFormat.M4A.id;
|
format = MediaFormat.M4A.id;
|
||||||
}
|
}
|
||||||
audioStreams.add(new AudioStream(parser.getText(),
|
audioStreams.add(new AudioStream(url, format, bandwidth, samplingRate));
|
||||||
format, currentBandwidth, currentSamplingRate));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XmlPullParser.END_TAG:
|
|
||||||
if(tagName.equals("AdaptationSet")) {
|
|
||||||
currentMimeType = "";
|
|
||||||
} else if(tagName.equals("BaseURL")) {
|
|
||||||
currentTagIsBaseUrl = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
}
|
||||||
|
catch(Exception e) {
|
||||||
throw new DashMpdParsingException("Could not parse Dash mpd", e);
|
throw new DashMpdParsingException("Could not parse Dash mpd", e);
|
||||||
}
|
}
|
||||||
return audioStreams;
|
return audioStreams;
|
||||||
|
|
Loading…
Reference in New Issue