核心能力

更新时间:
复制 MD 格式

本文介绍AliPlayerKit的核心能力,包括产品定位、核心架构、组件职责、核心接口以及六大核心系统的详细说明。

产品定位

设计目标

AliPlayerKit 是一套面向业务的 低代码播放器 UI 组件 与 场景化解决方案。通过对播放器能力和 UI 交互的高度封装,帮助客户以极低的接入成本快速完成 App 播放能力建设,无需直接调用底层播放器 API,也无需自行实现复杂的播放器 UI:

设计目标

说明

低代码接入

通过少量代码即可接入完整播放场景。

多场景覆盖

覆盖点播、直播、短视频等多种播放场景。

可复用架构

通过插槽 + 策略架构,避免各业务重复建设播放器能力。

统一基座

作为所有播放器解决方案和场景化解决方案的统一基座。

跨平台对齐

Android版本共享相同架构设计理念,接口语义保持一致。

架构层级

在架构层级上,AliPlayerKit位于播放器内核之上,通过统一的UI组件体系与播放场景抽象,承载不同播放业务的共性能力:

层级

定位

模块位置

职责

组件层

播放器UI组件

PlayerKit/

提供开箱即用、可配置的播放器UI组件,覆盖基础播放与常见交互能力。

场景层

场景化解决方案

PlayerKitScenes/

围绕短剧、中长视频、直播等典型场景,提供标准化接入示例,帮助客户以少量代码快速搭建完整播放能力。

核心架构

AliPlayerKit采用「3 + 1」核心架构设计构建播放器框架:

  • 3个运行时接口:遵循MVC架构模式,实现UI展示、播放控制与数据配置的职责分层与解耦。

    • AliPlayerView:播放器UI容器(UIView子类),管理插槽布局与渲染层(View)。

    • AliPlayerController:播放控制器,管理播放状态、通知分发与策略调度(Controller)。

    • AliPlayerModel:数据模型,封装视频源、场景类型、自动播放等配置(Model)。

  • 1个全局接口:提供框架初始化与全局能力管理,是播放器框架的统一入口。

    • AliPlayerKit:负责框架初始化,并提供全局配置、日志管理、预加载等基础能力。

组件职责

组件

类型

职责

生命周期

AliPlayerKit

全局入口

全局初始化、配置管理、日志/预加载管理、版本信息。

应用级

AliPlayerView

View

UI容器、插槽宿主、全屏过渡、返回键回调。

页面级

AliPlayerController

Controller

播放控制、状态管理、通知分发、策略调度。

页面级

AliPlayerModel

Model

播放配置封装(视频源、场景类型、自动播放等)。

请求级

核心接口

每个播放器实例需要调用的核心接口:

接口

说明

[[AliPlayerController alloc] init]

创建控制器(使用默认生命周期策略)。

[[AliPlayerController alloc] initWithLifecycleStrategy:]

创建控制器(指定生命周期策略)。

[[AliPlayerModel alloc] initWithVideoSource:]

构建数据模型。

[controller configure:model]

配置播放数据。

[playerView attach:controller]

绑定控制器与视图。

[controller onResume][controller onPause]

生命周期恢复/暂停。

[playerView detach]

解绑视图。

[controller destroy]

销毁控制器,释放资源。

说明

详细API说明:各组件的完整方法列表和参数说明,请参阅API参考文档。

调用时序

核心接口的完整调用流程,涵盖从创建、绑定、播放到释放的全生命周期。

说明

完整接入步骤请参阅快速开始文档。

核心能力

插槽系统

插槽系统 将播放器 UI 拆分为独立的插槽组件,每个插槽负责界面的一部分功能,如顶部控制栏、底部进度条、封面图等。开发者可以像搭积木一样自由组合:使用默认界面快速接入,或按需替换特定组件,甚至完全自定义整个界面。

UI 组件与播放器核心彻底解耦,定制不再意味着修改源码,升级也无需担心代码冲突。不同播放场景可以复用相同的插槽组件,减少重复开发。

内置插槽类型

插槽类型

枚举值

职责

SlotTypePlayerSurface

10

播放器渲染视图层

SlotTypeGestureControl

20

手势识别和控制层

SlotTypeLandscapeHint

30

横屏提示层

SlotTypeCover

40

视频封面图层

SlotTypeCenterDisplay

50

中心展示层(加载/音量/亮度)

SlotTypePlayState

60

播放状态指示层

SlotTypeTopBar

80

顶部导航栏层

SlotTypeBottomBar

90

底部控制栏层

SlotTypeSettingMenu

100

设置菜单层

SlotTypeOptionPanel

110

选项面板层(倍速/清晰度)

插槽系统支持三个层级的可见性控制:插槽级(整体隐藏/显示)、场景级(按 SceneType 控制)、元素级(位掩码控制插槽内部子元素,如隐藏返回按钮或禁用特定手势)。还支持通过 CustomSlotType 注册自定义插槽。详情请参见插槽系统

策略系统

策略系统 将播放器的业务逻辑封装为独立的策略组件,每个策略承载一个明确的功能。策略通过 StrategyProtocol 协议定义生命周期(strategyDidStart: / strategyDidStop / strategyDidReset:),通过 StrategyManager 统一管理,每个策略的执行通过 @try/@catch 隔离,单个策略异常不影响其他策略。

内置策略

策略

类名

功能

首帧耗时监测

FirstFrameStrategy

测量准备阶段 + 渲染阶段耗时,支持 delegate 回调

卡顿检测

StutterDetectStrategy

统计卡顿次数/时长/有效播放时长,支持阈值配置

流量保护

TrafficProtectionStrategy

监控蜂窝网络状态变化,检测并通知

