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 的大小。