标准低延迟直播流程
在开始之前,请您再次确认您已经完成了开通音视频服务、导入 SDK以及初始化。
多人之间想要发起音视频通话,需要加入同一个音视频房间。对于直播需求来讲,资源类型需选择 audio_video
或 audio
,即音视频直播间或纯音频直播间。加入房间的角色也分为主播 live_broadcaster
和观众 live_audience
,下面就这两种身份,分别进行说明。
主播端
用户加入房间的角色为主播 live_broadcaster
。
步骤 1.1:设置监听
设置本地事件监听
设置加入房间事件回调
engine.onRoomJoined = (int code, String? errMsg) {
if (code != 0) {
// 加入房间成功
} else {
// 加入房间失败
}
};
设置发布资源事件回调
engine.onPublished = (RCRTCMediaType type, int code, String? errMsg) {
// type 发布资源的类型
if (code != 0) {
// 发布成功
} else {
// 发布失败
}
}
设置取消发布资源事件回调
engine.onUnpublished = (RCRTCMediaType type, int code, String? errMsg) {
// type 取消发布资源的类型
if (code != 0) {
// 取消发布成功
} else {
// 取消发布失败
}
}
设置订阅资源事件回调
engine.onSubscribed = (String userId, RCRTCMediaType type, int code, String? errMsg) {
// userId 远端用户 ID
// type 订阅资源的类型
if (code != 0) {
// 订阅成功
} else {
// 订阅失败
}
}
设置取消订阅资源事件回调
engine.onUnsubscribed = (String userId, RCRTCMediaType type, int code, String? errMsg) {
// userId 远端用户 ID
// type 取消订阅资源的类型
if (code != 0) {
// 取消订阅成功
} else {
// 取消订阅失败
}
}
设置远端事件监听
设置远端用户加入房间事件回调
engine.onUserJoined = (String userId) {
// userId 远端用户 ID
}
设置远端用户离开房间事件回调
engine.onUserLeft = (String userId) {
// userId 远端用户 ID
}
设置远端用户发布资源回调
engine.onRemotePublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 房间 ID
// userId 远端用户 ID
// type 远端用户发布的资源类型
}
设置远端用户取消发布资源回调
engine.onRemoteUnpublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 房间 ID
// userId 远端用户 ID
// type 远端用户取消发布的资源类型
}
步骤 1.2:加入房间
-
构建 RCRTCRoomSetup,指定主播身份和房间类型:
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
// 根据实际场景,选择音视频直播:audio_video 或纯音频直播:audio
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_broadcaster,
); -
调用
RCRTCEngine
下的joinRoom
方法创建并加入一个直播房间:engine.joinRoom('直播间 ID', setup);
客户端通过 joinRoom
传入的"直播间 ID" 来加入不同房间。房间不需要客户端创建或销毁,融云服务若发现该房间不存在时会自动创建,当没有任何主播时(只有观众不算),过一段时间也会自动销毁该房间。
步骤 1.2:发布音视频资源
-
加入房间后,开始摄像头采集并发布音视频资源。
/// 开启摄像头
engine.enableCamera(true);
/// 发布音视频资源
engine.publish(RCRTCMediaType.audio_video); -
创建用于显示视频的
RCRTCView
,调用RCRTCEngine
下的setLocalView
方法设置本地视频的显示 view。/// 创建预览窗口
RCRTCView view = await RCRTCView.create();
/// 设置预览窗口
engine.setLocalView(view);
步骤 1.3:主播订阅房间内其他主播的资源
-
调用
RCRTCEngine
下的subscribe
方法订阅房间内其他主播的资源,在主播连麦的场景下会用到该方法,当远端主播发布资源时,会通过onRemotePublished
回调通知,需要订阅音视频资源并显示视图。engine.subscribe(userId, RCRTCMediaType.audio_video);
-
创建用于显示视频的
RCRTCView
,调用RCRTCEngine
下的setRemoteView
方法设置远端视频的显示 view。/// 创建预览窗口
RCRTCView view = await RCRTCView.create();
/// 设置预览窗口
engine.setRemoteView(userId, view);
观众端
用户加入房间的角色为观众 live_audience
。
步骤 2.1:设置监听
设置合流资源发布监听
engine.onRemoteLiveMixPublished = (RCRTCMediaType type) {
}
设置合流资源取消发布监听
engine.onRemoteLiveMixUnpublished = (RCRTCMediaType type) {
}
步骤 2.2:加入房间
-
构建
RCRTCRoomSetup
,指定观众身份和房间类型:RCRTCRoomSetup setup = RCRTCRoomSetup.create(
// 根据实际场景,选择音视频直播:audio_video 或纯音频直播:audio
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_audience,
); -
调用
RCRTCEngine
下的joinRoom
方法创建并加入一个直播房间:engine.joinRoom('直播间 ID', setup);
步骤 2.3:观众观看直播
-
在监听到合流资源发布事件之后,调用
RCRTCEngine
下的subscribeLiveMix
方法订阅直播。engine.subscribeLiveMix(RCRTCMediaType.audio_video);
-
创建用于显示视频的 RCRTCVideoView,调用
RCRTCEngine
下的setLiveMixView
方法设置房 间直播资源的显示 view。/// 创建预览窗口
RCRTCView view = await RCRTCView.create();
/// 设置预览窗口
engine.setLiveMixView(view);