Android VLC播放器二次开发1——程序结构分析

来源:互联网 发布:荷塘月色淘宝卖家论坛 编辑:程序博客网 时间:2024/06/06 01:16

 最近因为一个新项目需要一个多媒体播放器,所以需要做个视频、音频、图片方面的播放器。也查阅了不少这方面的资料,如果要从头做一个播放器工作量太大了,而且难度也很大。所以最后选择了VLC作为基础,进行二次开发。选择VLC的原因有两个,第一:VLC在其他平台很成熟,解码器方面支持很完善。第二:VLC已经实现了完整的视频播放和音频播放功能。开发速度可以加快很多。

  下面给出两张截图,主要是为了方便后面讲解程序结构使用,可以对照着图片看。界面和原版VLC差不多,我只是把ActionBar和视频列表做了一些调整。

  

(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:322599434)

 

 

1、背景

  一开始本来是想修改Android自带的Gallery3D程序,因为这个程序自带了视频播放功能,不过解码方面并不理想,很多格式不支持。无奈只能选用第三方的解码库,因此最后才选择了VLC作为二次开发基础。选择它的原因上面已经说过,这里不重复。

  VLC播放器不多介绍,相信做过音视频的朋友都了解,而且它基本上支持目前常见的平台。我这次二次开发的目的是把VLC原本的界面和一些播放控制修改一下,适应平板电脑上面使用,另外一个就是想掌握VLC的解码库如何使用。第一个目的,修改界面难度不会很大,因为整个界面逻辑结构,我不需要大改,只是做一些调整。所以主要目的就是了解VLC整个程序的实现。

  目前对VLC的分析主要是java层的实现,解码库那方面现在还没精力去分析,而且那一块也比较复杂。后面有时间,在考虑解码库的分析。目前主要是分析java部分代码和如何使用解码库。阅读优秀开源项目可以学到不少东西,分析Launcher就让我提高了不少,也学到了很多Android的开发知识,例如:多个ViewGroup和view之间处理触摸事件的流程。通过分析Launcher对Android触摸机制了解很深入。相信通过这次分析和修改VLC播放器,也能学到很多新知识。

  另外补充一点,VLC的源码都是开源的(包括解码库部分代码),可以用git获取,自行编译即可,我前面已经写了一篇详细获取VLC源码和编译的文章,如果不了解如何获取源码和如何编译的朋友,可以查看文章最后的链接。那篇文章提供了一个VLC的工程,可以直接导入到Eclipse里面使用。

 

 

2、程序结构

整个VLC播放器的模块可以分为下面几个重要的模块:

  • VLCLib解码库
  • 界面GUI
  • 音频部分
  • 视频部分
  • 接口定义
  • 控件和widget

  整个程序可以划分为上面的主要模块,对应上面源码的src包目录就可以看出来,至于每部分模块具体代码类,这里暂且不说,我个人也还没有完全分析完。只是掌握了程序结构和每个类大概功能。具体的后面我分析了,会继续写相关文章。

  直接主要说说程序界面逻辑,从我上面给出的截图可以看出来,程序刚启动默认就是进入视频列表。VLC的界面主要是由SlidingMenu和ActionBar构成,里面嵌入了好几个Fragment。SlidingMenu负责功能模块的切换(视频、音频、目录),具体进入视频还是音频,这个就是切换Fragment,也就是说具体的功能实现都是由Fragment实现的。SLidingMenu就是提供了切换功能,ActionBar提供了一些常用功能按钮,搜索、刷新、视频流输入、排序、设置等功能。大部分界面都会存在ActionBar,除了音频和视频播放界面。

 

 

