13.视频播放器如何选择.md 5.3 KB

13.视频播放器如何选择

目录介绍

  • 01.目前流行的视频框架
  • 02.Android原生VideoView
  • 03.Google的ExoPlayer
  • 04.Vitamio视频播放框架
  • 05.B站的框架ijkplayer

01.目前流行的视频框架

  • 1.Android原生VideoView
  • 2.Google 开源视频播放框架 ExoPlayer
  • 3.Vitamio 视频播放框架
  • 4.Bilibili 开源视频播放框架ijkplayer

02.Android原生VideoView

  • VideoView 的使用非常简单,播放视频的步骤:
    • 在界面布局文件中定义 VideoView 组件,或在程序中创建 VideoView 组件
    • 调用 VideoView 的如下两个方法来加载指定的视频:
      • setVidePath(String path):加载 path 文件代表的视频
      • setVideoURI(Uri uri):加载 uri 所对应的视频
    • 调用 VideoView 的 start()、stop()、psuse() 方法来控制视频的播放

03.Google的ExoPlayer

  • 框架地址
  • 用法
    • ExoPlayer 开源项目包含了 library 和 示例:
      • ExoPlayer library – 这部分是核心的库
      • Demo app – 这部分是演示怎么使用 ExoPlayer 的 Demo
    • ExoPlayer 库的核心类是 ExoPlayer 类。该类维护了播放器的全局状态 。比如如何获取媒体数据,如何缓冲以及是怎样的编码格式。
    • ExoPlayer 基于 MediaCodec 和 AudioTrack 提供了默认的音视频的 TrackRenderer 实现。所有的 renderers 都需要 SampleSource 对象,ExoPlayer 从 SampleSource 获得 media samples 用于播放。下图展示了 ExoPlayer 是如何配置组合这些组件用于播放音视频的。
    • standard-model
    • ExoPlayer 库提供了一些不同类型的 SampleSource 实例:
    • ExtractorSampleSource – 用于 MP3,M4A,WebM,MPEG-TS 和 AAC;
      • ChunkSampleSource – 用于 DASH 和平滑流的播放;
      • HlsSampleSource – 用于 HLS 播放;
    • 在 ExoPlayer 的 Dome 中使用 DemoPlayer 对 ExoPlayer 进行了封装,并提供了使用上述几种 SampleSource 构建 TrackRenderer 的 Builder。
      • SmoothStreamingRendererBuilder
      • DashRendererBuilder
      • ExtractorRendererBuilder
    • 在使用的时候我们根据不同的需求创建对应的 RendererBuilder,然后将 RendererBuilder 传递给 DemoPlayer 然后调用 DemoPlayer 的 setPlayWhenReady 方法。
  • 优缺点
    • ExoPlayer 相较于 MediaPlayer 有很多很多的优点:
      • 1,支持DASH和SmoothStreaming这两种数据格式的资源,而MediaPlayer对这两种数据格式都不支持。它还支持其它格式的数据资源,比如MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV and ADTS (AAC)等
      • 2,支持高级的HLS特性,比如能正确的处理#EXT-X-DISCONTINUITY标签
      • 3,无缝连接,合并和循环播放多媒体的能力
      • 4,和应用一起更新播放器(ExoPlayer),因为ExoPlayer是一个集成到应用APK里面的库,你可以决定你所想使用的ExoPlayer版本,并且可以随着应用的更新把ExoPlayer更新到一个最新的版本。
      • 5,较少的关于设备的特殊问题,并且在不同的Android版本和设备上很少会有不同的表现。
      • 6,在Android4.4(API level 19)以及更高的版本上支持Widevine通用加密
      • 7,为了符合你的开发需求,播放器支持自定义和扩展。其实ExoPlayer为此专门做了设计,并且允许很多组件可以被自定义的实现类替换。
      • 8,使用官方的扩展功能可以很快的集成一些第三方的库,比如IMA扩展功能通过使用互动媒体广告SDK可以很容易地将视频内容货币化(变现)
    • ExoPlayer 的缺点:
      • ExoPlayer 的音频和视频组件依赖 Android 的 MediaCodec 接口,该接口发布于 Android4.1(API 等级 16)。因此它不能工作于之前的Android 版本。
      • 在某些设备上播放音频,ExoPlayer可能会比MediaPlayer消耗更多的电量

04.Vitamio视频播放框架

  • 用法
  • Vitamio 的使用步骤:
    • 1.下载 Vitamio 库,并作为工程依赖。
    • 2.在 Activity 的 onCreate 方法中添加如下代码,初始化 Vitamio 的解码器
  • 优点
    • 强大,支持超多格式视频和网络视频播放。
    • 使用简单。调用非常简单,方便使用。
    • 其官方还给出了其他很多优点,但是个人觉得不足以成为优点。

05.B站的框架ijkplayer

  • 框架地址
  • 特点
    • HTTPS支持
    • 支持弹幕
    • 支持基本的拖动,声音、亮度调节
    • 支持边播边缓存
    • 支持视频本身自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持
    • 支持列表播放,直接添加控件为封面,列表全屏动画,视频加载速度,列表小窗口支持拖动
    • 5.0的过场效果,调整比例,多分辨率切换
    • 支持切换播放器,进度条小窗口预览
    • 其他一些小动画效果,rtsp、concat、mpeg
  • 优缺点
    • ijkplayer 最大的优点就是可以根据需要编译需要的解码器。在编译的时候通过 ln -s module-default.sh module.sh 选择要编译的解码器。ijkplayer 在 config 目录下提供了三种 module.sh 。也可自己修改 module.sh 。
    • ijkplayer 的缺点是库太大。加入项目后会大大增加你的 APP 的大小。