前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ijkplayer、ExoPlayer、VLC播放器综合比较

Ijkplayer、ExoPlayer、VLC播放器综合比较

作者头像
马上就说
发布2020-12-11 15:24:13
7.6K0
发布2020-12-11 15:24:13
举报
文章被收录于专栏:码上就说码上就说
VLC Media Player

VLC 是VideoLAN 计划所研发的工程,最早预1996年开始,是一个完全的跨平台播放器,适合Windows、Mac OS、Linux、Android、iOS等系统,目前完全的跨平台播放器很少,VLC是最受欢迎的一种播放器;目前累计下载13亿次,是真真正正的全球播放器;

VLC的整体框架是设计成一套module的管理机制,将功能分类并抽象成modules。 VLC main:player的main。初始化libVLC 并加载用户界面。 libVLCcore:libvlc的核心,抽象出了一个libvlc_instance_t 对象,提供modules的装载/卸载机制。 modules:modules提供具体的功能,比如上面的access,demux,decode就是以一个模块的形式存在。 External libraries:外部开源库。

下面将VLC中各modules串起来的流程:

优点: 1.跨平台,兼容性好; 2.功能全面,支持rtsp、rtmp、ftp、http、https等协议; 3.代码完全解耦,modules相互独立,不影响,引入新modules方便; 4.维护团队强大,更新频繁; 缺点: 1.Android平台编译出的包较大,有16M左右;

IjkPlayer

IjkPlayer 是BiliBili公司维护的一个开源工程,是基于ffmpeg开发的一个播放器软件,目前支持Android和iOS两种平台,ffmpeg是音视频领域的大山,基本上做音视频开发的根本绕不过去,所以ijkplayer采用ffmpeg作为音视频播放器的基础也是可以理解的; ffmpeg中提供了ffplay 和 SDL(Simple DirectMedia Layer) 功能模块,是ffmpeg 视频播放的集大成;整个ijkplayer就是以ffplay为基础展开的;

IjkPlayer的架构以FFplay为核心,FFplay基于FFmpeg,FFmpeg具备强大的扩展性,所以Ijkplayer的拓展能力主要是FFmpeg的拓展能力; IjkPlayer的整体流程比较清晰;主要的流程如下:

优点: 1.ijkplayer结构比较简单,基本以ffplay展开,开发难度较小; 2.ijkplayer包比VLC小一点,经过裁剪,约为4.2M左右; 缺点: 1.ijkplayer可扩展性较差,基本上没有提供modules供开发者二次开发; 2.ijkplayer 官方维护力度小,版本更新很慢;

ExoPlayer

ExoPlayer 是google推出的开源播放器,主要是集成了Android 提供的一套解码系统来解析视频和音频,将MediaCodec封装地非常完善,形成了一个性能优越,播放稳定性较好的一个开发播放器,目前主要用于Youtube项目;由于Google的大力推广,目前非常流行,ExoPlayer包大小轻便,接入简单; 优点: 1.接入包小,1.1M; 2.维护团队强大,更新速度快; 缺点: 1.不太适合直播; 2.视频解码无法接入软解,可扩展性一般; 3.适合播放场景简单的项目,播放过程中无切换码流的情况;


ExoPlayer 会替代MediaPlayer成为Android平台上的默认播放器吗? 不会,两个原因:

  • Android 5.0 之后Android的Codec架构做了依次重大调整,放弃了AwesomePlayer ,使用NuPlayer架构,ExoPlayer 没有做过多的兼容;
  • ExoPlayer 目前还是一个小而轻的播放器,如果要合成到系统中,它需要调整的东西太多,代码量会变得很繁杂,很可能得不偿失;
综合分析

对于Android 团队在播放器选型这一块,我觉得根据情况选择ijkplayer或者exoplayer;

  • 如果你的播放场景比较简单,播放的视频源比较单一,例如短视频,建议选择exoplayer;
  • 如果你的播放场景比较复杂,有直播场景,特别是涉及到播放过程中码流的切换,还是选择ijkplayer;

为什么不选择VLC? 1.VLC 为了兼容所有的平台,有些库选择的不是非常合理,导致Android平台编出来的包很大; 2.VLC代码虽然高度解耦,但是用到了很多不常见的库,学习成本较大;

为什么直播过程中切换码流会导致花屏问题?

这儿我简单阐述一下,因为ExoPlayer主要是采用硬解码和系统提供的部分软解码,软解码非常有限,我们知道硬解码是通过GPU工作的,提供相应的GPU指令来操作GPU实现解码的功能;

我们初始化播放器的时候,就会根据当前的视频格式来初始化MediaCodec,然后底层OMX调用对应的GPU指令工作;如果直播过程中存在切换码流的请求,对于ExoPlayer而言,就要重新初始化一个新的MediaCodec实例,这时候会触发GPU重新生成一个dev node,在这个过程中不会平滑执行的,存在花屏的情况;

而软解码是通过CPU工作的,我们将运算矩阵送入CPU计算,得到相应的原始数据,这个过程中,只是包含计算,不需要操作底层的dev node,整体的执行不存在中断的可能;所以不会存在花屏;

关于播放器的几点建议:

1.如果已知的播放场景比较简单,例如小视频场景,都是mp4视频(h264/aac格式),强烈建议使用ExoPlayer,没有比这更适合的; 2.涉及到多种视频交互形式,直播、长视频等,还是建议引入软件的形式; 3.如果Android平台不介意包大小,推荐使用VLC,VLC更新频繁,官方维护相当给力;如果比较关注包大小,建议选择ijkplayer,ijkplayer目前的缺点是维护的不那么勤了; 4.长远来看,国内很多播放器都从接入ijkplayer开始,逐渐演化,去掉不适合自己产品的代码,引入自己需要的module,渐渐变成自己的播放器;

下面看看七牛播放器的演进之路: v1.1.0版本:

综合比较各个播放器之间的优劣,我们得出:

拿来使用,吸收内功,更新迭代,推陈出新

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 音视频平凡之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • VLC Media Player
  • IjkPlayer
  • ExoPlayer
  • 综合分析
相关产品与服务
云点播
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档