使用Vitamio打造自己的Android萬能播放器(9)—— 在線播放 (在線電視)


 

前言

如果不想自己去找視頻看,以傳統方式看電視也不錯,比如CCTV、湖南衛視等。本章從網絡收集幾百個電視台的地址,采用多級分類方式呈現,極大豐富在線播放部分的內容。

 

聲明
  歡迎轉載,但請保留文章原始出處:) 
    博客園:http://www.cnblogs.com
    農民伯伯: http://over140.cnblogs.com 


系列
  4、 使用Vitamio打造自己的Android萬能播放器(4)——本地播放(快捷搜索、數據存儲)
  5、 使用Vitamio打造自己的Android萬能播放器(5)——在線播放(播放優酷視頻)

  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說明

  各大電視台直播地址

網絡電視直播地址收集 


結束

本文是新入手Macbook Pro上寫的第一篇文章,諸多不習慣,仍然在一天內成功丟棄鼠標,離IOS又近一步了:) 系列文章並不強調用某種技術,但盡可能涉及到多種技術,只有充分了解各種技術才能在適當的時候使用合適的技術。先實現后優化,不必一步到位糾結於每個細節。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM