直播
iOS
产品介绍
简介
主要功能
产品优势
应用场景
使用限制
快速开始
推流端SDK
概述
更新日志
集成SDK
开发指南
实现流程
进阶功能
API 参考
播放器SDK
概览
更新日志
下载 SDK 和示例代码
跑通示例项目
集成SDK
开发指南
播放功能
播放控制
查询参数
数据回调
时间戳校对方案
外挂字幕
API 参考
最佳实践
OBS推流使用指南
服务协议

开发指南

更新时间: 2023/04/26 15: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原型

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