最近几年,伴随着开发人员对移动端的跨平台需要,B 站自研的 IJKPlayer 应运而生。它是一款基于 FFmpeg 的轻量级 Android/iOS 视频播放器,具有 API 易于集成、编译配置可裁剪、支持硬件加速解码、DanmakuFlameMaster 架构清晰、简单易用等优势。作为开源项目,IJKPlayer 还支持用户根据业务类型进行定制,受到了越来越多的开发者的喜爱。那么,B 站的这一开源明星项目究竟是怎样炼成的?在开发过程中遇到过哪些技术难题?目前,经过多轮改造,堪称“IJKPlayer2.0”的新版本又有哪些突破?InfoQ 近日采访到 B 站资深开发工程师郑翰超,了解到了 IJKPlayer 的前世今生。
在即将召开的GMTC全球大前端技术大会(深圳站)2019,他也将带来《IJKPlayer的前世今生》的主题演讲。本文整理自 InfoQ 与郑翰超的采访全文。
InfoQ:请您简单介绍下自己,以及目前所负责的工作。
郑翰超:我在 2016 年加入 B 站,就职于移动技术部,现负责移动端播放器 IJKPlayer 相关优化和改造,以及新的多媒体技术探索和实现。
InfoQ:请您谈谈 B 站开源项目 IJKPlayer 的研发背景。
郑翰超:作为视频网站,B 站从创建之初就非常重视播放体验。考虑到移动端的跨平台需要,因而决定自研跨平台播放器。经过对比和选型,我们最终决定在 ffmpeg 的基础上进行开发,将 ffmpeg 作为我们的基础软件解码和解封转库,然后跨平台地实现了自定义的 IO 模块、demux 模块、渲染模块,以及播控相关。另外,我们在国内较早开始尝试硬件解码,提升了解码效率,降低了功耗,同时也实现了多种渲染模式的兼容,提供给用户优质的播放体验。
InfoQ:请您介绍下 IJKPlayer 播放器的演进历程,目前性能的优化成果有哪些?
郑翰超:IJKPlayer 自 2015 年开始研发,经过公司内部多位同事的努力,在 2016 年初上线,实现了基本播放和双端的硬件解码,并实现开源。2018 年初,IJKPlayer 经过一系列的性能优化和功能拓展达到了相对稳定的程度。目前,最新的 IJKPlayer 又经过了多轮改造,可以称为 IJKPlayer 2.0,我们针对 IO、demux 和 decode 进行了重构,完成了包括 DASH 在内的诸多重要功能,实现了性能的提升和极致的用户体验,后续将在合适的时间再次开源。
具体而言,主要性能指标包括:
1)极致的 80 分位首帧:线上用户 80 分位首帧可以达到 500ms,其中 350ms 是从发起请求到读取到第一帧的耗时。可以说,这是一个偏极致的优化,在硬解的播放器里应该算是非常极限的。
2)低卡顿率:百分钟卡顿 2.5 次左右。
3)解码失败率:因为完备的解码兼容策略,目前这个数值趋近于 0。
InfoQ:IJKPlayer 播放器与其他播放器(如 ExoPlayer、JiaoZiVideoPlayer、PLDroidPlayer 等)相比,有哪些优点?
郑翰超:这几款都是目前市面上比较优秀的播放软件。相较而言,IJKPlayer 主要在研发的侧重点上有所不同。ExoPlayer 专注于 Android,而 IJKPlayer 专注于跨平台;JiaoZiVideoPlayer 专注于多播放内核切换,方便接入者使用不同的播放内核;PLDroidPlayer 专注于完整 SDK 的开发,但它目前应该还是闭源的,用户难以定制。而 IJKPlayer 是开源的,支持用户根据业务类型进行定制。
InfoQ:当用户切换视频画质时,IJKPlayer 如何保持较高的音视频播放质量?
郑翰超:在切换视频画质时,主要应考虑如何保证视频帧的连续性。我们通过 DASH 方案的实现和对解码模块的优化,基本可以达到完全流畅的视频画质切换。
InfoQ:您在优化 IJKPlayer 的过程中,遇到过哪些技术难点?是如何解决的?
郑翰超:主要遇到的是硬件解码方面,特别是 Android 硬解的困难。一是如何提高硬解效率;二是如何解决 Android 机型差异化的问题。
对应的解决方案是:多线程的硬解方案;通过 mediacodec 相关参数的获取,以及对一些特殊硬解条件的判断,严格确定手机的硬解能力。另外,我们制定了完备的硬解 fallback 逻辑,可以做到用户无感。
InfoQ:请您谈谈 MPEG-DASH 协议在移动端的落地方案,该方案带来了哪些变化?
郑翰超:MPEG-DASH 格式是 2012 年制定完成的。之后,国外陆续有 Netflix、YouTube 等厂商跟进,而我们是国内第一家全面上线 DASH 的公司。对于移动端来说,主要的难点在于,DASH 只是一个标准,如何实现并应用到业务上是很大的挑战,我们需要将 DASH 和自身业务特点相结合,充分发挥 DASH 的优势,在这个过程中可能还需要做一些 DASH 的定制化工作。
具体落地过程的主要工作有:
需要重新开发播放器的 demux,以适配 DASH;
需要设计 DASH 中多 url 的传递和管理方案;
需要自研 ABR 算法,这是一个长期投入的过程;
需要改造播放器的 IO 层,以适应 DASH 音视频分开的设计。
方案上线后为我们带来了如下变化:
完全无缝的清晰度切换;
灵活的分片,缩短了清晰度切换的时间;
针对性的 ABR 算法,可以降低卡顿的发生;
音视频分开,可以在特殊场景下,节省视频的带宽开销。
InfoQ:进入到 5G 时代,您对未来音视频的发展有什么展望?
郑翰超:5G 时代,传输速度将不再是问题,高码率的传输问题将得以解决。像 VR、全景视频将不再受限于码率和分辨率,可能会迎来机会。
专家介绍:
郑翰超,现就职于 B 站移动技术部,负责移动端 IJKPlayer 播放相关工作,专注于跨平台的多媒体播放体验改善,主导了 IJKPlayer 重要功能的开发、性能优化、以及 DASH 在移动端的落地。
活动推荐:
除了郑翰超老师的分享,本次 GMTC 全球大前端技术大会(深圳站)2019 我们还设置了小程序挑战与应对、音视频技术、Serverless 实战、测试与安全、大前端工程化、Flutter 实战、新兴编程语言、团队建设与管理等热门技术专场。
评论