Files
android/proprietary/samplePlayer/src/com/widevine/demo/ConfigXMLParser.java
Jeffrey Tinker 66d9ff5fb5 Fix for 4198445 HC - Support for Widevine Live Streaming (adaptive)
Change-Id: Id3a8a997fb1186c6af6e94f2fc2d4788238a0452
2011-05-26 11:25:05 -07:00

93 lines
3.1 KiB
Java

/*
* (c)Copyright 2011 Widevine Technologies, Inc
*/
package com.widevine.demo;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Xml;
/**
* Parser for the XML configuration file that defines the assets available to
* play
*/
public class ConfigXMLParser {
private URL mFeedUrl;
private InputStream inputStream;
protected InputStream getInputStream() {
try {
if (inputStream != null)
return inputStream;
else
return mFeedUrl.openConnection().getInputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public ConfigXMLParser(URL feedUrl) {
mFeedUrl = feedUrl;
}
public ConfigXMLParser(InputStream inputStream) {
this.inputStream = inputStream;
}
public List<AssetDescriptor> parse() {
final AssetDescriptor currentAssetDescriptor = new AssetDescriptor();
RootElement root = new RootElement("widevine");
final List<AssetDescriptor> assetDescriptors = new ArrayList<AssetDescriptor>();
Element assetlist = root.getChild("asset-list");
Element asset = assetlist.getChild("asset");
asset.setEndElementListener(new EndElementListener() {
public void end() {
if (currentAssetDescriptor.getUri().indexOf(".wvm") != -1
|| currentAssetDescriptor.getUri().indexOf(".ts") != -1
|| currentAssetDescriptor.getUri().indexOf(".m3u8") != -1
|| !currentAssetDescriptor.getUri().substring(currentAssetDescriptor
.getUri().lastIndexOf("/")).contains(".")) {
assetDescriptors.add(currentAssetDescriptor.copy());
}
}
});
asset.getChild("title").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
currentAssetDescriptor.setTitle(body);
}
});
asset.getChild("uri").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
currentAssetDescriptor.setUri(body);
}
});
asset.getChild("description").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
currentAssetDescriptor.setDescription(body);
}
});
asset.getChild("thumbnail").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
currentAssetDescriptor.setThumbnail(body);
}
});
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
} catch (Exception e) {
throw new RuntimeException(e);
}
return assetDescriptors;
}
}