本文介绍AliPlayerKit的核心能力,包括产品定位、核心架构、组件职责、核心接口以及六大核心系统的详细说明。
产品定位
设计目标
AliPlayerKit 是一套面向业务的 低代码播放器 UI 组件 与 场景化解决方案。通过对播放器能力和 UI 交互的高度封装,帮助客户以极低的接入成本快速完成 App 播放能力建设,无需直接调用底层播放器 API,也无需自行实现复杂的播放器 UI:
设计目标 | 说明 |
低代码接入 | 通过少量代码即可接入完整播放场景。 |
多场景覆盖 | 覆盖点播、直播、短视频等多种播放场景。 |
可复用架构 | 通过插槽 + 策略架构,避免各业务重复建设播放器能力。 |
统一基座 | 作为所有播放器解决方案和场景化解决方案的统一基座。 |
跨平台对齐 | 与Android版本共享相同架构设计理念,接口语义保持一致。 |
架构层级
在架构层级上,AliPlayerKit位于播放器内核之上,通过统一的UI组件体系与播放场景抽象,承载不同播放业务的共性能力:
层级 | 定位 | 模块位置 | 职责 |
组件层 | 播放器UI组件 |
| 提供开箱即用、可配置的播放器UI组件,覆盖基础播放与常见交互能力。 |
场景层 | 场景化解决方案 |
| 围绕短剧、中长视频、直播等典型场景,提供标准化接入示例,帮助客户以少量代码快速搭建完整播放能力。 |
核心架构
AliPlayerKit采用「3 + 1」核心架构设计构建播放器框架:
3个运行时接口:遵循MVC架构模式,实现UI展示、播放控制与数据配置的职责分层与解耦。
AliPlayerView:播放器UI容器(UIView子类),管理插槽布局与渲染层(View)。AliPlayerController:播放控制器,管理播放状态、通知分发与策略调度(Controller)。AliPlayerModel:数据模型,封装视频源、场景类型、自动播放等配置(Model)。
1个全局接口:提供框架初始化与全局能力管理,是播放器框架的统一入口。
AliPlayerKit:负责框架初始化,并提供全局配置、日志管理、预加载等基础能力。
组件职责
组件 | 类型 | 职责 | 生命周期 |
| 全局入口 | 全局初始化、配置管理、日志/预加载管理、版本信息。 | 应用级 |
| View | UI容器、插槽宿主、全屏过渡、返回键回调。 | 页面级 |
| Controller | 播放控制、状态管理、通知分发、策略调度。 | 页面级 |
| Model | 播放配置封装(视频源、场景类型、自动播放等)。 | 请求级 |
核心接口
每个播放器实例需要调用的核心接口:
接口 | 说明 |
| 创建控制器(使用默认生命周期策略)。 |
| 创建控制器(指定生命周期策略)。 |
| 构建数据模型。 |
| 配置播放数据。 |
| 绑定控制器与视图。 |
| 生命周期恢复/暂停。 |
| 解绑视图。 |
| 销毁控制器,释放资源。 |
详细API说明:各组件的完整方法列表和参数说明,请参阅API参考文档。
调用时序
核心接口的完整调用流程,涵盖从创建、绑定、播放到释放的全生命周期。
完整接入步骤请参阅快速开始文档。
核心能力
插槽系统
插槽系统 将播放器 UI 拆分为独立的插槽组件,每个插槽负责界面的一部分功能,如顶部控制栏、底部进度条、封面图等。开发者可以像搭积木一样自由组合:使用默认界面快速接入,或按需替换特定组件,甚至完全自定义整个界面。
UI 组件与播放器核心彻底解耦,定制不再意味着修改源码,升级也无需担心代码冲突。不同播放场景可以复用相同的插槽组件,减少重复开发。
内置插槽类型:
插槽类型 | 枚举值 | 职责 |
| 10 | 播放器渲染视图层 |
| 20 | 手势识别和控制层 |
| 30 | 横屏提示层 |
| 40 | 视频封面图层 |
| 50 | 中心展示层(加载/音量/亮度) |
| 60 | 播放状态指示层 |
| 80 | 顶部导航栏层 |
| 90 | 底部控制栏层 |
| 100 | 设置菜单层 |
| 110 | 选项面板层(倍速/清晰度) |
插槽系统支持三个层级的可见性控制:插槽级(整体隐藏/显示)、场景级(按 SceneType 控制)、元素级(位掩码控制插槽内部子元素,如隐藏返回按钮或禁用特定手势)。还支持通过 CustomSlotType 注册自定义插槽。详情请参见插槽系统。
策略系统
策略系统 将播放器的业务逻辑封装为独立的策略组件,每个策略承载一个明确的功能。策略通过 StrategyProtocol 协议定义生命周期(strategyDidStart: / strategyDidStop / strategyDidReset:),通过 StrategyManager 统一管理,每个策略的执行通过 @try/@catch 隔离,单个策略异常不影响其他策略。
内置策略:
策略 | 类名 | 功能 |
首帧耗时监测 |
| 测量准备阶段 + 渲染阶段耗时,支持 delegate 回调 |
卡顿检测 |
| 统计卡顿次数/时长/有效播放时长,支持阈值配置 |
流量保护 |
| 监控蜂窝网络状态变化,检测并通知 |
通过 StrategyRegistry 可注册全局默认策略工厂,每个新创建的 AliPlayerController 自动装载。业务方也可以在实例级通过 strategyManager 按需注册或注销自定义策略,无需侵入框架核心。详情请参见策略系统。
通知系统
通知系统 采用 Notification Dispatcher + Delegate 模式实现组件间的完全解耦。
iOS 端通过三组独立的通知协议实现分类通知分发:
通知协议 | 职责 | 典型通知 |
| 播放器状态与播放通知 | 状态变化、进度更新、首帧渲染、错误、全屏切换、清晰度切换 |
| 手势交互通知 | 单击、长按倍速、亮度/音量拖拽 |
| 插槽间操作通知 | 设置菜单切换、倍速面板/画质面板显示 |
UI 组件通过 Delegate 协议订阅关心的通知,无需持有控制器引用;控制器通过 Dispatcher 多播分发状态变化,无需关心谁在监听。基于实例粒度的通知隔离,每个 Controller 持有独立的 Dispatcher 实例,不同播放器实例的通知互不干扰。详情请参见通知系统。
播放器生命周期策略
播放器生命周期策略通过PlayerLifecycleStrategy 协议对播放器实例的创建、复用、回收与销毁进行统一管理。
内置四种策略:
策略 | 类名 | 行为 | 适用场景 |
默认 |
| 每次获取创建新实例,回收即销毁 | 通用场景(默认) |
单例 |
| 全局唯一实例,回收时保持存活 | 单播放器场景、列表播放 |
复用池 |
| 维护空闲播放器池,优先复用 | 短视频列表滑动场景 |
ID 池 |
| 为每个 | 预加载场景 |
开发者无需关心底层实现细节,只需选择合适的策略,即可在性能与资源之间取得最佳平衡。例如,短视频列表场景下使用 ReusePool 策略复用实例,可显著提升滑动流畅度和首帧速度。详情请参见播放器生命周期策略。
日志系统
日志系统 提供统一的日志中心 LogHub,支持六个级别(Verbose / Debug / Info / Warn / Error / None)的过滤输出。播放器运行时的每一个关键节点都有迹可循,为问题定位和性能分析提供支持。
通过 LogObserver 协议扩展日志去向——可将日志写入文件或上报服务器,便于线上问题排查。开发阶段开启 Verbose 辅助调试,生产环境设为 Error 精简输出。
// 设置日志级别
[AliPlayerKit setLogLevel:LogLevelVerbose];
// 启用/禁用控制台日志
[AliPlayerKit enableConsoleLog:YES];详情请参见日志系统。
多视频源支持
AliPlayerKit支持多种视频源类型,推荐使用VidAuth方式,详情请参见多视频源支持。
源类型 | 创建方法 | 适用场景 |
VidAuth源 |
| 阿里云点播推荐方式(推荐)。 |
VidSts源 |
| 阿里云STS临时凭证方式。 |
URL源 |
| 直播或简单场景。 |
自定义配置
自定义配置提供双层级配置机制,允许开发者在关键时机注入自定义 SDK 配置,无需修改框架源码即可完成全局或实例级的精细调参。详情请参见自定义配置。
层级 | 注册方式 | 触发时机 | 典型场景 |
全局 |
|
| setOption、全局日志级别 |
实例 |
|
| setConfig(缓冲/Referer)、setOption |
// 全局配置
[AliPlayerKit setOnGlobalInitBlock:^{
// 在 setup 后执行一次
}];
// 实例配置
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
// 在 prepare 前执行,可访问底层播放器实例本地化系统
本地化系统支持 SDK 内部所有 UI 文本的多语言切换,内置简体中文(zh-Hans)和英语(en)。
能力 | 接口 | 说明 |
手动切语言 |
| 指定语言代码,覆盖系统语言。 |
跟随系统 |
| 恢复跟随系统首选语言。 |
自定义翻译 |
| 注入 |
通过 LocaleProvider 协议,宿主 App 可覆盖任意文案——Provider 返回 nil 时自动降级到 SDK 内置翻译。详情请参见多语言。
全屏与防录屏
全屏过渡系统:通过FullscreenTransition协议抽象全屏进入与退出行为,默认实现 DefaultFullscreenTransition采用独立Window旋转方案。可通过playerView.fullscreenTransition注入自定义实现,以适配特殊业务场景。
防录屏能力:通过AliPlayerModel.disableScreenshot = YES启用。启用后视频渲染视图将嵌入安全容器,截屏或录屏时视频画面自动变黑,UI 控件不受影响。
预加载系统
预加载系统 通过 PlayerPreloader 协议封装播放器 SDK 的全局预加载能力,支持添加、取消、暂停和恢复预加载任务。内置 DefaultPlayerPreloader 实现,也可通过 [AliPlayerKit setPreloader:] 注入自定义实现。
场景类型
SceneType 枚举定义播放场景,影响插槽可见性配置和 UI 行为差异。详情请参见场景类型。
枚举值 | 场景 | 说明 |
| 视频点播 | 默认场景,完整控制栏。 |
| 直播 | 隐藏进度条等点播元素。 |
| 视频列表/短视频流 | 精简 UI。 |
| 受限播放 | 最小化交互。 |
| 极简播放页 | 最少 UI 元素。 |