解读B站跨平台播放器IJKPlayer的前世今生

2019 年 10 月 31 日

解读B站跨平台播放器IJKPlayer的前世今生

最近几年,伴随着开发人员对移动端的跨平台需要,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 的定制化工作。

具体落地过程的主要工作有:

  1. 需要重新开发播放器的 demux,以适配 DASH;

  2. 需要设计 DASH 中多 url 的传递和管理方案;

  3. 需要自研 ABR 算法,这是一个长期投入的过程;

  4. 需要改造播放器的 IO 层,以适应 DASH 音视频分开的设计。

方案上线后为我们带来了如下变化:

  1. 完全无缝的清晰度切换;

  2. 灵活的分片,缩短了清晰度切换的时间;

  3. 针对性的 ABR 算法,可以降低卡顿的发生;

  4. 音视频分开,可以在特殊场景下,节省视频的带宽开销。


InfoQ:进入到 5G 时代,您对未来音视频的发展有什么展望?


郑翰超:5G 时代,传输速度将不再是问题,高码率的传输问题将得以解决。像 VR、全景视频将不再受限于码率和分辨率,可能会迎来机会。


专家介绍:


郑翰超,现就职于 B 站移动技术部,负责移动端 IJKPlayer 播放相关工作,专注于跨平台的多媒体播放体验改善,主导了 IJKPlayer 重要功能的开发、性能优化、以及 DASH 在移动端的落地。


活动推荐:


除了郑翰超老师的分享,本次 GMTC 全球大前端技术大会(深圳站)2019 我们还设置了小程序挑战与应对、音视频技术、Serverless 实战、测试与安全、大前端工程化、Flutter 实战、新兴编程语言、团队建设与管理等热门技术专场。


2019 年 10 月 31 日 18:383090
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 59.7 次阅读, 收获喜欢 250 次。

关注

评论

发布
暂无评论
发现更多内容

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

IP网络

菜鸟小sailor 🐕

windows平台python3使用impyla连接hive问题汇总

誓约·追光者

hive python3.x Windows 10

食堂就餐卡系统设计

Geek_Albert

食堂就餐卡系统设计

关于java使用JDBC连接数据库

谷鱼

Java JDBC

oeasy教您玩转linux 010216 随机诗词 fortunezh

o

JDK15真的来了,一起来看看它的新特性

程序那些事

Java JDK15 JDK15新特性 java15新特性

甲方日常 16

句子

随笔杂谈

配置时间特性

小知识点

大数据 flink scal

第一周学习总结

Geek_Albert

升级Php Curl扩展遇到的坑

心平气和

php curl php扩展

拓扑排序就这么回事

码农田小齐

数据结构 算法 数据结构和算法

Python基础知识(二)

Python基础

Electronjs

Neil

Java Electron 前端框架 前端教程 客户端开发

网上赌博输了怎么办?上岸戒赌是唯一的选择

geeker

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

架构师训练营 - 大作业(二)

张明森

招商2020第十三届(南京)智慧城市技术与应用产品展览会

InfoQ_caf7dbb9aa8a

全屋智能2020第十三届(南京)国际智能家居展览会

InfoQ_caf7dbb9aa8a

直播倒计时|30分钟带你解锁“技术写作”新技能

小红豆

技术 写作 直播 技术创作 RTC征文大赛

架构师训练营大作业

叮叮董董

python——dict常用方法

菜鸟小sailor 🐕

架构师训练营大作业一

子豪sirius

【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

冰河

缓存 面试 引用 offer 回收

字节高级工程师告诉我,想越过开发5年的“分水岭”这样做最适合

周老师

Java 编程 程序员 架构 面试

为什么很多人不买iPhone?

北柯

Spring 5 中文解析数据存储篇-理解Spring事物抽象

青年IT男

Spring5 数据存储

快三十岁了,网上玩赌博输掉了四百万后的忏悔

geeker

网上赌博输了怎么办 赌博玩快三输了怎么回血

【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?

冰河

Java synchronized 同步 lock 锁机制

物流系统架构设计文档

莫莫大人

极客大学架构师训练营

宁静的可贵

谷鱼

宁静

快讯2020第十三届亚洲国际物联网展览会-南京站

InfoQ_caf7dbb9aa8a

解读B站跨平台播放器IJKPlayer的前世今生-InfoQ