开源播放器,音视频播放相关调研

Posted ZhangQiang-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源播放器,音视频播放相关调研相关的知识,希望对你有一定的参考价值。

最新项目需要做视频播放功能,进行了一些播放器调研,仅供参考

 

目前主要开源播放库基于ijkplayer 及ExoPlayer进行开发(以ijkplayer居多),

此次选取了github相关功能排行较高的几个功能库,包括但不限于GSYVideoPlayer  , JiaoZiVideoPlayeryjPlay , NiceVieoPlayer , dkplayer, VideoPlayerDemo 等

源码下载分析集成简便性/apk体积增加大小/可扩展性/视频支持格式,近期维护情况等方面进行了调研

如之前做过播放器相关的或者了解某些库里面有什么坑的请多多共享

 

播放需求技术点(待完善):

在线播放,离线播放,存储播放,网页播放打通

更多的视频格式解析,软解码

代码结构,可扩展性

增加的包体积

列表播放

小窗播放

跨界面播放过渡

网络监测与提示

界面统一,机型适配 

更多的功能支持(倍速,清晰度切换,广告切入,播放比例等)

缓存功能

 

 

注: 测试时使用的15种播放格式为: 1.avi/2.wmv/3.mkv/4.mp4/5.mov/6.rm/7.3gp/8.flv/9.gif/10.mpg/11.rmvb/12.swf/13.vob/14.m4v/15.m3u8

(注:爱奇艺万能播放器swf, wmv播放失败 ; 腾讯视频播放 swf ,vob失败 )

第三方调研

GSYVideoPlayer   (8.1k+)

JiaoZiVideoPlayer (8k)

yjPlay  (1.4k)

一句话描述

基于IJKPlayer和IJKPlayer(兼容系统MediaPlayer与EXOPlayer2),多功能的视频播放器;(基于Jiecao 重构)

高度自定义的视频播放器

检测列表滑动,小窗播放(不可移动),裁剪,重力感应

手势功能,WebView嵌套本地视频控件

基于exoplayer ; 可自定义UI布局,流式API, 加密,直播 ,手势 ,广告视频分辨率切换倍数播放等

apk增包大小

RawSize/DownSize

完整版增包: 13M / 12M

简版增包 4.4M / 4M (x86 + armv7)

接入工程预计增包

完整版3 M/2.5M

(基于ijk arm-v7包)

完整版增包1.2/1M

简版增包 1M / 0.8M

(不含exoplayer so包)

 

支持格式

(测试常见15中格式)

 

 

 

本地测试失败: (7种)

1.avi/2.wmv//6.rm/11.rmvb/12.swf

/13.vob;

3.mkv(无画面)

 

在线测试失败:(7种)

1.avi/2.wmv/6.rm/11.rmvb/12.swf

/13.vob;

3.mkv(无画面)

 

本地测试: (4种失败)

2.wmv /6.rm /11.rmvb/12.swf

 

在线测试失败(6种):

2.wmv /6.rm /8.flv/10.mpg

11.rmvb/12.swf

支持多种文件类型MP4,M4A,WebM,Matroska,Ogg,WAV,MP3,MPEG-TS,MPEG-PS,FLV,ADTS (AAC),Flac,M3U8,mkv 等

 

本地测试: (7种失败)

1.avi/2.wmv/6.rm/8.flv/11.rmvb/12.wsf

10.mpg(无画面)

 

在线测试失败:(七种)

1.avi/2.wmv/6.rm/8.flv/11.rmvb/12.wsf

10.mpg(无画面)

集成及使用复杂性

可根据需求集成不同平台so包

播放内核、管理器、渲染层都可以自定义替换

集成较简便,定制化较高

可切换播放内核

增包较小, 支持缓存与加密 

demo内存占用

100-200M,快速操作能及时释放内存

80-160M,快速操作内存释放稍慢

80-150M 

维护情况

近期维护(维护三年)

近期维护(维护两年)

近期维护

总体评价

功能较多,基于ijkplayer并借鉴jiecao

使用说明较为完善

缺点: 增加包体积较多

满足播放器基本需求,集成较为简便,自定义程度高

满足播放器基本需求,依赖exoplayer,不支持切换播放库

其他

支持广告插入,倍数,小窗,滤镜等扩展功能

支持倍速;WebView嵌套视频(须webview告知位置及大小)

不支持AVI视频

项目参考

支持格式: module-lite.sh ,  more.sh

项目说明: 

基础player API : 

项目说明:

入门文档 引导

入门文档 2

项目说明:GitHub

内部其他三方库

transitionseverywhere: (动画库 instead of android.transition)

videocache :缓存库

 

butterKnife :注解库

DanmakuFlameMaster(烈焰弹幕库)

Glide

leakcanary

OKhttp

videocache :缓存库

Glide

 

细节处理

是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏

音频焦点冲突时是否释放

全屏动画

工厂模式切换内核

全屏方案是取到 context-Activity 后addview

 

项目重构过,说明文档有些滞后

 

是否建议

功能较多,可参考

建议参考

不建议

 

第三方调研

NiceVieoPlayer  (1.5k)

dkplayer (0.9k)

VideoPlayerDemo (151) 

一句话描述

IjkPlayer/MediaPlayer+TextureView,支持列表,切换全屏小窗口的Android视频播放器

基于IjkPlayer的视频播放器,支持悬浮窗播放,广告播放,边播边缓存,感应全屏;列表播放;支持清晰度切换;一键切换MediaPlayer和ExoPlayer

封装bilibili播放器,自定义边下边播和缓存功能

apk增包大小

增包5.5M / 5.1M

(x86 + armv7 + arm)

增包6M/ 5.7M

(ijk: x86 + armv7 )

