开发指南

更新时间: 2023/04/26 07:51:08

播放功能

  1. 首先头文件<NELivePlayer/NELivePlayerController.h>
  2. 使用初始化系列方法初始化播放器实例
  3. 监听播放器的相关通知
  4. 将显示图层添加到需要显示的页面上
  5. 设置相关的静态参数
  6. 调用prepareToPlay初始化视频源,等待接收prepare完成通知
  7. 收到prepare完成通知后,调用play进行播放(如果设置了shouldAutoplay,可以不用调用play)。
  8. 播放过程中根据需要设置动态参数
  9. 调用shutdown关闭播放器后,并将外部引用去除,资源释放后发出release通知。

释放之前一定要调用shutdown,否则资源无法释放,不要在dealloc中调用。

创建播放器实例

SDK在初始化阶段,开启内部的播放相关服务,根据URL选择最优拉流结点。

API原型

objc/**
 *	@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 初始化失败原因

示例

objc/**(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带回。

播放器的相关通知

播放器的关键过程均由通知进行上报,因此在外部需要进行通知监听。

通知原型

objc//调用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字典。
objcUserInfo字典结构:
	 NELivePlayerPlaybackDidFinishReasonUserInfoKey : [NSNumber]
	 NELivePlayerPlaybackDidFinishErrorKey          : [NSNumber]
参数 类型 说明
NELivePlayerPlaybackDidFinishReasonUserInfoKey NSString 播放器播放结束原因的key
NELivePlayerPlaybackDidFinishErrorKey NSString 播放器播放结束具体错误码
  • seek完成:NELivePlayerMoviePlayerSeekCompletedNotification 的UserInfo字典。
objcUserInfo字典结构:
	NELivePlayerMoviePlayerSeekCompletedTargetKey : [NSNumber]
	NELivePlayerMoviePlayerSeekCompletedErrorKey  : [NSNumber]
参数 类型 说明
NELivePlayerMoviePlayerSeekCompletedErrorKey NSString seek失败时失败原因key
NELivePlayerMoviePlayerSeekCompletedTargetKey NSString seek完成时的时间key
  • HTTP状态信息通知:NELivePlayerHttpCodeResponseNotification 的UserInfo字典。
objcUserInfo字典结构:
	NELivePlayerWillAutoSwitchDefinitionInfoKey : [NELivePlayerMulitDefinitionModel]
  • 播放器失败重试通知:NELivePlayerRetryNotification 的UserInfo字典。
objcUserInfo字典结构:
	NELivePlayerPlaybackDidRetryCountKey : [NSNumber]

示例

  • 监听示例
objc// 播放器媒体流初始化完成后触发,收到该通知表示可以开始播放
[[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];
                                               
  • 响应示例。以带参数的通知响应示范,不带参数的请根据自定业务情景在响应方法中做相应的处理。
objc// 初始化完成通知响应
- (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原型

objc/**
 *    @brief    设置播放的url, 此接口需要在调用init或initWithNeedConfigAudioSession之后使用,调用详情请参考initWithNeedConfigAudioSession,
 *              设置之后一定要调用prepareToPlay才能收到准备播放信息
 *
 *    @param     url 目标地址
 *
 *    @return    设置的错误信息
 */
- (NSError *)setPlayUrl:(NSURL *)url;
objc/**
 @brief 设置播放的url

 @param url url
 @param config url 配置
 @return 设置的错误信息
 */
- (NSError *)setPlayUrl:(NSURL *)url
                 config:(NELPUrlConfig *)config;
objc/**
 *	@brief	设置是否开启硬件解码,仅IOS 8.0以上支持,默认不开启
 *
 *  @param 	isOpen 	YES:硬件解码 NO:软件解码
 *
 *	@return	无
 */
- (void)setHardwareDecoder :(BOOL)isOpen;
objc/**
 *	@brief	设置播放器初始化视频文件完成后是否自动播放,默认自动播放
 *
 *  @param 	shouldAutoplay 	YES:自动播放 NO:手动播放
 *
 *  @discussion 当设置为YES后,则在调用prepareToPlay初始化视频文件完成后会自动调用play方法进行播放
 *
 *	@return	无
 */
@property(nonatomic) BOOL shouldAutoplay;
objc/**
 * @brief  设置缓冲策略,在播放器初始化后,prepareToPlay之前调用
 *
 * @discussion 缓冲策略有直播低延时模式、直播流畅模式以及点播抗抖动模式,如果是直播,建议采用低延时模式或流畅模式,如果是点播或本地视频,建议采用抗抖动模式
 *
 * @return 无
 */
- (void)setBufferStrategy:(NELPBufferStrategy)bufferStrategy;
objc/**
 * @brief 设置拉流超时时间,在prepareToPlay之前调用
 *
 * @param timeout 超时时间 (单位: 毫秒 ms 范围:0 ~ 30000ms)
 *
 * @return 无
 */
- (void)setPlaybackTimeout:(long)timeout;
objc/**
 @brief 精确seek开关

 @param isOpen 是否打开。默认:Y。需要在Prepare之前设置。
 */
- (void)setAccurateSeek:(BOOL)isOpen;
objc/**
 @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原型

objc/**
 初始化播放器

 @param aUrl 播放文件的路径
 @param config URL相关的配置信息
 @param error 初始化错误原因
 @return 返回播放器实例
 */
