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

 更新时间:2016年07月25日 16:50:02   投稿:lqh  
本文主要介绍Android 使用Vitamio开发播放器,实现在线电视播放,这里提供效果图和实例代码以便大家参考,

前言

 如果不想自己去找视频看,以传统方式看电视也不错,比如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模拟器端口被占用问题的办法

    解决Android模拟器端口被占用问题的办法

    这篇文章主要为大家分享了Android模拟器端口被占用问题的解决办法,遇到Android模拟器端口被占用的时候,真的很头疼,如何才能解决端口被占用的问题,下文为大家揭晓
    2015-12-12
  • Android带清除功能的输入框控件EditTextWithDel

    Android带清除功能的输入框控件EditTextWithDel

    这篇文章主要为大家详细介绍了Android带清除功能的输入框控件EditTextWithDel,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Github简单易用的 Android ViewModel Retrofit框架

    Github简单易用的 Android ViewModel Retrofit框架

    这篇文章主要介绍了Github简单易用的Android ViewModel Retrofit框架,RequestViewMode有自动对LiveData进行缓存管理,每个retrofit api接口复用一个livedata的优势。下文具体详情,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Android实现QQ侧滑菜单效果

    Android实现QQ侧滑菜单效果

    这篇文章主要为大家详细介绍了Android实现QQ侧滑菜单效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android 超详细讲解fitsSystemWindows属性的使用

    Android 超详细讲解fitsSystemWindows属性的使用

    fitsSystemWindows属性可以让view根据系统窗口来调整自己的布局;简单点说就是我们在设置应用布局时是否考虑系统窗口布局,这里系统窗口包括系统状态栏、导航栏、输入法等,包括一些手机系统带有的底部虚拟按键
    2022-03-03
  • Android仿Flipboard动画效果的实现代码

    Android仿Flipboard动画效果的实现代码

    这篇文章主要介绍了Android仿Flipboard动画效果的实现代码,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2018-01-01
  • 如何在Android中实现一个简易的Http服务器

    如何在Android中实现一个简易的Http服务器

    这篇文章主要介绍了如何在Android中实现一个简易的Http服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 解决AndroidStudio无法运行java中的mian方法问题

    解决AndroidStudio无法运行java中的mian方法问题

    这篇文章主要介绍了解决AndroidStudio无法运行java中的mian方法问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • android ViewPager实现自动无限轮播和下方向导圆点

    android ViewPager实现自动无限轮播和下方向导圆点

    本篇文章主要介绍了android ViewPager实现自动轮播和下方向导圆点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • Android Studio调试Gradle插件详情

    Android Studio调试Gradle插件详情

    这篇文章主要介绍了Android Studio调试Gradle插件详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论