Android音视频系列

视频开发(2)- 自定义视频播放器方案

2019-01-23  本文已影响397人  前行的乌龟

ps : 临近农历过年, 我趁着这段时间帝都房源多满北京找了几天,终于在6号线屋子学院找了个便宜的房子,交通很方便,就在地铁站门口,房间虽小,但是租户少,室内设置也很全,总体很赞

闲话少说,咱们来继续视频播放器,视频播放器我看大家有一半的人选择使用开源的视频播放器,使用现成的开源播放器有个好处,使用很方便, 大家公司要是对于视频播放界面没什么要求的话,使用开源播放器最合适,集成简单,没有复杂的逻辑

但是呢,现在很多公司 UI 都对本公司视频播放器有自己的 UI 设计,有自己的独特的逻辑操作,这样我们再使用开源播放器的话就不合适了,开源的播放器修改 UI 很不方便,大家说我们可以在开源项目上改啊,是啊,我原来也是这样想的,但是我们看了好几个开源的视频播放器,类层级太多,代码难看,费解,不好改。相信大家大都不是单人开发,就算你看懂了,你的小伙伴呢,好的 app 开发要做到所有的小伙伴对每个模块设计都门清

所以呢,与其费时费力的去改开源项目,还不如自己学习下期中的思路和逻辑,自己写自己的视频播放器,播放内核都是用的 哔哩哔哩开源的 ijkmeidiaplayer ,然后自己封装逻辑层和 UI 层,这样既锻炼了自己的代码能力,也能百分百把控播放模块,才能应对产品,UI 对视频播放模块蛋疼的需求。其实我想说这才是最主要的,不是自己写的,基本都不是那么好改~


常见的视频播放器我列一下,大家可以根据这个去选择自己的学习项目:


我的学习心得

因为打算自己上视频播放器嘛,我在上面的开源项目中挑了几个学习,去看看源码

我是按照下面顺序看的

  1. Android 多媒体 -- 播放器的封装
    这是个小项目,只是简单的教大家使用 TextureView 结合系统原生的 MediaPlayer 显示视频,大家要是对这块比较熟悉了,可以跳过

  2. YCVideoPlayer
    这个项目非常好,API 简单明了,易懂,仿照系统 VideoView + MediaController 的 API,显示和控制分离,这是目前最主流的写法,后面说的百度播放 SDK 也是这个思路。

    • VideoView 作为视频播放器根容器,持有 MediaPlayer 播放核心对象和 TextureView 视频承载 view,并负责与之交互
    • MediaController 作为 UI 操作层,复杂视频播放器中所有的业务界面,把 view 提供给 VideoView ,VideoView 把 MediaController 提供的 view add 进来
      这样视频承载,播放核心,UI 逻辑3者就有效的分离开了,UI 出不同的视频播放器界面时,我们 new 不同的 MediaController 给 VideoView 就好了,VideoView 不用动了,这样才简单,API 才好看,才能方便的扩展,才能百分百支持自定义 UI 设计。不过这个库有个缺点,就是 demo 里面会报错,需要在自己说改,再列表支持方面很弱,需要自己再去研究,比如作者的库再列表 item 画出屏幕时无法停止,画出屏幕也不支持小窗播放
  3. GSYVideoPlayer
    这就是一个反面典型,视频承载,播放核心,UI 逻辑3者在 VideoView 跟容器中没有有效分离,以至于 2 个不同 UI 类型的视频播放器,作者一层套一层的来回继承封装了 10 来层,代码那是一个难看的要死,我估计作者自己理顺一遍都不是太容易了,基本没有扩展性

  4. GSYVideoPlayer 的作者在掘金上写的一偏视频播放要点的文章还是很不错,虽然这个作者自己写的视频播放器难看的要死,但是还是难挡住本篇文章的优秀

  5. 百度播放 SDK
    百度思路也是 视频承载,播放核心,UI 逻辑3者 分离,VideoView + MediaController ,但是再看 demo 时百度的 VideoView 写的很敷衍,是个半成品,VideoView 里面好多对 MediaPlayer 的逻辑居然放在 activity 去实现...... 有失大厂风范啊,回想看 美团 WMRouter 路由的 demo ,差距好大啊~

上面就是我耗时良久之后的心得,看完之后,我果断的决定跟着 YCVideoPlayer 这个项目走,也是 VideoView + MediaController

暂时先这么多,之后有我再加上~

上一篇下一篇

猜你喜欢

热点阅读