Android 使用Vitamio打造自己的万能播放器(9)—— 在线播放 (在线电视)
前言
如果不想自己去找视频看,以传统方式看电视也不错,比如CCTV、湖南卫视等。本章从网络收集几百个电视台的地址,采用多级分类方式呈现,极大丰富在线播放部分的内容。
系列
1、Android 使用Vitamio打造自己的万能播放器(1)——准备
2、Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放
3、Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、视频列表)
4、Android 使用Vitamio打造自己的万能播放器(4)——本地播放(快捷搜索、数据存储)
5、Android 使用Vitamio打造自己的万能播放器(5)——在线播放(播放优酷视频)
6、Android 使用Vitamio打造自己的万能播放器(6)——在线播放(播放列表)
7、Android 使用Vitamio打造自己的万能播放器(7)——在线播放(下载视频)
8、Android 使用Vitamio打造自己的万能播放器(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/
四、参考
Android读写XML(上)——package说明
各大电视台直播地址
网络电视直播地址收集
结束
本文是新入手Macbook Pro上写的第一篇文章,诸多不习惯,仍然在一天内成功丢弃鼠标,离IOS又近一步了:) 系列文章并不强调用某种技术,但尽可能涉及到多种技术,只有充分了解各种技术才能在适当的时候使用合适的技术。先实现后优化,不必一步到位纠结于每个细节。
以上就是对Android Vitamio 开发播放在线电视相关资料,后续继续补充。
- Android 使用Vitamio打造自己的万能播放器(10)—— 本地播放 (缩略图、视频信息、视频扫描服务)
- Android 使用Vitamio打造自己的万能播放器(8)——细节优化
- Android 使用Vitamio打造自己的万能播放器(7)——在线播放(下载视频)
- Android 使用Vitamio打造自己的万能播放器(6)——在线播放(播放列表)
- Android 使用Vitamio打造自己的万能播放器(5)——在线播放(播放优酷视频)
- Android 使用Vitamio打造自己的万能播放器(4)——本地播放(快捷搜索、数据存储)
- Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、播放列表)
- Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放
- Android 使用Vitamio打造自己的万能播放器(1)——准备
- Android使用vitamio插件实现视频播放器
相关文章
Android带清除功能的输入框控件EditTextWithDel
这篇文章主要为大家详细介绍了Android带清除功能的输入框控件EditTextWithDel,感兴趣的小伙伴们可以参考一下2016-09-09
Github简单易用的 Android ViewModel Retrofit框架
这篇文章主要介绍了Github简单易用的Android ViewModel Retrofit框架,RequestViewMode有自动对LiveData进行缓存管理,每个retrofit api接口复用一个livedata的优势。下文具体详情,感兴趣的小伙伴可以参考一下2022-06-06
Android 超详细讲解fitsSystemWindows属性的使用
fitsSystemWindows属性可以让view根据系统窗口来调整自己的布局;简单点说就是我们在设置应用布局时是否考虑系统窗口布局,这里系统窗口包括系统状态栏、导航栏、输入法等,包括一些手机系统带有的底部虚拟按键2022-03-03
解决AndroidStudio无法运行java中的mian方法问题
这篇文章主要介绍了解决AndroidStudio无法运行java中的mian方法问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-10-10
android ViewPager实现自动无限轮播和下方向导圆点
本篇文章主要介绍了android ViewPager实现自动轮播和下方向导圆点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-02-02


最新评论