本我的项目由 RTE 开发者社区 x 小红书 联结经营
播放器最后呈现在 19 世纪,过后次要用于播放音频,例如通过留声机播放唱片。
随着技术的提高,音频播放器不断改进,品质越来越好,体积也越来越小。到了明天,通过手机或网络,人们能够随时随地播放音频和视频。
优良的播放器有几个个性:须要提供弱小、可扩大的性能,晦涩的播放成果,顺畅的用户体验,兼容支流平台,资源占用小,安全性高。而市面上大多数播放器在兼容性、性能、性能、可定制性等方面还有肯定的优化空间,这也是很多开发者 / 公司抉择自主开发播放器的起因之一。
基于此,小红书 自主研发了一款跨平台播放器 —— REDPlayer。不同于行业其余播放器,REDPlayer 具备构造简略、耦合度低、性能边界清晰等特点,提供了多种接入形式,技术人员可依据须要灵便抉择,既可疾速集成 SDK 应用,也可基于源码进行定制开发。
REDPlayer 开源地址:https://github.com/RTE-Dev/REDPlayer
划重点:Android、iOS、HarmonyOS 等平台通通反对!如 HLS、MP4、FLV 等多种协定和格局也都反对~
对于 REDPlayer
REDPlayer 的主旨是让开发者能够疾速清晰的理解播放器的根本结构,并可依据集体需要进行简略扩大,满足不同用户的多样需要,可作为学生学习的根底工具,也可作为企业的商用平台。
(REDPlayer 架构图)
REDPlayer 反对点播、直播场景下的多种协定和格局(如 HLS、MP4、FLV 等),并可二次扩大更多协定(如 RTC 等)。每个模块均是解耦的,开发者能够依据须要挂载自定义模块,如自研解码器、渲染器等。
增加小助手微信,备注 REDPlayer 进群
和作者交换工具应用与开发的日常
性能亮点
在过来,因为代码品质、文档等问题,播放器的二次开发和定制化很艰难。REDPlayer 兼容多平台,开发者当初能够间接集成 REDPlayer,进步开发效率,节俭开发工夫,让大家更加专一于业务逻辑的开发。此外,REDPlayer 架构清晰、扩展性好,这为二次开发提供了便当,能够依据理论业务须要定制播放器的性能,晋升用户体验。
性能反对全面,升高开发成本:
- REDPlayer 同时反对多端(如:Android、iOS、HarmonyOS 等)点播、直播下的多种协定和格局(如:HLS、MP4、FLV 等);
- 反对预载、边下边播等性能,缩小等待时间,晋升播放流畅性,给用户更好的观看体验;
- 选择性反对 HDR、超分等能力;
便当的二次开发:
- 架构清晰、构造简略,各模块耦合度低且可插拔、拓展性较好,能满足不同包体积要求下的业务应用;
低成本:
- 内存占用较小、接入老本较低,可同时满足不同的场景应用(如:课堂学习、企业商用等);
用户自主性高:
- 可抉择间接依据 Interface 疾速接入 SDK 应用、也能够抉择基于 REDPlayer 代码做二次开发。开发者们能够依据本身须要抉择。
目前 REDPlayer 开源的性能反对用于创立更简单的场景,例如在播放一个视频的过程中,用户能够通过拖动进度条进行实时预览,或在观看过程中同时输出文字造成弹幕等,以丰盛整个互动场景的体验。甚至,能够通过 REDPlayer,实现将抠图后的人像与视频画面共享叠加在一起的新视频画面。
REDPlayer 集成与应用
那么如何开始集成 REDPlayer 呢?REDPlayer 反对两种模式的接入形式,即间接 SDK 接入和代码接入,上面将针对这两种形式进行一一阐明。
1、间接 SDK 接入
REDPlayer 既反对繁多 URL 的输出,也反对多 URL 的形式(JSON 形式)输出,使用者可依据本人的需要灵便抉择。
具体步骤如下:
步骤 1:
IMediaPlayer mMediaPlayer = new RedMediaPlayer(); // 创立播放器、初始化
步骤 2:
mMediaPlayer.setDataSource(mAppContext, url); // 设置 url
步骤 3:
mMediaPlayer.setEnableMediaCodec(true); // 配置播放参数 mMediaPlayer.setVideoCacheDir(cacheDir);
mMediaPlayer.setLoop(true);
...
步骤 4:
mMediaPlayer.prepareAsync(); //prepare
步骤 5:
mMediaPlayer.start(); // 开始播放,prepared 状态后调用
至此,视频曾经失常播起来了,接下来用户能够依据须要调用不同的接口(具体可见 INTERFACE 介绍)获取对应的信息或做对应的动作,如:void pause(); // 暂停播放
void stop(); // 进行播放
void reset(); // 重置播放
void release(); // 退出播放
long getCurrentPosition(); // 获取播放地位
long getDuration(); // 获取视频时长
float getSpeed(); // 获取播放速度
2、C++ 代码接入
该模块可基于上述架构图中介绍,用户选择性地接入或替换,在此暂不做具体阐明,具体可见开源工程(https://github.com/RTE-Dev/RedPlayer)。
💪写在最初
置信长期的价值,REDPlayer 将采取 分步开源、逐步演进 的形式落地。因而,咱们在 2024 年 1 月进行了第一波代码的开源:1、播放中间层代码开源(含:实例治理、接口调用等),2、REDPlayer 以 SDK 的模式开源。
将来,REDPlayer 也将继续保护迭代。二期,咱们将陆续引入 OpenCore 外围模块的自定义开发和反对鸿蒙零碎设施利用等性能,开源 OpenCore 模块代码、鸿蒙版块,进一步晋升 REDPlayer 相干能力和开发者体验。
REDPlayer 开源地址:https://github.com/RTE-Dev/REDPlayer
3 月 7 日晚间的 Dev Talk 直播中, 咱们邀请了三位深耕音视频畛域及播放器的大佬,大家能够来与 REDPlayer 的作者一起交换互动哦!
增加小助手微信,备注 REDPlayer 进群
和作者交换工具应用与开发的日常