利用Vitamio开发视频播放器(一)

来源:互联网 发布:淘宝投诉盗图怎么撤销 编辑:程序博客网 时间:2024/06/04 20:13

视频播放的实现思想与开发流程


前段时间一直在研究播发器,前前后后弄了几个月,发现了一些不错的开发框架和思想,也发现不少解决和未解决的bug。总之,希望记录下来这几个月的历程。

1.实现思路

首先,我们要拆分模块,这样做的好处有很多,可以便于分析理清思路,开发的时候利于解耦合,便于维护。一个播发器也可以往下细分,比如一个播放器有一个播放界面,用于显示视频,一个媒体控制器,用于控制视频的播放像快进,暂停,截图,声音,亮度等等

Android可以通过MediaPlayer类和SurfaceView来实现,这种方式很灵活。但是系统只支持.3pg和.mp4格式的视频(不确定,肯定支持的不多),所以这时候我引入了第三方的视频播放框架vitamio

Vitamio支大量视频格式以及协议,基本和android视频播放的方法一样所以使用很方便。也支持本地,网络加载视频(目前好像是个人免费,企业收费了)。vitamio为我们封装好了一套播放的Videoview和Mediacontroller,我们可以直接使用,但是这里我们为了更好的深入理解播放器的工作流程,我们自定义自己的播放器框架。使用vitamio有许多注意的事项在后面会介绍。

2.开发流程

大致分为四步:

  1. 自定义一个SurfaceView
  2. 创建播放服务类
  3. 创建MediaController媒体控制器和手势控制器
  4. 创建播放Activity

1.自定义一个SurfaceView

可以想象是一个容器,要播放一个视频,这个视频必须要放在一个容器里播放。为什么要使用SurfaceView做视频容器?

surfaceview的特性是可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。,多用于显示多帧数的图片变换情况,所以游戏开发和视频播放中多用到SurfaceView。

我们也可以通过surfaceview很好的控制视频尺寸和屏幕的适配。

2.创建播放服务类

创建一个服务service用于控制视频播放的状态。

为什么要在service里控制视频的状态?在activity里不是也可以么?
因为service作为后台服务,不容易被系统杀死,在意外退出的情况下,也可以保存视频的一些状态,使得activity里代码不臃肿,实现与MediaPlayer的解耦,便于维护。

3.创建MediaController媒体控制器和手势控制器

通过定义这两个控制器让用户控制视频的状态。实现原理是定义了一个界面和一组按钮,用户通过手势或者按钮传递信息给MediaController,MediaController在调用上面定义的服务去控制MediaPlayer的播放,暂停等等。

4.创建播放Activity

用于绑定播放服务,实现媒体控制器和surface的接口,加载视频,等等,有着视频播放的骨架的作用。

用户与视频交互的大致流程:

用户——>MediaController——>Activity——>PlayService——>MediaPlayer

1 0
原创粉丝点击