播流
登录房间成功后,会收到房间内的除自己以外的推流数据,通过调用播流接口可以播放房间内指定远端的视频流。
步骤
必须先登录房间成功才能进行播流,在前面调用登录房间接口的时候您已经设置了一个遵循 ChuangLiveEngineDelegate协议的对象作为接收SDK回调方法的delegate,那么将在该对象对应的类中实现以下播流相关回调方法。
1.1 房间流状态变化
updateType表示流更新的类型,分为添加(ChuangStreamUpdateTypeAdd)和删除(ChuangStreamUpdateTypeDelete),首次登录房间后,如果此时房间内存在其他用户推流,则会接收到流更新类型为添加的流列表。用户已经在房间内了,如果期间房间内有用户开始或者停止推流,也会触发新增或者删除流更新。
开发者可根据此回调来判断同个房间内是否有其他用户新增推流或其他用户停止推流,以此来实现主动播流 [startPlayStream:withCanvas:] 或 主动停止播流 [stopPlayStream:],并同时进行播流 UI 控件的变更。
/*!
@brief 房间流状态变化
@param roomId 房间ID
@param updateType 流更新类型(添加/删除)
@param streamList 更新的流列表
*/
- (void)onRoomStreamUpdate:(NSString *)roomId updateType:(ChuangStreamUpdateType)updateType streamList:(NSArray <ChuangStreamInfo *>*)streamList {
if(updateType == ChuangStreamUpdateTypeAdd){
//处理新增用户推流,分配新的播放view,调用开始播流方法,更新UI控件
}
if(updateType == ChuangStreamUpdateTypeDelete){
//处理离开用户的流,如调用停止播流方法,更新UI控件等
}
}
1.2 开始播流
1.2.1 开始播流
当收到上述1.1房间内有新流加入信息(updateType为ChuangStreamUpdateTypeAdd)回调(onRoomStreamUpdate:)时,需要主动调用开始播流实现远端视频的播放,否则不会展示播流画面。可以设置ChuangVideoCanvas的renderMode选择视频显示模式。
播放流数据的方法:playStream:withPlayView:andRenderMode:
注意:必须登录成功,才能进行播流,否则播流无效。
// Objective-C
ChuangVideoCanvas *playCanvas = [[ChuangVideoCanvas alloc] init];
playCanvas.view = view;
[self.liveEngine startPlayStream:streamId withCanvas:playCanvas];
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | NSString | 必传 | 要播放的流Id |
view | UIView | 必传 | 显示播流画面的容器view |
rendMode | ChuangVideoRenderMode | 选传 | 播流填充模式,详情参照ChuangVideoRenderMode |
1.2.2 开始播流结果回调
当调用开始播流接口后,会收到播流结果回调,当state为ChuangPlayStateConnected且errorCode为0表示调用播流成功。当state为ChuangPlayStateConnected但是errorCode为非0时表示播流出现中断但是自动恢复了播流成功,errorCode定义了引起播流波动的原因,比如网络波动引起的播流异常中断又很快自动恢复。
// Objective-C
/*!
@brief 播流状态变化回调
@param streamId 流Id
@param state 播流状态
@param code 异常码
*/
- (void)onPlayStreamStateUpdate:(NSString *)streamId state:(ChuangPlayState)state errorCode:(int)code {
if(state == ChuangPlayStateConnected && code == 0){
// 播流成功
}
}
1.2.3 播流首帧回调
当调用开始播流接口后,播流开始后会收到首帧回调,表示开始渲染远端流。
// Objective-C
/*!
@brief 播流首帧视频回调
@param streamId 流ID
*/
- (void)onPlayStreamFirstVideo:(NSString *)streamId {
}
1.3 停止播流
1.3.1 停止播流方法
当收到上述1.1房间流状态更新回调(onRoomStreamUpdate:),如果updateType为ChuangStreamUpdateTypeDelete表示有流离开房间,需要调用停止播流(stopPlayStream:)方法来停止播放该流,并从UI上移除播流View。
// Objective-C
[self.liveEngine stopPlayStream:streamId];
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | NSString | 必传 | 要播放的流ID |
1.3.2 停止播流回调
当主动调用停止播流接口或者其他网络异常引起播放中断的时候都会收到该回调,可以通过errorCode区分是主动调用还是其他异常引起,可用来监控异常停止播流的视频流。
// Objective-C
/*!
@brief 播流状态变化回调
@param streamId 流ID
@param state 播流状态
@param code 异常码
*/
- (void)onPlayStreamStateUpdate:(NSString *)streamId state:(ChuangPlayState)state errorCode:(int)code {
if(state == ChuangPlayStateDisconnected && code==0){
// 正常播流停止
}
}
1.4 其他播流相关回调
1.4.1播流质量回调【仅在调试时使用,上线时不要使用】
当成功调用开始播流之后,就会每隔1秒收到1次该回调,主要用来调试查看播流质量状况。
// Objective-C
/*!
@brief 播流质量回调
@param streamId 流ID
@param quality 流质量
*/
- (void)onPlayStreamQualityUpdate:(NSString *)streamId quality:(ChuangPlayStreamQuality *)quality {
}
1.4.2 播放远端流方向旋转回调
推流端默认竖屏采集视频,且支持自适应推流方向,如果是竖屏采集推流,当推流端手机旋转方向,则在播流端开始播流后,会收到远端流方向改变的回调,APP可以根据此回调调整播放填充模式等处理。
// Objective-C
/*!
@brief 播流视频方向发生变化
@param streamId 流ID
@param rotation 视频方向
*/
- (void)onPlayStreamVideoRotationChanged:(NSString *)streamId rotation:(ChuangStreamRotation)rotation {
}
1.4.3 播放远端的麦克风摄像头状态更新回调
当远端推流者修改了麦克风、摄像头状态时,当前播流端会收到该回调。
// Objective-C
/*!
@brief 音视频流状态改变回调,例如远端推流静音音视频
@param streamId 流ID
@param state 状态
*/
- (void)onPlayStreamStateChanged:(NSString *)streamId state:(ChuangStreamState)state{
}
1.4.4 播放远端流音量大小变化回调
前提是调用了开启音量监听(startSoundLevelMonitor),并设置了音量回调间隔(setSoundLevelMonitorInterval:),当开始播流后按照设定频率进行回调,如果没有播流,则不回调 。当调用了停止音量监听(stopSoundLevelMonitor)后,也不会收到该回调。
// Objective-C
/*!
@brief 播流音量大小回调
@param soundLevels 音量变化信息
*/
- (void)onRemoteSoundLevelUpdate:(NSArray <ChuangSoundLevel *>*)soundLevels {
}