You need to enable JavaScript to run this app.
视频点播

视频点播

复制全文
进阶功能
License 校验
复制全文
License 校验

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

获取 License

您需要在视频点播控制台购买 License、绑定 License 与应用以及下载 License 文件,具体操作请见应用管理

配置 License

参考以下示例代码在初始化播放器 SDK 时配置 License:

#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,请注意这两个 SDK 都需要设置 License。下方的示例代码展示了如何同时设置点播和直播 License。您需要执行两次初始化代码,每次指定不同的 licenseNamebizType

// 点播的 License 文件。请务必将 "vod.lic" 替换成实际的 License 文件名称
NSString *vodLicenseName = @"vod.lic";
// 直播的 License 文件。请务必将 "live.lic" 替换成实际的 License 文件名称
NSString *liveLicenseName = @"live.lic";

TTSDKConfiguration *configVod = [TTSDKConfiguration defaultConfigurationWithAppID:appIdVod licenseName:vodLicenseName];
configVod.bizType = TTSDKServiceBizType_Vod;
[TTSDKManager startWithConfiguration:configVod];

TTSDKConfiguration *configLive = [TTSDKConfiguration defaultConfigurationWithAppID:appIdLive licenseName:liveLicenseName];
configLive.bizType = TTSDKServiceBizType_Live;
[TTSDKManager startWithConfiguration:configLive];

判断 License 状态

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

状态码

SDK 中常量定义

说明

0

TTLicenseStatusInvalid

  • License 文件非法,或被篡改。
  • 未添加 License,或路径设置错误。

1

TTLicenseStatusOK

License 鉴权通过。

2

TTLicenseStatusExpired

License 已过期。

401

TTLicenseStatusParamErrorPackageName

当前应用包名与购买 License 时填写的包名不符。

402

TTLicenseStatusParamErrorFeatureName

  • License 中不包含该增值服务。
  • 增值服务名错误。

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
成功续期或变更后,您将获得新的 License 文件。此文件会有所变动,但 UrlLicenseID 仍然保持原样。你需要及时在 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。

最近更新时间:2025.04.10 13:46:40
这个页面对您有帮助吗?
有用
有用
无用
无用