标准低延迟直播流程
在开始之前,请您再次确认您已经完成了开通音视频服务、导入 SDK以及初始化。
提示
多人之间想要发起音视频通话,需要加入同一个音视频房间。对于直播需求来讲,资源类型需选择 audio_video 或 audio,即音视频直播间或纯音频直播间。加入房间的角色也分为主播 live_broadcaster 和观众 live_audience ,下面就这两种身份,分别进行说明。
主播端
用户加入房间的角色为主播 live_broadcaster。
通过 RCRTCEngine 设置本地事件回调监听
设置加入房间事件回调
方法
Dart
RCRTCEngine.onRoomJoined
返回值
| 参数 | 描述 |
|---|---|
| code | 接口结果码 |
| errMsg | 失败原因 |
示例代码
Dart
engine.onRoomJoined = (int code, String? errMsg) {
if (code != 0) {
// 加入房间失败
} else {
// 加入房间成功
}
};
设置发布资源事件回调
方法
Dart
RCRTCEngine.onPublished
返回值
| 参数 | 描述 |
|---|---|
| RCRTCMediaType | 发布资源的类型 |
| code | 接口结果码 |
| errMsg | 失败原因 |
示例代码
Dart
engine.onPublished = (RCRTCMediaType type, int code, String? errMsg) {
// type 发布资源的类型
if (code != 0) {
// 发布失败
} else {
// 发布成功
}
}
设置取消发布资源事件回调
方法
Dart
RCRTCEngine.onUnpublished
返回值
| 参数 | 描述 |
|---|---|
| RCRTCMediaType | 取消发布资源的类型 |
| code | 接口结果码 |
| errMsg | 失败原因 |
示例代码
Dart
engine.onUnpublished = (RCRTCMediaType type, int code, String? errMsg) {
// type 取消发布资源的类型
if (code != 0) {
// 取消发布失败
} else {
// 取消发布成功
}
}
设置订阅资源事件回调
方法
Dart
RCRTCEngine.onSubscribed
返回值
| 参数 | 描述 |
|---|---|
| userId | 远端用户 ID |
| RCRTCMediaType | 订阅资源的类型 |
| code | 接口结果码 |
| errMsg | 失败原因 |
示例代码
Dart
engine.onSubscribed = (String userId, RCRTCMediaType type, int code, String? errMsg) {
// userId 远端用户 ID
// type 订阅资源的类型
if (code != 0) {
// 订阅失败
} else {
// 订阅成功
}
}
设置取消订阅资源事件回调
方法
Dart
RCRTCEngine.onUnsubscribed
返回值
| 参数 | 描述 |
|---|---|
| userId | 远端用户 ID |
| RCRTCMediaType | 取消订阅资源的类型 |
| code | 接口结果码 |
| errMsg | 失败原因 |
示例代码
Dart
engine.onUnsubscribed = (String userId, RCRTCMediaType type, int code, String? errMsg) {
// userId 远端用户 ID
// type 取消订阅资源的类型
if (code != 0) {
// 取消订阅失败
} else {
// 取消订阅成功
}
}
通过 RCRTCEngine 设置远端事件回调监听
设置远端用户加入房间事件回调
方法
Dart
RCRTCEngine.onUserJoined
返回值
| 参数 | 描述 |
|---|---|
| roomId | 房间 ID |
| userId | 远端用户 ID |
示例代 码
Dart
engine.onUserJoined = (String roomId, String userId) {
// roomId 房间 ID
// userId 远端用户 ID
}
设置远端用户离开房间事件回调
方法
Dart
RCRTCEngine.onUserLeft
返回值
| 参数 | 描述 |
|---|---|
| roomId | 房间 ID |
| userId | 远端用户 ID |
示例代码
Dart
engine.onUserLeft = (String roomId, String userId) {
// roomId 房间 ID
// userId 远端用户 ID
}
设置远端用户发布资源回调
方法
Dart
RCRTCEngine.onRemotePublished
返回值
| 参数 | 描述 |
|---|---|
| roomId | 房间 ID |
| userId | 远端用户 ID |
| RCRTCMediaType | 远端用户发布的资源类型 |
示例代码
Dart
engine.onRemotePublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 房间 ID
// userId 远端用户 ID
// type 远端用户发布的资源类型
}
设置远端用户取消发布资源回调
方法
Dart
RCRTCEngine.onRemoteUnpublished
返回值
| 参数 | 描述 |
|---|---|
| roomId | 房间 ID |
| userId | 远端用户 ID |
| RCRTCMediaType | 远端用户取消发布的资源类型 |
示例代码
Dart
engine.onRemoteUnpublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 房间 ID
// userId 远端用户 ID
// type 远端用户取消发布的资源类型
}
加入房间
以主播身份(live_broadcaster)加入音视频直播房间
方法
Dart
RCRTCEngine.joinRoom();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| roomId | String | 是 | 房间 ID |
| setup | RCRTCRoomSetup | 是 | 房间属性 |
示例代码
Dart
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
// 根据实际场景,选择音视频直播:audio_video 或纯音频直播:audio
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_broadcaster,
);
engine.joinRoom('直播间 ID', setup);
提示
客户端通过 joinRoom 传入的"直播间 ID" 来加入不同房间。房间不需要客户端创建或销毁,融云服务若发现该房间不存在时会自动创建,当没有任何主播时(只有观众不算),过一段时间也会自动销毁该房间。
本地预览
打开摄像头
方法
Dart
RCRTCEngine.enableCamera();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| enableCamera | bool | 是 | true 打开摄像头,false 关闭摄像头 |
示例代码
Dart
engine.enableCamera(true);
设置预览窗口
方法
Dart
RCRTCEngine.setLocalView();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| view | RCRTCView | 是 | SDK 提供的视频渲染 View |
示例代码
Dart
RCRTCView view = await RCRTCView.create();
engine.setLocalView(view);
发布音视频资源
方法
Dart
RCRTCEngine.publish();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| RCRTCMediaType | RCRTCMediaType | 是 | 发布的资源类型 |
示例代码
Dart
engine.publish(RCRTCMediaType.audio_video);
订阅远端用户资源
订阅远端用户音视频资源
方法
Dart
RCRTCEngine.subscribe();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | String | 是 | 远端用户 UserId |
| RCRTCMediaType | RCRTCMediaType | 是 | 订阅的资源类型 |
示例代码
Dart
engine.subscribe(userId, RCRTCMediaType.audio_video);
设置远端用户预览窗口
方法
Dart
RCRTCEngine.setRemoteView();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | String | 是 | 远端用户 UserId |
| view | RCRTCView | 是 | SDK 提供的视频渲染 View |
示例代码
Dart
RCRTCView view = await RCRTCView.create();
engine.setRemoteView(userId, view);
观众端
用户加入房间的角色为观众 live_audience。
通过 RCRTCEngine 设置合流事件回调监听
设置合流资源发布监听
方法
Dart
RCRTCEngine.onRemoteLiveMixPublished
返回值
| 参数 | 描述 |
|---|---|
| RCRTCMediaType | 合流资源的类型 |
示例代码
Dart
engine.onRemoteLiveMixPublished = (RCRTCMediaType type) {
// type 合流资源的类型
// 可以开始订阅合流资源
}
设置合流资源取消发布监听
方法
Dart
RCRTCEngine.onRemoteLiveMixUnpublished
返回值
| 参数 | 描述 |
|---|---|
| RCRTCMediaType | 合流资源的类型 |
示例代码
Dart
engine.onRemoteLiveMixUnpublished = (RCRTCMediaType type) {
// type 合流资源的类型
// 合流资源已取消发布
}
加入房间
以观众身份(live_audience)加入音视频直播房间
方法
Dart
RCRTCEngine.joinRoom();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| roomId | String | 是 | 房间 ID |
| setup | RCRTCRoomSetup | 是 | 房间属性 |