直播
开发指南
更新时间: 2023/04/26 15:51:08
播放功能
- 首先头文件<NELivePlayer/NELivePlayerController.h>
- 使用初始化系列方法初始化播放器实例
- 监听播放器的相关通知
- 将显示图层添加到需要显示的页面上
- 设置相关的静态参数
- 调用prepareToPlay初始化视频源,等待接收prepare完成通知
- 收到prepare完成通知后,调用play进行播放(如果设置了shouldAutoplay,可以不用调用play)。
- 播放过程中根据需要设置动态参数
- 调用shutdown关闭播放器后,并将外部引用去除,资源释放后发出release通知。
释放之前一定要调用shutdown,否则资源无法释放,不要在dealloc中调用。
创建播放器实例
SDK在初始化阶段,开启内部的播放相关服务,根据URL选择最优拉流结点。
API原型
/**
* @brief 初始化播放器,输入播放文件路径
*
* @param aUrl 播放文件的路径
* @param error 初始化错误原因
*
* @return 返回播放器实例
*/
- (id)initWithContentURL:(NSURL *)aUrl
error:(NSError **)error;
/**
初始化播放器
@param aUrl 播放文件的路径
@param config URL相关的配置信息
@param error 初始化错误原因
@return 返回播放器实例
*/
- (instancetype)initWithContentURL:(NSURL *)aUrl
config:(NELPUrlConfig *)config
error:(NSError **)error;
/**
* @brief 初始化播放器,输入播放文件路径 (准备废弃)
*
* @param aUrl 播放文件的路径
* @param isNeed 是否需要内部配置audio session
* @param error 初始化错误原因
*
* @return 返回播放器实例
*/
- (id)initWithContentURL:(NSURL *)aUrl
needConfigAudioSession:(BOOL)isNeed
error:(NSError **)error;
参数说明
参数 | 类型 | 说明 |
---|---|---|
aUrl | NSURL | 拉流地址 |
config | NELPUrlConfig | URL相关的配置 |
error | NSError | 初始化失败原因 |
示例
/**(1) 导入头文件**/
#import <NELivePlayerFramework/NELivePlayerFramework.h>
/**(2) 添加声明播放器属性**/
@interface NELivePlayerController : UIViewController
@property(nonatomic, strong) NELivePlayerController *liveplayer;
@end
/**(3) 创建 NELivePlayerController 实例,并进行相关初始化工作**/
//self.url 是待播放的网络视频流或本地文件的路径
/* 方式 一 */
NSError *error = nil;
self.liveplayer = [[NELivePlayerController alloc] initWithContentURL: self.url
error: &error];
/* 方式 二 */
self.liveplayer = [[NELivePlayerController alloc] init];
NSError *error = [self.liveplayer setPlayUrl:url];
**(4) 设置播放器view的相关属性**
// 显示位置,以屏幕大小为例,用户可以根据自己的实际需求来设置view的位置和大小
screenWidth = CGRectGetWidth([UIScreen mainScreen].bounds);
screenHeight = CGRectGetHeight([UIScreen mainScreen].bounds);
self.playerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight-20)];
self.liveplayer.view.frame = self.playerView.bounds;
//添加显示层
[self.view addSubview:self.liveplayer.view];
特殊说明
如果存在拉流地址非法的问题,可能会出现初始化失败,初始化失败不会有通知进行上报,返回nil,错误原因由error带回。
播放器的相关通知
播放器的关键过程均由通知进行上报,因此在外部需要进行通知监听。
通知原型
//调用prepareToPlay后,播放器初始化视频文件完成后的消息通知。
NELP_EXTERN NSString *const NELivePlayerDidPreparedToPlayNotification;
//播放器加载状态发生改变时的消息通知。
NELP_EXTERN NSString *const NELivePlayerLoadStateChangedNotification;
//播放器播放完成或播放发生错误时的消息通知。
NELP_EXTERN NSString *const NELivePlayerPlaybackFinishedNotification;
//播放器播放状态发生改变时的消息通知。
NELP_EXTERN NSString *const NELivePlayerPlaybackStateChangedNotification;
//播放器解码器打开后的消息通知,指示硬件解码是否开启。
NELP_EXTERN NSString *const NELivePlayerHardwareDecoderOpenNotification;
//播放器第一帧视频显示时的消息通知。
NELP_EXTERN NSString *const NELivePlayerFirstVideoDisplayedNotification;
//播放器第一帧音频播放时的消息通知。
NELP_EXTERN NSString *const NELivePlayerFirstAudioDisplayedNotification;
//播放器资源释放完成时的消息通知。
NELP_EXTERN NSString *const NELivePlayerReleaseSueecssNotification;
//seek完成时的消息通知,仅适用于点播,直播不支持。
NELP_EXTERN NSString *const NELivePlayerMoviePlayerSeekCompletedNotification;
//视频码流包解析异常时的消息通知。
NELP_EXTERN NSString *const NELivePlayerVideoParseErrorNotification;
//播放过程中的Http状态信息通知。
NELP_EXTERN NSString *const NELivePlayerHttpCodeResponseNotification;
// 播放器失败重试通知
NELP_EXTERN NSString *const NELivePlayerRetryNotification;
参数说明
部分通知会携带UserInfo字典来将信息进行上报:
- 播放完成:NELivePlayerPlaybackFinishedNotification 的UserInfo字典。
UserInfo字典结构:
NELivePlayerPlaybackDidFinishReasonUserInfoKey : [NSNumber]
NELivePlayerPlaybackDidFinishErrorKey : [NSNumber]
参数 | 类型 | 说明 |
---|---|---|
NELivePlayerPlaybackDidFinishReasonUserInfoKey | NSString | 播放器播放结束原因的key |
NELivePlayerPlaybackDidFinishErrorKey | NSString | 播放器播放结束具体错误码 |
- seek完成:NELivePlayerMoviePlayerSeekCompletedNotification 的UserInfo字典。
UserInfo字典结构:
NELivePlayerMoviePlayerSeekCompletedTargetKey : [NSNumber]
NELivePlayerMoviePlayerSeekCompletedErrorKey : [NSNumber]
参数 | 类型 | 说明 |
---|---|---|
NELivePlayerMoviePlayerSeekCompletedErrorKey | NSString | seek失败时失败原因key |
NELivePlayerMoviePlayerSeekCompletedTargetKey | NSString | seek完成时的时间key |
- HTTP状态信息通知:NELivePlayerHttpCodeResponseNotification 的UserInfo字典。
UserInfo字典结构:
NELivePlayerWillAutoSwitchDefinitionInfoKey : [NELivePlayerMulitDefinitionModel]
- 播放器失败重试通知:NELivePlayerRetryNotification 的UserInfo字典。
UserInfo字典结构:
NELivePlayerPlaybackDidRetryCountKey : [NSNumber]
示例
- 监听示例
// 播放器媒体流初始化完成后触发,收到该通知表示可以开始播放
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerDidPreparedToPlay:)
name: NELivePlayerDidPreparedToPlayNotification
object: nil];
// 播放器加载状态发生变化时触发,如开始缓冲,缓冲结束
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NeLivePlayerloadStateChanged:)
name: NELivePlayerLoadStateChangedNotification
object: nil];
// 正常播放结束或播放过程中发生错误导致播放结束时触发的通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerPlayBackFinished:)
name: NELivePlayerPlaybackFinishedNotification
object: nil];
// 第一帧视频图像显示时触发的通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerFirstVideoDisplayed:)
name: NELivePlayerFirstVideoDisplayedNotification
object: nil];
// 第一帧音频播放时触发的通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerFirstAudioDisplayed:)
name: NELivePlayerFirstAudioDisplayedNotification
object: nil];
// 资源释放成功后触发的通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerReleaseSuccess:)
name: NELivePlayerReleaseSueecssNotification
object: nil];
// 视频码流解析失败时触发的通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerVideoParseError:)
name: NELivePlayerVideoParseErrorNotification
object: nil];
// seek完成通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerSeekComplete:)
name: NELivePlayerMoviePlayerSeekCompletedNotification
object: nil];
// HTTP状态通知
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(NELivePlayerHttpCodeResponse:)
name: NELivePlayerHttpCodeResponseNotification
object: nil];
- 响应示例。以带参数的通知响应示范,不带参数的请根据自定业务情景在响应方法中做相应的处理。
// 初始化完成通知响应
- (void)NELivePlayerDidPreparedToPlay:(NSNotification*)notification {
[self.livepalyer play]; //如果设置shouldAutoplay为YES,此处可以不用调用play
}
// 播放完成通知响应
- (void)NELivePlayerPlayBackFinished:(NSNotification*)notification {
NSDictionary *userInfo = [notification userInfo];
NELPMovieFinishReason reason = [userInfo[NELivePlayerPlaybackDidFinishReasonUserInfoKey] integerValue];
switch (reason) {
case NELPMovieFinishReasonPlaybackEnded: //结束
break;
case NELPMovieFinishReasonPlaybackError: //失败
{
//获取错误码
NSInteger code = [userInfo[NELivePlayerPlaybackDidFinishErrorKey] integerValue];
break;
}
}
}
//HTTP状态响应
- (void)NELivePlayerHttpCodeResponse:(NSNotification *)notification {
NSDictionary * userInfo = [notification userInfo];
NELivePlayerHttpCodeModel *codeModel = userInfo[NELivePlayerHttpCodeResponseInfoKey];
// http code: codeModel.code
// http header: codeModel.header
}
常规静态参数设置
- 设置拉流地址。(仅针对不带URL的初始化方式使用)
- 设置是否开启硬件解码,IOS 8.0以上支持硬件解码,默认为软件解码。
- 设置文件初始化完成之后是否自动播放。
- 设置播放缓冲策略。
- 设置拉流超时时间。
API原型
/**
* @brief 设置播放的url, 此接口需要在调用init或initWithNeedConfigAudioSession之后使用,调用详情请参考initWithNeedConfigAudioSession,
* 设置之后一定要调用prepareToPlay才能收到准备播放信息
*
* @param url 目标地址
*
* @return 设置的错误信息
*/
- (NSError *)setPlayUrl:(NSURL *)url;
/**
@brief 设置播放的url
@param url url
@param config url 配置
@return 设置的错误信息
*/
- (NSError *)setPlayUrl:(NSURL *)url
config:(NELPUrlConfig *)config;
/**
* @brief 设置是否开启硬件解码,仅IOS 8.0以上支持,默认不开启
*
* @param isOpen YES:硬件解码 NO:软件解码
*
* @return 无
*/
- (void)setHardwareDecoder :(BOOL)isOpen;
/**
* @brief 设置播放器初始化视频文件完成后是否自动播放,默认自动播放
*
* @param shouldAutoplay YES:自动播放 NO:手动播放
*
* @discussion 当设置为YES后,则在调用prepareToPlay初始化视频文件完成后会自动调用play方法进行播放
*
* @return 无
*/
@property(nonatomic) BOOL shouldAutoplay;
/**
* @brief 设置缓冲策略,在播放器初始化后,prepareToPlay之前调用
*
* @discussion 缓冲策略有直播低延时模式、直播流畅模式以及点播抗抖动模式,如果是直播,建议采用低延时模式或流畅模式,如果是点播或本地视频,建议采用抗抖动模式
*
* @return 无
*/
- (void)setBufferStrategy:(NELPBufferStrategy)bufferStrategy;
/**
* @brief 设置拉流超时时间,在prepareToPlay之前调用
*
* @param timeout 超时时间 (单位: 毫秒 ms 范围:0 ~ 30000ms)
*
* @return 无
*/
- (void)setPlaybackTimeout:(long)timeout;
/**
@brief 精确seek开关
@param isOpen 是否打开。默认:Y。需要在Prepare之前设置。
*/
- (void)setAccurateSeek:(BOOL)isOpen;
/**
@brief 设置重试
@param config 重试相关配置。需要在Prepare之前设置.
*/
- (void)setRetryConfig:(nullable NELPRetryConfig *)config;
参数说明
无
特殊说明
静态参数,只可以在初始化之后,播放之前进行设置,播放的过程中不可设置。
示例
/设置播放缓冲策略,直播采用低延时模式或流畅模式,点播采用抗抖动模式,具体可参见API文档
[self.liveplayer setBufferStrategy:NELPLowDelay];
//设置视频文件初始化完成后是否自动播放,默认自动播放
[self.liveplayer setShouldAutoplay:YES];
//设置是否开启硬件解码,IOS 8.0以上支持硬件解码,默认为软件解码
[self.liveplayer setHardwareDecoder:isHardware];
//设置拉流超时时间
[self.liveplayer setPlaybackTimeout:30 *1000];
点播加密视频设置
- 不提供专门的设置参数接口,原有的解密配置接口准备废弃
- 点播加密的配置和视频缓存的相关配置 通过 NELPUrlConfig 类进行设置
- 初始化阶段通过initWithUrl:Config:或者setUrl:Config:接口进行设置
- 切换视频源通过switchContentWithUrl:Config:接口进行设置
API原型
/**
初始化播放器
@param aUrl 播放文件的路径
@param config URL相关的配置信息
@param error 初始化错误原因
@return 返回播放器实例
*/
- (instancetype)initWithContentURL:(NSURL *)aUrl
config:(NELPUrlConfig *)config
error:(NSError **)error;
/**
@brief 设置播放的url
@param url url
@param config url 配置
@return 设置的错误信息
*/
- (NSError *)setPlayUrl:(NSURL *)url
config:(NELPUrlConfig *)config;
/**
@brief 播放过程中切换播放地址(扩展)
@param aUrl 待切换的播放地址
@param config 播放地址相关的配置
@return >= 0 切换成功, < 0 切换失败
*/
- (int)switchContentUrl:(NSURL *)aUrl config:(NELPUrlConfig *)config;
参数说明
- NELPUrlConfig 配置类参数说明
参数 | 类型 | 说明 |
---|---|---|
cacheConfig | NELPUrlCacheConfig | 缓存配置 |
decryptionConfig | NELPUrlDecryptionConfig | 解密配置 |
- NELPUrlDecryptionConfig 类参数说明
参数 | 类型 | 说明 |
---|---|---|
type | NELPUrlDecryptionType(只读) | 解密类型(原始密钥或者视频云服务端管理的密钥解密) |
originalKey | NSData(只读) | 原始密钥 |
transferToken | NSData(只读) | 原始密钥 |
accid | NSString(只读) | 原始密钥 |
appKey | NSString(只读) | 原始密钥 |
token | NSString(只读) | 原始密钥 |
- NELPUrlConfig 实例化方法
快速构造方法(原始密钥解密)
@param originalKey 原始密钥
@return 配置实例
*/
+ (instancetype)configWithOriginalKey:(NSData *)originalKey;
/**
快速构造方法(视频云服务端管理密钥解密)
@param transferToken transferToken
@param accid accid
@param appKey appKey
@param token token
@return 配置实例
*/
+ (instancetype)configWithTransferToken:(NSString *)transferToken
accid:(NSString *)accid
appKey:(NSString *)appKey
token:(NSString *)token;
示例
- 原始密钥解密设置
NSData *oriKeyData = [NSData data]; //原始密钥
NELPUrlConfig *urlConfig = [[NELPUrlConfig alloc] init];
urlConfig.decryptionConfig = [NELPUrlDecryptionConfig configWithOriginalKey:oriKeyData];
//初始化方式一
player = [[NELivePlayerController alloc] initWithContentURL:url
config:urlConfig
error:&error];
//初始化方式二
player = [[NELivePlayerController alloc] init];
[player setPlayUrl:url config:urlConfig];
//切换方式
[player switchContentUrl:url config:urlConfig];
- 视频云服务端负责管理密钥的视频解密
NELPUrlConfig *urlConfig = [[NELPUrlConfig alloc] init];
NSString *transferToken = @"test";
NSString *accid = @"test";
NSString *appKey = @"test";
NSString *token = @"test";
urlConfig.decryptionConfig = [NELPUrlDecryptionConfig configWithTransferToken:transferToken
accid:accid
appKey:appKey
token:token];
//初始化方式一
player = [[NELivePlayerController alloc] initWithContentURL:url
config:urlConfig
error:&error];
//初始化方式二
player = [[NELivePlayerController alloc] init];
[player setPlayUrl:url config:urlConfig];
//切换方式
[player switchContentUrl:url config:urlConfig];
特殊说明
新的解密设置接口,如果切换失败或者初始化过程中设置参数失败,会通过playerErrorCode的通知将错误带回。具体错误见头文件定义。
视频本地缓存设置
- 不提供专门的接口配置视频的本地缓存
- 视频缓存的相关配置 通过 NELPUrlConfig 类进行设置
- 初始化阶段通过initWithUrl:Config:或者setUrl:Config:接口进行设置
- 切换视频源通过switchContentWithUrl:Config:接口进行设置
- 缓存参数配置为YES时,如果指定缓存路径,则交由外部管理本地缓存,否则由SDK内部管理本地缓存
- 缓存参数配置为NO时,不进行本地缓存。
- SDK内部管理本地缓存,当播放器实例销毁或者换源时会自动清空当前缓存的文件
API原型
/**
初始化播放器
@param aUrl 播放文件的路径
@param config URL相关的配置信息
@param error 初始化错误原因
@return 返回播放器实例
*/
- (instancetype)initWithContentURL:(NSURL *)aUrl
config:(NELPUrlConfig *)config
error:(NSError **)error;
/**
@brief 设置播放的url
@param url url
@param config url 配置
@return 设置的错误信息
*/
- (NSError *)setPlayUrl:(NSURL *)url
config:(NELPUrlConfig *)config;
/**
@brief 播放过程中切换播放地址(扩展)
@param aUrl 待切换的播放地址
@param config 播放地址相关的配置
@return >= 0 切换成功, < 0 切换失败
*/
- (int)switchContentUrl:(NSURL *)aUrl config:(NELPUrlConfig *)config;
参数说明
- NELPUrlConfig 配置类参数说明
参数 | 类型 | 说明 |
---|---|---|
cacheConfig | NELPUrlCacheConfig | 缓存配置 |
decryptionConfig | NELPUrlDecryptionConfig | 解密配置 |
- NELPUrlCacheConfig 缓存配置类参数说明
参数 | 类型 | 说明 |
---|---|---|
isCache | BOOL | 是否缓存。默认:NO。 YES:开启本地缓存,如果cacheRootPath为空,内部管理,否则外部管理。 NO: 关闭本地缓存 |
cacheRootPath | NSString | 缓存路径 |
示例
NELPUrlConfig *urlConfig = [[NELPUrlConfig alloc] init];
urlConfig.cacheConfig = [[NELPUrlCacheConfig alloc] init];
urlConfig.cacheConfig.isCache = YES;
urlConfig.cacheConfig.cacheRootPath = nil;
//初始化方式一
player = [[NELivePlayerController alloc] initWithContentURL:url
config:urlConfig
error:&error];
//初始化方式二
player = [[NELivePlayerController alloc] init];
[player setPlayUrl:url config:urlConfig];
//切换方式
[player switchContentUrl:url config:urlConfig];
特殊说明
- 缓存文件路径传根路径即可,路径文件夹可以不存在。
- 缓存文件路径文件夹下会根据内部规则自动生成缓存文件和map数据文件,播放本地缓存时缺一不可
失败重试参数设置
为了避免在播放音视频媒体流时,因网络连接不稳定或者其他问题导致播放失败,建议设置自动重试参数,以提高播放成功率和用户体验。
- 针对播放器播放过程中出现的error,sdk内部根据配置会自动进行重连
- 可以配置重连的次数
- 可以配置默认两次重连的时间间隔
- 可以单独配置任意两次重连之间的时间间隔,不足的按照默认时间间隔进行重连
API原型
/**
@brief 设置重试
@param config 重试相关配置。需要在Prepare之前设置.
@discussion 在播放出错时自动进行重试配置
*/
- (void)setRetryConfig:(nullable NELPRetryConfig *)config;
参数说明
- NELPRetryConfig 配置类参数说明
参数 | 类型 | 说明 |
---|---|---|
count | NSTimeInterval | 重连次数 |
defaultIntervalS | NSTimeInterval | 两次重连之间的默认时间间隔 |
customIntervalS | NSMutableArray | 自定义重试时间间隔 |
- count: -1 表示无限重试。默认值:0
- defaultIntervalS:0 表示立即重试。默认值0
- customIntervalS:nil 表示使用默认的时间间隔。如果数组元素个数大于重试次数,取前面的重试次数个值;如果小于,后面未配置的值使用默认时间间隔。
示例
//--- init player ---//
NELPRetryConfig *retryConfig = [[NELPRetryConfig alloc] init];
retryConfig.count = 5;
retryConfig.defaultIntervalS = 3;
retryConfig.customIntervalS = @[@(2), @(1), @(4)];
[player setRetryConfig:retryConfig];
//--- prepareToPlay ---//
说明
- 重试期间会上抛重试通知NELivePlayerRetryNotification,携带的userInfo里有当前的重试次数
- 调用shutdown之后,自动停止所有的重试
视频文件初始化
- 属性设置完成后,需调用 prepareToPlay() 接口对待播放的视频文件进行初始化,初始化完成后会发
- NELivePlayerDidPreparedToPlayNotification 通知,并将 isPreparedToPlay 设置为 YES,
- 如果 shouldAutoplay 已经设置成 YES,则会自动调用 play 进行播放,
- 如果 shouldAutoplay 设置成 NO,则需要用户调用 play() 进行播放。
API原型
/**
* @brief 设置数据源,初始化视频文件为播放做准备,在播放前调用
*
* @discussion 当prepareToPlay完成时,若shouldAutoplay 为YES,则会自动调用play进行播放,
* 若shouldAutoplay为 NO,则需手动调用play进行播放
*
* @return 无
*/
- (void)prepareToPlay;
示例
[self.liveplayer prepareToPlay];
开始播放
若 shouldAutoplay 设置成NO,则在调用 prepareToPlay() 接口后,需要调用 play() 进行播放
API原型
/**
* @brief 开始播放
*
* @discussion
* 如果当前正在播放,则调用该方法将无效果\\\n
* 此时播放器状态为: NELPMoviePlaybackStatePlaying
*
* @return 无
*/
- (void)play;
示例
[self.liveplayer play];
销毁播放器实例
- 反初始化:释放底层播放器资源。释放完成后会发送NELivePlayerReleaseSueecssNotification通知。
API原型
/**
* @brief 停止播放,并释放播放器相关资源
*
* @discussion
* 在播放器退出时,需要调用该方法用于释放资源。
*
* @return 无
*/
- (void)shutdown;
示例
[self.liveplayer shutdown];
self.liveplayer = nil;
特殊说明
- 只有在释放播放器资源时使用,调用之后,务必将外部内存引用置空,播放器资源释放完毕之后会发送NELivePlayerReleaseSueecssNotification通知。
- 为安全起见,在与switchWithContentUrl接口混合调用时,请务必注意时序问题,保持串行。
- 要等待收到资源释放成功的消息通知后,才能将监听资源释放状态的监听器释放掉,否则资源释放成功的通知是无法接收到的。
- 不会阻塞主线程,可以在主线程里调用
点播加密视频的静态参数设置(已废弃)
2.3.0 后该接口废弃
- 仅针对FLV点播的加密视频, 直播流和非FLV点播视频忽略该步骤
- 密钥未知,使用flv的密钥的获取和验证接口,设置信息。
- 密钥已知,使用flv的验证接口,设置信息。
API原型
- 未知密钥的设置接口
/**
* @brief 解密模块初始化,并校验密钥是否正确
*
* @param transferToken 获取密钥的令牌
* @param accid 视频云用户创建的其子用户id
* @param appKey 开发者平台分配的AppKey
* @param token 视频云用户子用户的token
* @param complete 异步返回密钥检测结果
*
* @discussion 该接口不可与setDecryptionKey同时使用
*
* @return ret 返回密钥检测的状态
*/
- (void)setDecryptionTransferToken:(NSString *)transferToken
accid:(NSString *)accid
appKey:(NSString *)appKey
token:(NSString *)token
complete:(void(^)(NELPKeyCheckResult ret))complete;
- 已知密钥的设置接口
/**
* @brief 设置flv加密视频解密所需的密钥,在已知密钥的情况下可以调用该接口进行解密
*
* @param key 密钥
* @param complete 异步返回密钥检测结果
*
* @discussion 该接口不可与initDecryption接口同时使用, 在prepareToPlay前调用
* @return ret 返回密钥检测的状态。不需要调用par
*/
- (void)setDecryptionKey:(NSString *)key
complete:(void(^)(NELPKeyCheckResult ret))complete;
参数说明
参数 | 类型 | 说明 |
---|---|---|
transferToken | NSString | 获取密钥的令牌 |
accid | NSString | 视频云用户创建的其子用户id |
appKey | NSString | 开发者平台分配的AppKey |
token | NSString | 视频云用户子用户的token |
complete | NSError | 异步返回密钥检测结果 |
示例
NSString *transferToken = @"test";
NSString *accid = @"test";
NSString *appKey = @"test";
NSString *token = @"test";
__weak typeof(self) weakSelf = self;
[self.liveplayer setDecryptionTransferToken: transferToken
accid: accid
appKey: appKey
token: token
complete: ^(NELPKeyCheckResult ret) {
switch (ret) {
case NELP_NO_ENCRYPTION:
case NELP_ENCRYPTION_CHECK_OK:
[weakSelf.liveplayer prepareToPlay];
break;
case NELP_ENCRYPTION_UNSUPPORT_PROTOCAL:
break;
case NELP_ENCRYPTION_KEY_CHECK_ERROR:
break;
case NELP_ENCRYPTION_INPUT_INVALIED:
break;
case NELP_ENCRYPTION_UNKNOWN_ERROR:
break;
case NELP_ENCRYPTION_GET_KEY_TIMEOUT:
break;
default:
break;
}
}];
NSString *key = @"test";
__weak typeof(self) weakSelf = self;
[self.liveplayer setDecryptionKey: key
complete: ^(NELPKeyCheckResult ret) {
switch (ret) {
case NELP_NO_ENCRYPTION:
case NELP_ENCRYPTION_CHECK_OK:
[weakSelf.liveplayer prepareToPlay];
break;
case NELP_ENCRYPTION_UNSUPPORT_PROTOCAL:
break;
case NELP_ENCRYPTION_KEY_CHECK_ERROR:
break;
case NELP_ENCRYPTION_INPUT_INVALIED:
break;
case NELP_ENCRYPTION_UNKNOWN_ERROR:
break;
case NELP_ENCRYPTION_GET_KEY_TIMEOUT:
break;
default:
break;
}
}];
特殊说明
- 回调返回的是校验后的结果,用户需要根据返回的结果作出相应的操作,对于未加密和密钥校验正确的flv加密视频,可以继续进行下述步骤进行播放,其他情况需要根据不同的错误类型,检查出错原因,并重复上述操作,直至校验通过才能正常播放。
此文档是否对你有帮助?
有帮助
我要吐槽