[转载]使用Vitamio打造自己的Android万能播放器(9)—— 在线播放 (在线电视)

前言

如果不想自己去找视频看,以传统方式看电视也不错,比如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;
    }
复制代码

 

三、下载
    至本章节往后,代码均不再提供下载,请移步Google Code:
    http://code.google.com/p/android-oplayer

  无法访问请尝试地址:https://over140@android-oplayer.googlecode.com/hg/ ,参照这里

 

四、Vitamio公告

    正式建立Vitamio开发者联盟QQ群!群号为:246969281
    注意:目前仅接受已经开发基于Vitamio产品的开发者申请加入,申请理由请填写产品的名称和链接!

   注意更新至2012-07-09发布的新版SDK:这里。

 

、参考

Android读写XML(上)——package说明

  各大电视台直播地址

网络电视直播地址收集 

posted on 2012-07-20 14:20  旁_观_者  阅读(216)  评论(0编辑  收藏  举报

导航