前言
如果不想自己去找视频看,以传统方式看电视也不错,比如CCTV、湖南卫视等。本章从网络收集几百个电视台的地址,采用多级分类方式呈现,极大丰富在线播放部分的内容。
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com
系列
1、 使用Vitamio打造自己的Android万能播放器(1)——准备
2、 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
3、 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、视频列表)
4、 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
5、 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
6、 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
7、使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
8、使用Vitamio打造自己的Android万能播放器(8)——细节优化
正文
一、目标
以多级目录分类方式在在线视频栏目下添加电视台。
二、主要代码
电视台的地址目前是存在XML文件里,那么本文代码主要就是解析XML的数据了。
package com.nmbb.oplayer.ui.helper;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.content.Context;
import com.nmbb.oplayer.po.OnlineVideo;
/**
从XML读取电视台节目
*/
public
class XmlReaderHelper {
/**
获取所有电视分类
*/
public
static ArrayList<OnlineVideo> getAllCategory(
final Context context) {
ArrayList<OnlineVideo> result =
new ArrayList<OnlineVideo>();
DocumentBuilderFactory docBuilderFactory =
null;
DocumentBuilder docBuilder =
null;
Document doc =
null;
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
//
xml file 放到 assets目录中的
doc = docBuilder.parse(context.getResources().getAssets()
.open("online.xml"));
//
root element
Element root = doc.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("category");
for (
int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
//
category
OnlineVideo ov =
new OnlineVideo();
NamedNodeMap attr = node.getAttributes();
ov.title = attr.getNamedItem("name").getNodeValue();
ov.id = attr.getNamedItem("id").getNodeValue();
ov.category = 1;
ov.level = 2;
ov.is_category =
true;
result.add(ov);
//
Read Node
}
}
catch (IOException e) {
}
catch (SAXException e) {
}
catch (ParserConfigurationException e) {
}
finally {
doc =
null;
docBuilder =
null;
docBuilderFactory =
null;
}
return result;
}
/**
读取分类下所有电视地址
*/
public
static ArrayList<OnlineVideo> getVideos(
final Context context,
String categoryId) {
ArrayList<OnlineVideo> result =
new ArrayList<OnlineVideo>();
DocumentBuilderFactory docBuilderFactory =
null;
DocumentBuilder docBuilder =
null;
Document doc =
null;
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
//
xml file 放到 assets目录中的
doc = docBuilder.parse(context.getResources().getAssets()
.open("online.xml"));
//
root element
Element root = doc.getElementById(categoryId);
if (root !=
null) {
NodeList nodeList = root.getChildNodes();
for (
int i = 0, j = nodeList.getLength(); i < j; i++) {
Node baseNode = nodeList.item(i);
if (!"item".equals(baseNode.getNodeName()))
continue;
String id = baseNode.getFirstChild().getNodeValue();
if (id ==
null)
continue;
OnlineVideo ov =
new OnlineVideo();
ov.id = id;
Element el = doc.getElementById(ov.id);
if (el !=
null) {
ov.title = el.getAttribute("title");
ov.icon_url = el.getAttribute("image");
ov.level = 3;
ov.category = 1;
NodeList nodes = el.getChildNodes();
for (
int m = 0, n = nodes.getLength(); m < n; m++) {
Node node = nodes.item(m);
if (!"ref".equals(node.getNodeName()))
continue;
String href = node.getAttributes()
.getNamedItem("href").getNodeValue();
if (ov.url ==
null) {
ov.url = href;
}
else {
if (ov.backup_url ==
null)
ov.backup_url =
new ArrayList<String>();
ov.backup_url.add(href);
}
}
if (ov.url !=
null)
result.add(ov);
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
catch (SAXException e) {
e.printStackTrace();
}
catch (ParserConfigurationException e) {
e.printStackTrace();
}
finally {
doc =
null;
docBuilder =
null;
docBuilderFactory =
null;
}
return result;
}
}
三、下载
请移步#Taocode(SVN):
项目地址:http://code.taobao.org/p/oplayer
SVN地址:http://code.taobao.org/svn/oplayer/
四、Vitamio公告
正式建立Vitamio开发者联盟QQ群!群号为:
246969281
注意:
目前仅接受已经开发基于Vitamio产品的开发者申请加入,申请理由请填写产品的名称和链接!
注意更新至2012-07-09发布的新版SDK:这里。
五、参考
Android读写XML(上)——package说明
各大电视台直播地址
网络电视直播地址收集