【Android】 从头搭建视频播放器(1)——概述

本文介绍了从头搭建Android视频播放器的概述,包括功能设计、基础架构、播放器布局、BaseMediaPlayer接口设计以及BaseMediaPlayerListener事件监听。核心组件包括BaseMediaPlayer、StrawMediaPlayer、PlayerController和GestureController,用于实现播放、暂停、全屏切换、SeekBar进度调节和手势控制等功能。
摘要由CSDN通过智能技术生成

【Android】 从头搭建视频播放器(1)——概述


        转载请注明出处http://blog.csdn.net/arnozhang12/article/details/48731443
 
 
        近来有做播放器方面的需求,在搭建过程中,逐渐对 Android 上面视频播放器的实现有了一些初步的了解,在此总结一下,在 Android 上面,如何从头考虑设计并最终实现一个功能完备的视频播放器。

1、功能 & 思路

        我们通常看到一个通用的播放器如下:

半屏播放器

        在点击全屏按钮或者旋转屏幕后,可以展开到全屏:

全屏播放器

        我们可以看出,一个通用的播放器有如下一些功能点:

  • 播放/暂停
  • 全屏切换
  • SeekBar 进度调节
  • 手势调节屏幕亮度/音量/播放进度
  • 屏幕旋转支持

        其中,播放器的基础功能我们可以使用系统的 MediaPlayer 或者第三方的一些 Player 实现。全屏切换可以通过更改 ScreenOrientation屏幕布局来完成。其他的手势调节可以通过 GestureDetector 来完成。屏幕旋转通过 OrientationEventListener 来实现。

2、基础设计

        有了一个大致的功能描述以及实现思路之后,我们需要设计底层的基本交互及类。经过功能提炼及交互划分,首先的模块设计如下:

基础结构设计

  • BaseMediaPlayer:定义了一个播放器应该具备的基础接口;你可以跟进这个接口再加播放器底层,来实现不同的播放器;只提供播放的接口,不提供用户 UI 交互;
  • SystemMediaPlayerImpl:继承自 BaseMediaPlayer,是基于 Android 系统 MediaPlayer 的一份实现;
  • StrawMediaPlayer:继承自 FrameLayout,是 Android 上的一个布局 View,封装了播放器的所有操作,用来进行可视化和用户 UI 交互;
  • PlayerBottomControl:播放器底部控件,用于控制播放、进度、全屏调节等;
  • MediaPlayerGestureController:播放器手势控制器,用于手势识别和相应的控制;
  • ScreenOrientationSwitcher:屏幕方向切换控制器。

        基础的模块就这么一些,其中应该还有一些用于展示屏幕亮度、声音、进度的小的 View,自己可以轻松实现,在此没有列出来。

        StrawMediaPlayer 就是我们最终提供出去的播放器控件,上层可以直接使用这个控件。

3、播放器布局

        整个 StrawMediaPlayer 的布局如下:

界面布局

        通过结合功能点进行初步设计,整个播放器层级如下:

  • FrameLayout:用于容纳所有的 View;
  • SurfaceView:用于展示视频内容;
  • LoadingLayout:在视频加载的时候,用于展示 Loading 画面;
  • TopBarControl:顶部的 Bar,用于展示视频信息、返回按钮等等;
  • PlayerBottomControl:底部的 Bar,用于展示视频控制按钮、播放进度、全屏切换等 View。

4、BaseMediaPlayer

        结合模块设计及布局划分,我们先定义 BaseMediaPlayer 应该具备的接口。必须具备的接口如下:

接口 功能
BaseMediaPlayer(context, surfaceView) 构造函数
play(videoInfo) 播放
addPlayerListener(listener) 添加播放回调 Listener
pause() 暂停
resume() 恢复播放
stop() 停止播放
seekTo(millSeconds) 跳转到某个进度播放
setVolume(volume) 调节音量
getDuration() 获取整个视频的时间,返回 ms
getCurrentPosition() 获取视频当前播放的进度,返回 ms
doDestroy() 销毁播放器,释放系统资源
isPlaying() 是否正在播放
isLoading() 是否正在加载视频
getBufferPercent() 获取视频缓冲百分比

5、BaseMediaPlayerListener

        外部有可能需要监听一系列 Player 的事件,这时候,我们需要通过 addPlayerListener 添加一个 Listener,用于捕获事件。该接口定义如下:

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值