移动端开源播放器对比与选型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)

一、各播放器简述

1、ExoPlayer

ExoPlayer 是 Google 推出的开源播放器,主要是集成了Android 提供的一套解码系统来解析视频和音频,将 MediaCodec 封装地非常完善,并加入了对 DASH 和 HLS 等直播协议的支持,形成了一个性能优越,播放稳定性较好的一个开发播放器。
Github : https://github.com/google/ExoPlayer

star fork issue
20.5k 5.9k 723

跨平台特性:只支持 Android

优点:

  • 接入包体积小,1.1M
  • 护团队强大,更新速度快

缺点:

  • 不跨平台,不太适合直播
  • 可扩展性一般,视频软解接入较麻烦
  • 适合播放场景简单的项目,播放过程中无切换码流的情况

2、ijkplayer

ijkplayer 是 Bilibili 公司开源的播放器,基于 FFmpeg 开发, 支持 Android 的 MediaCodec、iOS 的 VideoToolBox 硬解码,可以实现软硬解码自由切换,同时得益于 FFmpeg 的能力,也能支持多种流媒体协议,多种音视频编码格式,具有很高的灵活性,可以定制实现自己特色的播放器。
Github : https://github.com/bilibili/ijkplayer

star fork issue
31.2k 8k 2.7k

跨平台特性:跨平台,支持 Android/iOS
优点:

  • 结构比较简单,基本以 ffplay 展开,入手相对简单
  • 包体积比 VLC 小
  • 应用比较广泛, issue 和资料比较丰富

缺点:

  • 可扩展性较差,基本上没有提供 modules 供开发者二次开发
  • 官方目前基本不维护,不更新

3、VLC

VLC 是 VideoLAN 计划所研发的工程,最早于 1996 年开始,是一个完全的跨平台播放器。VLC 的整体框架是设计成一套 module 的管理机制,将功能分类并抽象成 modules。
Github : https://github.com/videolan/vlc

star fork issue
10.5k 3.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

star fork issue
1.6k 458 /

跨平台特性:跨平台,支持 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

star fork issue
1.4k 2.7k 5

跨平台特性:跨平台,支持 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 需要购买授权