首页 > 系统 > Android > 正文

Android 使用Vitamio打造自己的万能播放器(9)―― 在线播放 (在线电视)

2019-12-12 05:53:37
字体:
来源:转载
供稿:网友

前言

 如果不想自己去找视频看,以传统方式看电视也不错,比如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 开发播放在线电视相关资料,后续继续补充。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表