android ijkplayer使用_Ijkplayer、ExoPlayer、VLC播放器综合比较
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播放器综合比较相关推荐
- Ijkplayer、ExoPlayer、VLC播放器综合比较
VLC Media Player VLC 是VideoLAN 计划所研发的工程,最早预1996年开始,是一个完全的跨平台播放器,适合Windows.Mac OS.Linux.Android.iOS等系 ...
- VLC播放器Demo(录像,截图等功能),Android播放器Demo可二次开发。ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发。
VLC播放器Demo(录像,截图等功能),可二次开发. ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发. 如果帮助的到了您,请您不要吝啬你的Star,先谢谢 ...
- android vlc rtsp卡顿,VLC播放器 RTSP 卡顿解决
之前写过一篇关于在Linux平台上编译android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg.而且这款播放器还支持RTSP协议,这个 ...
- mac 编译android vlc,VLC 播放器已全面适配苹果 M1 Mac
原标题:VLC 播放器已全面适配苹果 M1 Mac IT之家1月19日消息 外媒 9to5 Mac 报道,VLC 是最受欢迎的多平台媒体播放器之一,其 macOS 版本今天进行重大更新,全面支持苹果 ...
- GSYVideoPlayer(基于ijkplayer)之rtmp协议播放器的简单应用
基于ijkplayer的GSYVideoPlayer rtmp协议播放器的简单应用 **添加依赖** **Manifest配置** **Layout布局** activity_start.xml ac ...
- ExoPlayer修改播放器UI
旧项目中使用ExoPlayer来播放音乐,记录一下ExoPlayer修改播放器UI- 思路:原理比较简单,采用资源替换的方式. 荔枝:项目中采用com.google.android.exoplayer ...
- Android 直播 直播测试拉流播放器和地址
Android 直播 直播测试拉流播放器和地址 直播拉流播放器 直播拉流测试地址 测试类抖音视频 直播拉流播放器 推荐VLC 直播拉流测试地址 香港财经 *****:rtmp://202.69.69. ...
- FFmpeg入门详解之6:VLC播放器简介
VLC播放器 VLC支持多种常见音视频格式,支持多种流媒体传输协议,也可当做本地流媒体服务器使用,功能十分强大. 官网下载地址:https://www.videolan.org/ VLC ...
- VLC播放器下载链接
VLC播放器:这款视频播放器可以播放从 DivX 到 MP3 到 Ogg 到 VCD 到 DVD 等几乎任何内容.谁说开源没有乐趣的?;-) http://www.videolan.org/vlc/ ...
最新文章
- 关于vscode的插件配置
- 开课吧python课程-开课吧的python课程怎么样,值得报名吗?
- MVC:开发模式及其优缺点
- flink 自定义 窗口_《从0到1学习Flink》—— Flink Data transformation(转换)
- 响应式编程RxJava (一)
- android 理解Fragment生命周期
- 手机网页(WAP)页面上的输入框默认键盘类型
- java实验四——找鞍点
- 343. 整数拆分 golang 动态规划
- 史上速度最快!DNS 公共服务 1.1.1.1 正式发布
- ACM_栈的压入、弹出序列
- js系列:时间格式转成时间戳和比较某个时段是否在另一个时间段内
- input 输入法禁用
- MySQL:互联网公司常用分库分表方案汇总
- 网站不收录怎么办?网站SEO优化工具
- Adobe Photoshop Lightroom 5.7.1
- 调出软键盘 挤掉标题栏咋办
- java 验证手机号
- 教师资格证作文素材---------------背背背。。。
- springBoot整合mybatis步骤
热门文章
- R语言polygon函数绘制多边形实战
- 深度学习时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战
- 清华大学王玉计算机,王玉珏(清华大学环境学院教授)_百度百科
- 我国计算机通信技术现状及未来的发展趋势,我国计算机通信技术现状及未来的发展趋势...
- python笔记4(矩阵和随机数 matplotlib绘图基础散点图折线图柱状图)
- 【英文文本分类实战】之三——数据清洗
- 人群密度估计--Crowd Counting Via Scale-adaptive Convolutional Nerual Network
- SPP-Net 是怎么让 CNN 实现输入任意尺寸图像的?
- 【python】【h5py】TypeError: Can‘t convert element to hsize_t
- Java报错解决:org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closi