- (instancetype)initWithContentURL:(NSURL *)aUrl
                            config:(NELPUrlConfig *)config
                             error:(NSError **)error;
objc/**
 @brief 设置播放的url

 @param url url
 @param config url 配置
 @return 设置的错误信息
 */
- (NSError *)setPlayUrl:(NSURL *)url
                 config:(NELPUrlConfig *)config;
objc/**
 @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 实例化方法
objc 快速构造方法(原始密钥解密)

 @param originalKey 原始密钥
 @return 配置实例
 */
+ (instancetype)configWithOriginalKey:(NSData *)originalKey;
objc
/**
 快速构造方法(视频云服务端管理密钥解密)

 @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;

示例

  • 原始密钥解密设置
objc   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];
  • 视频云服务端负责管理密钥的视频解密
objc   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原型

objc/**
 初始化播放器

 @param aUrl 播放文件的路径
 @param config URL相关的配置信息
 @param error 初始化错误原因
 @return 返回播放器实例
 */
- (instancetype)initWithContentURL:(NSURL *)aUrl
                            config:(NELPUrlConfig *)config
                             error:(NSError **)error;
objc/**
 @brief 设置播放的url

 @param url url
 @param config url 配置
 @return 设置的错误信息
 */
- (NSError *)setPlayUrl:(NSURL *)url
                 config:(NELPUrlConfig *)config;
objc/**
 @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 缓存路径

示例

objc    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原型

objc/**
 @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 表示使用默认的时间间隔。如果数组元素个数大于重试次数,取前面的重试次数个值;如果小于,后面未配置的值使用默认时间间隔。

示例

objc
	//--- 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原型

objc/**
 *	@brief	设置数据源,初始化视频文件为播放做准备,在播放前调用
 *
 *  @discussion 当prepareToPlay完成时,若shouldAutoplay 为YES,则会自动调用play进行播放,
 *              若shouldAutoplay为 NO,则需手动调用play进行播放
 *
 *	@return	无
 */
- (void)prepareToPlay;

示例

objc[self.liveplayer prepareToPlay];

开始播放

若 shouldAutoplay 设置成NO,则在调用 prepareToPlay() 接口后,需要调用 play() 进行播放

API原型

objc/**
 *	@brief	开始播放
 *
 *  @discussion
 *  如果当前正在播放,则调用该方法将无效果\\\n
 *  此时播放器状态为: NELPMoviePlaybackStatePlaying
 *
 *	@return	无
 */
- (void)play;

示例

objc[self.liveplayer play];

销毁播放器实例

  • 反初始化:释放底层播放器资源。释放完成后会发送NELivePlayerReleaseSueecssNotification通知。

API原型

objc/**
 *	@brief	停止播放,并释放播放器相关资源
 *
 *  @discussion
 *  在播放器退出时,需要调用该方法用于释放资源。
 *
 *	@return	无
 */
- (void)shutdown;

示例

objc[self.liveplayer shutdown];
self.liveplayer = nil;

特殊说明

  • 只有在释放播放器资源时使用,调用之后,务必将外部内存引用置空,播放器资源释放完毕之后会发送NELivePlayerReleaseSueecssNotification通知。
  • 为安全起见,在与switchWithContentUrl接口混合调用时,请务必注意时序问题,保持串行。
  • 要等待收到资源释放成功的消息通知后,才能将监听资源释放状态的监听器释放掉,否则资源释放成功的通知是无法接收到的。
  • 不会阻塞主线程,可以在主线程里调用

点播加密视频的静态参数设置(已废弃)

2.3.0 后该接口废弃

  • 仅针对FLV点播的加密视频, 直播流和非FLV点播视频忽略该步骤
  • 密钥未知,使用flv的密钥的获取和验证接口,设置信息。
  • 密钥已知,使用flv的验证接口,设置信息。

API原型

  • 未知密钥的设置接口
objc/**
 * @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;
  • 已知密钥的设置接口
objc/**
 * @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 异步返回密钥检测结果

示例

objcNSString *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;
            }
        }];
objcNSString *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加密视频,可以继续进行下述步骤进行播放,其他情况需要根据不同的错误类型,检查出错原因,并重复上述操作,直至校验通过才能正常播放。
此文档是否对你有帮助?
有帮助
去反馈
  • 播放功能
  • 创建播放器实例
  • API原型
  • 参数说明
  • 示例
  • 特殊说明
  • 播放器的相关通知
  • 通知原型
  • 参数说明
  • 示例
  • 常规静态参数设置
  • API原型
  • 参数说明
  • 特殊说明
  • 示例
  • 点播加密视频设置
  • API原型
  • 参数说明
  • 示例
  • 特殊说明
  • 视频本地缓存设置
  • API原型
  • 参数说明
  • 示例
  • 特殊说明
  • 失败重试参数设置
  • API原型
  • 参数说明
  • 示例
  • 说明
  • 视频文件初始化
  • API原型
  • 示例
  • 开始播放
  • API原型
  • 示例
  • 销毁播放器实例
  • API原型
  • 示例
  • 特殊说明
  • 点播加密视频的静态参数设置(已废弃)
  • API原型
  • 参数说明
  • 示例
  • 特殊说明