增包5M/ 4M

(ijk:  armv7 )

支持格式

(测试常见15中格式)

 

本地测试: (8种失败)

1.avi/2.wmv/3.mkv/6.rm//10.mpg/11.rmvb/12.swf/13.vob

 

在线测试失败(8种):

1.avi/2.wmv/3.mkv/6.rm//10.mpg/11.rmvb/12.swf/13.vob

 

本地视频解析需要完善

 

 

在线测试: (7种失败)

1.avi/2.wmv/6.rm//10.mpg/11.rmvb/12.swf/13.vob

 

本地视频解析需要完善

 

在线测试: (7种失败)

1.avi/2.wmv/6.rm//10.mpg/11.rmvb/12.swf/13.vob

3.mkv(无画面)

集成及使用复杂性

代码较为简单

代码结构较好,U播放与控制层分开扩展性较好,支持切换不同解析库

较为简单

demo内存占用

80-130M,快速操作及时释放

80-140M , 快速操作能及时释放内存

100-200M

维护情况

10个月前

近期维护(维护1.5年)

近期维护

总体评价

整体较为简单

功能较为全面,代码结构较好

(本地视频解析需要完善)

 

其他

issues问题较多

支持8.0画中画

使用了AndroidVideoCache(缓存),和DanmakuFlameMaster(弹幕)

页面交互仿抖音

项目参考

项目说明:

项目说明:

 

内部其他第三方库

 

FloatWindowPermission: 浮窗库

videocache :缓存库

DanmakuFlameMaster(烈焰弹幕库)

Glide

leakcanary

 

是否建议

不建议

建议参考

不建议

其他参考项:

Bilibili/ ijkplayer (21k+) : 基于ffmpeg ,10个月前更新

google/ExoPlayer (12k): (>Api18使用 最低支持版本4.4)  开发指南 ,开发指南2

google/UniversalMusicPlayer (10.5k) 音视频库(偏音频)

yixia/ Vitamio (5k) : 非开源. 较老,近年未更新 , 自用免费,商用收费

jjdxm_ijkplayer (1.9k) : 两年前更新, 近期未维护

VideoListDemo  (0.9k) : 两年前更新, 近期未维护

YCVideoPlayer (0.7k): demo解析错误

vlc-android:   强大的媒体格式兼容性,VLC在Windows平台上十分受欢迎

 

关于ijk不支持avi与rmvb等格式:

一般可通过自编译定制化so库解决(如下等)

ijkplayer编译so库

 IJKPlayer编译自定义SO - 入口

ijkplayer k0.8.8版本,支持解avi封装的so库

 

Android引入IjkPlayer无法播放mkv格式视频的解决方案

ijkplayer-android编译 兼容多视频格式

 

总结: 

推荐由GSYVideoPlayer  , JiaoZiVideoPlayerdkplayer,之中选择一个作为主要参考,也可寻找其他更优方案

选择一个方案后研究下ijkplayer编译so库支持更多格式及可行的优化方式; 可以根据自己的情况进行控制和裁剪.控制app包的大小,同时自定义控制支持的视频,音频格式等

 

可能的问题: 

1.webview替代方案: 可能不支持或者比原生网页慢

设置云控及白名单机制

 

2.可能出现的坑,以后要支持的产品形式,比如各种播放场景形式等(小窗,列表,画中画等) 预见性的建议

 


其他:

音视频开源框架

 

附:后续补充

 

GSYVideoPlayer 

增包比较

demo原始大小

APK / Download size

接入GSYVideoPlayer 

(含arm-v7 )

增加

项目大小: (不含exo)

 

debug

1.6M /1.3M

 

5.5M / 5M   (含exo)

4.3M / 3.9M  (不含exo)

3.9M / 3.7M

2.7M / 2.6M

(原包20.5M / 17.9M)

22.8M/20.1M

增加:2.3M/2.2M

release

1.4M /1.1M

 

4.9M / 4.4M   (含exo)

3.9M / 3.5M  (不含exo)

3.6M / 3.4M

2.6M / 2.5M

(原包: 14.6M / 12M)

17.1M/14.4M

增加:2.4M / 2.3M

 

dkplayer

增包比较

demo原始大小

APK / Download size

接入 dkplayer

(含arm-v7)(不含exo)

增加

()若加入Exo增加约1M)

项目大小: (不含exo)

 

debug

2.4M/2.1M

 

5.1M / 4.7M (含UI控制层)

5.1M/ 4.6M  (不含UI控制层)

2.7M/2.6M 

2.7M /2.5M

(原包20.5M / 17.9M)

22.7M/20M

增加:2.2M/2.1M

release

2M/1.7M

4.6M / 4.2M (含UI控制层)

4.5M / 4.1M (不含UI控制层)

2.6M / 2.5M

2.5M/ 2.4M

(原包: 14.6M / 12M)

17.1M/14.4M

增加:2.4M / 2.3M

其中: ijk单个类型so包约2.5M ;  增加exo增加约1M

UC,茄子,EX反编译调研

UC浏览器

茄子

EX

推测UC采用vitamio库(商用收费)与mediaPlayer混合方式

推测采用原生api(surfaceview+videoview/mediaPlayer)

未找到播放相关类

 

 

以上是关于开源播放器,音视频播放相关调研的主要内容,如果未能解决你的问题,请参考以下文章

ZFPlayer 播放器调用addPlayerViewToSmallFloatView开小窗播放样式错误以及无法关闭处理

开源播放器,音视频播放相关调研

视频播放技术汇总(列表播放,小窗播放,跨界面播放,播放中网络切换提示)

当用户选择要播放的新视频时关闭画中画视频

向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?

微信内置浏览器 如何小窗不全屏播放视频?