3、程序主要模块简述

  程序的入口类是org.videolan.vlc.gui.MainActivity,也就是上面目录里面的gui下面的主Activity,这个Activity主要是检测VLC解码库以及创建相关界面的类对象和初始化功能,还有就是响应SlidingMenu和ActionBar的操作。具体的代码分析,下一篇文章再进行,今天先讲解个大概逻辑。

  视频模块的入口是视频列表org.videolan.vlc.gui.video.VideoGridFragment,上面已经说过,VLC的界面大部分都是基于Fragment实现的,视频列表也是基于Fragment,具体播放界面是另外一个Activity——VideoPlayerActivity,video包下面主要就是这两个类实现了视频播放的功能,一个是列表界面,一个是视频播放界面。其他的就是一些适配器和辅助类,到时候对视频详细解析的时候,再讲解相关类。

  音频模块主要是org.videolan.vlc.gui.audio.AudioBrowserFragment类是入口,音频播放模块里面又分了几个页面,实现了类似ViewPaper的滑动切换功能,这个倒是和元素Android的Music布局差不多。这些具体到时候分析音频模块在讲解。

  Widget和控件模块:这两个主要是实现了一些VLC自己的控件以及桌面的Widget,VLC做了一个桌面Widget是用来播放音频的,跟Android原生Music的Widget类似。

 

4、总结

  今天主要是介绍一下VLC的代码结构和主要的功能模块,下一篇文章开始会介绍VLC具体模块的分析。还有把我个人修改的情况记录下来,给有这方面开发需要的朋友参考一下。其实VLC整个java部分的代码还是挺多的,而且逻辑结构也区分很仔细。如果你已经分析过一些代码量比较多的开源工程,那分析VLC并不困难,但是如果你阅读的代码不多,这个对你来说可能是一个比较难的坎。

  整个工程其实用到了挺多技术,例如SlidingMenu、ActionBar、Fragment、AIDL、Widget、自定义View等等,如果你对这些技术都不熟悉,建议你先了解一下,特别是SlidingMenu和Fragment,这两个基本上构建了整个VLC播放器的界面。

  另外,我打算把VLC解码库的使用方法弄清楚,因为我打算把VLC的解码核心移植出来,做成一个可以方便使用的第三方库。主要是移植到我个人业余开发的一款网络收音机上面使用。另外就是独立出来,方便移植使用。

 

相关文章

Linux 下编译Android-VLC开源播放器详解(附源码下载)

 

Edited by mythou

原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3235698.html 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝持续低烧流鼻涕怎么办 孩子鼻塞不通气怎么办 2月婴儿感冒怎么办 长期流黄鼻涕怎么办 孩子流清水鼻涕怎么办 小孩有点流鼻子怎么办 初生婴儿堵鼻子怎么办? 小孩反复发烧了怎么办 小孩突然发烧了怎么办 40天宝宝鼻塞怎么办 宝宝伤风鼻子不通怎么办 鼻子伤风不通气怎么办 宝宝伤风流鼻子怎么办 十个月婴儿上火怎么办 一个多月宝宝鼻子有鼻屎怎么办 三个月婴儿感冒发烧怎么办 小孩感冒发烧流鼻涕怎么办 小孩感冒发烧反反复复怎么办 宝宝反复发烧39怎么办 一岁婴儿流鼻涕怎么办 四岁宝宝发烧怎么办 小孩流清鼻涕怎么办? 5宝宝光流清鼻涕怎么办 孩子一直流鼻子怎么办 10岁天天流鼻涕怎么办 喉咙痛又痒咳嗽怎么办 60天宝宝流鼻涕怎么办 宝宝流鼻子严重怎么办 鼻炎鼻涕多鼻塞怎么办 夏天老人感冒流鼻涕怎么办 鼻窦炎流清鼻涕怎么办 鼻子有脓鼻涕怎么办 宝宝有脓鼻涕怎么办 小孩脓鼻涕咳嗽怎么办 哺乳期流黄鼻涕怎么办 宝宝鼻塞流脓涕怎么办 喉咙痛浓痰咳嗽怎么办 哺乳期留清鼻涕怎么办 哺乳期就清鼻涕怎么办 小金毛流脓鼻涕怎么办 鼻炎有浓鼻涕怎么办