视频点播通过来 License 管理点播 SDK 及增值服务的有效期和权限。本文为您介绍使用 iOS 点播 SDK 时如何获取和设置 License。
您需要在视频点播控制台购买 License、绑定 License 与应用以及下载 License 文件,具体操作请见应用管理。
参考以下示例代码在初始化点播 SDK 时设置 License:
说明
详细介绍请见快速开始 > 初始化点播 SDK。
#import <TTSDK/TTSDKManager.h> // 请填入您在火山引擎视频点播控制台创建的应用的 AppID,详见[创建应用](https://www.volcengine.com/docs/4/79594)。 NSString *appId = @"YOUR_APP_ID"; // 请将火山引擎视频点播控制台获取的 License 拖动到主工程目录下 // 请务必将 "ttlicense.lic" 替换成实际的 License 文件名称 NSString *licenseName = @"ttlicense.lic"; TTSDKConfiguration *configuration = [TTSDKConfiguration defaultConfigurationWithAppID:appId licenseName:licenseName]; [TTSDKManager startWithConfiguration:configuration];
如果您同时集成点播 SDK 和直播 SDK,请注意这两个 SDK 都需要设置 License。下方的示例代码展示了如何设置直播 License。同上方的设置点播 License 的示例代码相比,可以看出点播 SDK 和直播 SDK 使用相同的 API 设置 License,但是 License 文件不同。
// 直播 SDK 的 License 文件。请务必将 "live.lic" 替换成实际的 License 文件名称 NSString *licenseName = @"live.lic"; TTSDKConfiguration *configuration = [TTSDKConfiguration defaultConfigurationWithAppID:appId licenseName:licenseName]; [TTSDKManager startWithConfiguration:configuration];
初始化点播 SDK 后,您可以根据状态码来判断当前设置的 License 的状态。Debug 状态下,你可以通过关键词 [LICENSE_LOG]
来进行过滤识别 License 相关的日志。如果 License 通过了校验,控制台会输出日志 [LICENSE_LOG]:mLicenseStatus[vod_play] == 1
。日志中的 1 对应状态码。如果输出结果不是 1,就意味着 License 校验未通过,此时可以参考状态码来判断具体失败的原因。状态码说明如下表所示:
状态码 | SDK 中常量定义 | 说明 |
---|---|---|
0 | TTLicenseStatusInvalid |
|
1 | TTLicenseStatusOK | License 鉴权通过。 |
2 | TTLicenseStatusExpired | License 已过期。 |
401 | TTLicenseStatusParamErrorPackageName | 当前应用包名与购买 License 时填写的包名不符。 |
402 | TTLicenseStatusParamErrorFeatureName |
|
403 | TTLicenseStatusParamErrorModuleName | 点播 SDK 枚举传递错误。 |
如果您需要在 License 状态变更时,在业务层进行相应的响应,可以通过 NotificationCenter
来监听相应的通知来实现。在 Notification Observer 的回调中,能够获取到 notification.userInfo
数据,用此数据可以判断 License 鉴权是否正常。示例代码如下:
// 以下是 NotificationName,需要时手动声明,SDK 内部已经赋值,只需要声明,不需要初始化赋值 FOUNDATION_EXTERN NSString * const TTLicenseNotificationLicenseDidAdd; // License 添加完成 FOUNDATION_EXTERN NSString * const TTLicenseNotificationLicenseInfoDidUpdate; // License 更新完成 // 以下是 Notification.userInfo 中的字典 Key,业务有需要时手动声明,同样 SDK 内部已经赋值,只需要声明,不需要初始化赋值 // userInfo[TTLicenseNotificationLicenseResultKey] 存放 License 的鉴权结果,对应上文中的 License 状态码 FOUNDATION_EXTERN NSString * const TTLicenseNotificationLicenseResultKey; - (void)addLicenseObserver { // 1. 通过 NotificationCenter 监听 License 添加结果 [[NSNotificationCenter defaultCenter] addObserverForName:TTLicenseNotificationLicenseDidAdd object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { NSNumber *success = [note userInfo][TTLicenseNotificationLicenseResultKey]; BOOL isSuccess = [success boolValue]; if (isSuccess) { // 鉴权成功 NSLog(@"update license successfully"); } else { // 鉴权失败 NSLog(@"failed to add license"); } }]; // 2. 通过 NotificationCenter 监听 License 更新结果 [[NSNotificationCenter defaultCenter] addObserverForName:TTLicenseNotificationLicenseInfoDidUpdate object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { NSNumber *success = [note userInfo][TTLicenseNotificationLicenseResultKey]; BOOL isSuccess = [success boolValue]; if (isSuccess) { // 鉴权成功 NSLog(@"update license successfully"); } else { // 鉴权失败 NSLog(@"failed to update license"); } }]; }
正式版 License 支持续期和变更,具体操作请见续期或变更 License。
成功续期或变更后,您将获得新的 License 文件。此文件会有所变动,但 Url
和 LicenseID
仍然保持原样。你需要及时在 App 中更新此文件,并发布新的 App 版本。
在集成阶段,参考以下示例代码开启 TTVideoEngineLog
。
#if DEBUG [TTVideoEngine setLogFlag:TTVideoEngineLogFlagAll]; #endif
开启 TTVideoEngineLog
后,如遇到鉴权失败,可能会出现以下情况:
通过 -[TTVideoEngine initWithType:]
创建播放器实例时,控制台打印 fail.license
。
如果您使用的是基础版 SDK,会自动降级为系统播放器。此时,检查 engine.isOwnPlayer
的返回值是 NO
,而如果初始化正常,该返回值应为 YES
。
使用部分功能时会报错,对应的 API 调用会在控制台打印错误日志。具体如下:
Failed, the feature is not included in license
:所购买的 License 中未包含该功能。Failed, using a standard editon which is not support this feature
:使用的基础版 License 不支持此功能。Failed, using a standard license which is not include this feature
:使用的基础版 License 不包含此功能。在不同的场景中,鉴权失败的处理方式有所不同。
在集成 SDK 阶段,如果出现播放错误,通常是由于使用问题。您可以通过监听 videoEngineDidFinish
事件,输出 error
以验证播放出错是否由鉴权失败引起。
#import <TTSDK/TTVideoEngineHeader.h> // 1. 设置 TTVideoEngine Delegate self.videoEngine.delegate = self; // 2. 实现播放结束的监听 - (void)videoEngineDidFinish:(TTVideoEngine *)videoEngine error:(nullable NSError *)error { if (error) { NSLog(@"%@", error); } }
如果 License 过期,您需要尽快续期 License,具体操作请参见续期或变更 License。
说明
建议您至少提前一个月在视频点播控制台续期 License。