通过 StrategyRegistry 可注册全局默认策略工厂,每个新创建的 AliPlayerController 自动装载。业务方也可以在实例级通过 strategyManager 按需注册或注销自定义策略,无需侵入框架核心。详情请参见策略系统

通知系统

通知系统 采用 Notification Dispatcher + Delegate 模式实现组件间的完全解耦。

iOS 端通过三组独立的通知协议实现分类通知分发:

通知协议

职责

典型通知

PlayerNotificationDelegate

播放器状态与播放通知

状态变化、进度更新、首帧渲染、错误、全屏切换、清晰度切换

GestureNotificationDelegate

手势交互通知

单击、长按倍速、亮度/音量拖拽

SlotActionNotificationDelegate

插槽间操作通知

设置菜单切换、倍速面板/画质面板显示

UI 组件通过 Delegate 协议订阅关心的通知,无需持有控制器引用;控制器通过 Dispatcher 多播分发状态变化,无需关心谁在监听。基于实例粒度的通知隔离,每个 Controller 持有独立的 Dispatcher 实例,不同播放器实例的通知互不干扰。详情请参见通知系统

播放器生命周期策略

播放器生命周期策略通过PlayerLifecycleStrategy 协议对播放器实例的创建、复用、回收与销毁进行统一管理。

内置四种策略:

策略

类名

行为

适用场景

默认

DefaultLifecycleStrategy

每次获取创建新实例,回收即销毁

通用场景(默认)

单例

SingletonLifecycleStrategy

全局唯一实例,回收时保持存活

单播放器场景、列表播放

复用池

ReusePoolLifecycleStrategy

维护空闲播放器池,优先复用

短视频列表滑动场景

ID 池

IdScopedPoolLifecycleStrategy

为每个 uniqueId 维护独立实例,LRU 淘汰

预加载场景

开发者无需关心底层实现细节,只需选择合适的策略,即可在性能与资源之间取得最佳平衡。例如,短视频列表场景下使用 ReusePool 策略复用实例,可显著提升滑动流畅度和首帧速度。详情请参见播放器生命周期策略

日志系统

日志系统 提供统一的日志中心 LogHub,支持六个级别(Verbose / Debug / Info / Warn / Error / None)的过滤输出。播放器运行时的每一个关键节点都有迹可循,为问题定位和性能分析提供支持。

通过 LogObserver 协议扩展日志去向——可将日志写入文件或上报服务器,便于线上问题排查。开发阶段开启 Verbose 辅助调试,生产环境设为 Error 精简输出。

// 设置日志级别
[AliPlayerKit setLogLevel:LogLevelVerbose];
// 启用/禁用控制台日志
[AliPlayerKit enableConsoleLog:YES];

详情请参见日志系统

多视频源支持

AliPlayerKit支持多种视频源类型,推荐使用VidAuth方式,详情请参见多视频源支持

源类型

创建方法

适用场景

VidAuth

[VideoSource vidAuthSourceWithVid:playAuth:]

阿里云点播推荐方式(推荐)。

VidSts

[VideoSource vidStsSourceWithVid:accessKeyId:accessKeySecret:securityToken:region:]

阿里云STS临时凭证方式。

URL

[VideoSource urlSourceWithUrl:]

直播或简单场景。

自定义配置

自定义配置提供双层级配置机制,允许开发者在关键时机注入自定义 SDK 配置,无需修改框架源码即可完成全局或实例级的精细调参。详情请参见自定义配置

层级

注册方式

触发时机

典型场景

全局

[AliPlayerKit setOnGlobalInitBlock:]

setup 完成后(仅一次)

setOption、全局日志级别

实例

model.onPlayerConfigBlock

configure: 中 prepare 前

setConfig(缓冲/Referer)、setOption

// 全局配置
[AliPlayerKit setOnGlobalInitBlock:^{
    // 在 setup 后执行一次
}];

// 实例配置
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
    // 在 prepare 前执行,可访问底层播放器实例

本地化系统

本地化系统支持 SDK 内部所有 UI 文本的多语言切换,内置简体中文(zh-Hans)和英语(en)。

能力

接口

说明

手动切语言

[AliPlayerKit setLanguageCode:]

指定语言代码,覆盖系统语言。

跟随系统

[AliPlayerKit resetLocaleToSystemLanguage]

恢复跟随系统首选语言。

自定义翻译

[AliPlayerKit setLocaleProvider:]

注入 LocaleProvider,优先级最高。

通过 LocaleProvider 协议,宿主 App 可覆盖任意文案——Provider 返回 nil 时自动降级到 SDK 内置翻译。详情请参见多语言

全屏与防录屏

全屏过渡系统:通过FullscreenTransition协议抽象全屏进入与退出行为,默认实现 DefaultFullscreenTransition采用独立Window旋转方案。可通过playerView.fullscreenTransition注入自定义实现,以适配特殊业务场景。

防录屏能力:通过AliPlayerModel.disableScreenshot = YES启用。启用后视频渲染视图将嵌入安全容器,截屏或录屏时视频画面自动变黑,UI 控件不受影响。

预加载系统

预加载系统 通过 PlayerPreloader 协议封装播放器 SDK 的全局预加载能力,支持添加、取消、暂停和恢复预加载任务。内置 DefaultPlayerPreloader 实现,也可通过 [AliPlayerKit setPreloader:] 注入自定义实现。

场景类型

SceneType 枚举定义播放场景,影响插槽可见性配置和 UI 行为差异。详情请参见场景类型

枚举值

场景

说明

SceneTypeVOD

视频点播

默认场景,完整控制栏。

SceneTypeLive

直播

隐藏进度条等点播元素。

SceneTypeVideoList

视频列表/短视频流

精简 UI。

SceneTypeRestricted

受限播放

最小化交互。

SceneTypeMinimal

极简播放页

最少 UI 元素。