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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


        转载请注明出处http://blog.youkuaiyun.com/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() 是否正在加载视频
getBufferPercen
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值