You need to enable JavaScript to run this app.
导航
使用 License
最近更新时间:2023.11.16 11:41:10首次发布时间:2021.04.14 14:20:55

视频点播通过来 License 管理点播 SDK 及增值服务的有效期和权限。本文为您介绍使用 iOS 点播 SDK 时如何获取和设置 License。

获取 License

您需要在视频点播控制台购买 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]; 

判断 License 状态

初始化点播 SDK 后,您可以根据状态码来判断当前设置的 License 的状态。Debug 状态下,你可以通过关键词 [LICENSE_LOG] 来进行过滤识别 License 相关的日志。如果 License 通过了校验,控制台会输出日志 [LICENSE_LOG]:mLicenseStatus[vod_play] == 1。日志中的 1 对应状态码。如果输出结果不是 1,就意味着 License 校验未通过,此时可以参考状态码来判断具体失败的原因。状态码说明如下表所示:

状态码SDK 中常量定义说明

0

TTLicenseStatusInvalid

  • License 文件非法,或被篡改。
  • 未添加 License,或路径设置错误。
1TTLicenseStatusOKLicense 鉴权通过。
2TTLicenseStatusExpiredLicense 已过期。
401TTLicenseStatusParamErrorPackageName当前应用包名与购买 License 时填写的包名不符。

402

TTLicenseStatusParamErrorFeatureName

  • License 中不包含该增值服务。
  • 增值服务名错误。
403TTLicenseStatusParamErrorModuleName点播 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

成功续期或变更后,您将获得新的 License 文件。此文件会有所变动,但 Url 和 LicenseID 仍然保持原样。你需要及时在 App 中更新此文件,并发布新的 App 版本。

处理 License 鉴权失败

鉴权失败的表现

在集成阶段,参考以下示例代码开启 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

说明

建议您至少提前一个月在视频点播控制台续期 License。