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版本:

综合比较各个播放器之间的优劣,我们得出:拿来使用,吸收内功,更新迭代,推陈出新

android ijkplayer使用_Ijkplayer、ExoPlayer、VLC播放器综合比较相关推荐

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

    VLC Media Player VLC 是VideoLAN 计划所研发的工程,最早预1996年开始,是一个完全的跨平台播放器,适合Windows.Mac OS.Linux.Android.iOS等系 ...

  2. VLC播放器Demo(录像,截图等功能),Android播放器Demo可二次开发。ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发。

    VLC播放器Demo(录像,截图等功能),可二次开发. ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发. 如果帮助的到了您,请您不要吝啬你的Star,先谢谢 ...

  3. android vlc rtsp卡顿,VLC播放器 RTSP 卡顿解决

    之前写过一篇关于在Linux平台上编译android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg.而且这款播放器还支持RTSP协议,这个 ...

  4. mac 编译android vlc,VLC 播放器已全面适配苹果 M1 Mac

    原标题:VLC 播放器已全面适配苹果 M1 Mac IT之家1月19日消息 外媒 9to5 Mac 报道,VLC 是最受欢迎的多平台媒体播放器之一,其 macOS 版本今天进行重大更新,全面支持苹果 ...

  5. GSYVideoPlayer(基于ijkplayer)之rtmp协议播放器的简单应用

    基于ijkplayer的GSYVideoPlayer rtmp协议播放器的简单应用 **添加依赖** **Manifest配置** **Layout布局** activity_start.xml ac ...

  6. ExoPlayer修改播放器UI

    旧项目中使用ExoPlayer来播放音乐,记录一下ExoPlayer修改播放器UI- 思路:原理比较简单,采用资源替换的方式. 荔枝:项目中采用com.google.android.exoplayer ...

  7. Android 直播 直播测试拉流播放器和地址

    Android 直播 直播测试拉流播放器和地址 直播拉流播放器 直播拉流测试地址 测试类抖音视频 直播拉流播放器 推荐VLC 直播拉流测试地址 香港财经 *****:rtmp://202.69.69. ...

  8. FFmpeg入门详解之6:VLC播放器简介

    VLC播放器        VLC支持多种常见音视频格式,支持多种流媒体传输协议,也可当做本地流媒体服务器使用,功能十分强大. 官网下载地址:https://www.videolan.org/ VLC ...

  9. VLC播放器下载链接

    VLC播放器:这款视频播放器可以播放从 DivX 到 MP3 到 Ogg 到 VCD 到 DVD 等几乎任何内容.谁说开源没有乐趣的?;-) http://www.videolan.org/vlc/ ...

最新文章

  1. 关于vscode的插件配置
  2. 开课吧python课程-开课吧的python课程怎么样,值得报名吗?
  3. MVC:开发模式及其优缺点
  4. flink 自定义 窗口_《从0到1学习Flink》—— Flink Data transformation(转换)
  5. 响应式编程RxJava (一)
  6. android 理解Fragment生命周期
  7. 手机网页(WAP)页面上的输入框默认键盘类型
  8. java实验四——找鞍点
  9. 343. 整数拆分 golang 动态规划
  10. 史上速度最快!DNS 公共服务 1.1.1.1 正式发布
  11. ACM_栈的压入、弹出序列
  12. js系列:时间格式转成时间戳和比较某个时段是否在另一个时间段内
  13. input 输入法禁用
  14. MySQL:互联网公司常用分库分表方案汇总
  15. 网站不收录怎么办?网站SEO优化工具
  16. Adobe Photoshop Lightroom 5.7.1
  17. 调出软键盘 挤掉标题栏咋办
  18. java 验证手机号
  19. 教师资格证作文素材---------------背背背。。。
  20. springBoot整合mybatis步骤

热门文章

  1. R语言polygon函数绘制多边形实战
  2. 深度学习时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战
  3. 清华大学王玉计算机,王玉珏(清华大学环境学院教授)_百度百科
  4. 我国计算机通信技术现状及未来的发展趋势,我国计算机通信技术现状及未来的发展趋势...
  5. python笔记4(矩阵和随机数 matplotlib绘图基础散点图折线图柱状图)
  6. 【英文文本分类实战】之三——数据清洗
  7. 人群密度估计--Crowd Counting Via Scale-adaptive Convolutional Nerual Network
  8. SPP-Net 是怎么让 CNN 实现输入任意尺寸图像的?
  9. 【python】【h5py】TypeError: Can‘t convert element to hsize_t
  10. Java报错解决:org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closi