播流
登录房间成功后,会收到房间内的除自己以外的推流数据,通过调用播流接口,可以播放房间内指定远端流的流视频。
步骤
必须先登录房间成功才能进行播流,播流相关回调如下。
1 房间流状态变化
/**
* 房间流状态变化通知
* @param roomId 房间Id
* @param updateType 流状态
* @param streamList 流列表
*/
void onRoomStreamUpdate(const char * roomId, ChuangStreamUpdateType Type, const ChuangStreamInfo* streamList, int streamsCount)
{
if (Type == STREAM_ADD)
{
//处理新增用户,分配新的播放view,调用开始播流方法
}
else
{
//处理离开用户,如调用停止播流方法等
}
}
2 开始播流
2.1 开始播流
当收到上述1.1房间内新加入流信息回调(onRoomStreamUpdate)时,需要主动调用开始播流实现远端视频的播放,否则不会展示播流画面。
注意:必须登录成功,才能进行播流,否则播流无效。
ChuangVideoCanvas canvas;
canvas.view = surfaceView;
canvas.videoRenderMode = ASPECT_FIT;
canvas.videoMirrorMode = MIRROR_AUTO;
m_cEngine->startPlayStream(streamId, canvas);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | const char* | 必传 | 要播放的流Id |
canvas | ChuangVideoCanvas | 必传 | 显示播流画面的容器view、填充模式、镜像模式 |
2.2 开始播流结果回调
当调用开始播流接口后,会收到播流结果回调,表示播流成功与否。返回code:0表示播流成功,code为其他表示播流异常。
/**
* 播流状态回调
* @param streamId 流Id
* @param playState 播流状态
* @param errorCode 错误码
*/
void onPlayStreamStateUpdate(const char* streamId, ChuangPlayState playState, int errorCode)
{
if (state == PLAY_CONNECTED)
{
//播流成功
}
}
2.3 播流首帧回调
当调用开始播流接口后,播流开始后会收到首帧回调。
/**
* 播流首帧视频回调
* @param streamId 流Id
*/
void onPlayStreamFirstVideo(const char* streamId) {}
3 停止播流
3.1 停止播流方法
当收到上述1.2离开房间的流信息回调(onPlayStreamStateUpdate)时候,需要停止播放该流数据和从UI上移除播流View,停止播放流数据的方法:stopPlayStream:
m_cEngine->stopPlayStream(streamId);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | const char* | 必传 | 要播放的流Id |
3.2 停止播流回调
当主动调用停止播流接口或者其他网络异常引起播放中断的时候会收到该回调,可用来监控异常停止播流的视频流。
/**
* 播流状态回调
* @param streamId 流Id
* @param playState 播流状态
* @param errorCode 错误码
*/
void onPlayStreamStateUpdate(const char* streamId, ChuangPlayState playState, int errorCode)
{
if (state == PLAY_DISCONNECTED)
{
//播流停止
}
}