一、各播放器简述
1、ExoPlayer
ExoPlayer 是 Google 推出的开源播放器,重要是集成了Android 提供的一套解码体系来解析视频和音频,将 MediaCodec 封装地非常美满,并参加了对 DASH 和 HLS 等直播协议的支持,形成了一个性能精良,播放稳定性较好的一个开发播放器。
Github : https://github.com/google/ExoPlayer
starforkissue20.5k5.9k723 跨平台特性:只支持 Android
优点:
缺点:
- 不跨平台,不太适合直播
- 可扩展性一样平常,视频软解接入较麻烦
- 适合播放场景简单的项目,播放过程中无切换码流的环境
2、ijkplayer
ijkplayer 是 Bilibili 公司开源的播放器,基于 FFmpeg 开发, 支持 Android 的 MediaCodec、iOS 的 VideoToolBox 硬解码,可以实现软硬解码自由切换,同时得益于 FFmpeg 的能力,也能支持多种流媒体协议,多种音视频编码格式,具有很高的灵活性,可以定制实现本身特色的播放器。
Github : https://github.com/bilibili/ijkplayer
starforkissue31.2k8k2.7k 跨平台特性:跨平台,支持 Android/iOS
优点:
- 结构比较简单,根本以 ffplay 展开,入手相对简单
- 包体积比 VLC 小
- 应用比较广泛, issue 和资料比较丰富
缺点:
- 可扩展性较差,根本上没有提供 modules 供开发者二次开发
- 官方现在根本不维护,不更新
3、VLC
VLC 是 VideoLAN 计划所研发的工程,最早于 1996 年开始,是一个完全的跨平台播放器。VLC 的团体框架是计划成一套 module 的管理机制,将功能分类并抽象成 modules。
Github : https://github.com/videolan/vlc
starforkissue10.5k3.3k/ 跨平台特性:跨平台,支持 Android/iOS/MacOS/Windows/Linux/BSD/Haiku
优点:
- 跨平台,兼容性好
- 功能全面,支持 rtsp、rtmp、ftp、http、https 等协议
- 代码完全解耦,modules 相互独立,不影响,引入新 modules 方便
- 维护团队强大,更新频仍
缺点:
- Android 平台编译出的包较大,有 16M 左右;
- 在 Android 平台上可能存在性能问题,必要优化
4、GStreamer
GStreamer 是一个跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步调串联起来,到达预期的结果。每个步调通过元素(Element)基于GObject对象体系通过插件(plugins)的方式实现,方便了各项功能的扩展。
Github :https://github.com/GStreamer/gstreamer
starforkissue1.6k458/ 跨平台特性:跨平台,支持 Android/iOS/Windows/Linux
优点:
- GStreamer 框架是基于插件的,它的可插入组件可以或许很方便的接入到恣意的管道当中
- 结构清晰,具有灵活的可扩展性:所有的 GStreamer 对象都可以采用 GObject 继续的方法举行扩展,所有的插件都可以被动态装载。
缺点:
5、SmarterPlayer
SmarterPlayer 是大牛直播出品的业内为数不多致力于极致体验的超强全自研跨平台流媒体内核,通过模块化自由组合,支持实时 RTMP/RTSP 推流、RTMP/RTSP 播放器、录像、多路流媒体转发、音视频导播、动态视频合成、音频混音、直播互动、内置轻量级 RTSP 服务等,比快更快,业界真正靠谱的超低耽误直播 SDK(1 秒内,低耽误模式下 200~400ms)。
Github : https://github.com/daniulive/SmarterStreaming
starforkissue1.4k2.7k5 跨平台特性:跨平台,支持 Android/iOS/Windows/Linux
优点:
- 支持多种常见的流媒体协议,例如 HLS、RTMP、FLV 等
- 提供了多种播放器皮肤和自界说选项
- 支持 P2P 网络协议,可以实现点播和直播功能
缺点:
- SmartPlayer 是商业软件,必要购买授权才气利用
- 在某些特定的硬件和软件平台上可能存在兼容性问题
二、播放器选型结论
在选型上我个人比较倾向于选择 ijkplayer,理由如下:
- ijkplayer 基于 ffmpeg,软解结果非常好,可以配置想要支持的协议,项目本身也利用 ffmpeg ,可以复用,新增的包体积较小
- ijkplayer 移动端跨平台,满足双端需求,并且支持 Android 的 MediaCodec、iOS 的 VideoToolBox 硬解码,可以实现软硬解码自由切换
- ijkplayer 相对简单,资料比较丰富,入手相对较快
- 针对官方不更新的问题,长远来看,可以基于 ijkplayer 渐渐演化迭代改造成本身的播放器
不选择其他的原因:
- VLC 为了兼容所有的平台,有些库选择的不是非常公道,导致 Android 平台编出来的包很大
- VLC 代码虽然高度解耦,但是用到了许多不常见的库,学习成本较大
- ExoPlayer 只支持 Android
- GStreamer 利用起来复杂,包体积大
- SmarterPlayer 必要购买授权
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |