跳到主要内容

房间事件回调

开发者可通过设置 RCRTCEngine 中的不同函数回调方法来监听房间内远端用户的状态及资源变化。

状态相关

远端用户加入通知

当有远端用户加入时触发。因用户加入房间后才能发布资源,该回调代表这名用户刚刚加入,此时并无任何资源发布,所以此刻也订阅不到该用户的任何媒体流。

方法

Dart
RCRTCEngine.onUserJoined

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID

示例代码

Dart
engine.onUserJoined = (String roomId, String userId) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
print('用户 $userId 加入了房间 $roomId');
};

远端用户离开通知

当有远端用户离开房间时触发,此时 SDK 会自动取消订阅该用户已发布的流,无需手动调用 unsubscribe

方法

Dart
RCRTCEngine.onUserLeft

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID

示例代码

Dart
engine.onUserLeft = (String roomId, String userId) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
print('用户 $userId 离开了房间 $roomId');
};

远端用户掉线通知

当有远端用户掉线时触发,代表该用户意外与融云服务断连超过 1 分钟。网络不好、App 意外崩溃或用户主动杀进程等情况,都会造成客户端与融云服务断连。如 1 分钟内没有恢复,则会被服务判定掉线,此时 SDK 会自动取消订阅该用户的所有资源,无需手动调用 unsubscribe

方法

Dart
RCRTCEngine.onUserOffline

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID

示例代码

Dart
engine.onUserOffline = (String roomId, String userId) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
print('用户 $userId 在房间 $roomId 中掉线了');
};

远端用户资源状态变更通知

当远端用户调用了 muteLocalStream 方法时触发。

方法

Dart
RCRTCEngine.onRemoteStateChanged

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID
type远端用户变更的资源类型
disabled远端用户更新后的值,true 代表资源静默,false 代表恢复正常

示例代码

Dart
engine.onRemoteStateChanged = (String roomId, String userId, RCRTCMediaType type, bool disabled) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
// type 远端用户变更的资源类型
// disabled 远端用户更新后的值
if (disabled) {
print('用户 $userId 在房间 $roomId 中静默了 $type 资源');
} else {
print('用户 $userId 在房间 $roomId 中恢复了 $type 资源');
}
};

资源相关

远端用户资源发布通知

当远端用户发布资源时触发。

方法

Dart
RCRTCEngine.onRemotePublished

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID
type远端用户发布的资源类型

示例代码

Dart
engine.onRemotePublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
// type 远端用户发布的资源类型
print('用户 $userId 在房间 $roomId 中发布了 $type 资源');

// 可以在这里订阅该用户的资源
engine.subscribe(userId, type);
};

远端用户资源取消发布通知

当远端用户取消发布资源时触发,接收到后 SDK 会自动取消订阅相应资源。开发者也可以根据资源类型,来给用户做出相应的提示。

方法

Dart
RCRTCEngine.onRemoteUnpublished

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID
type远端用户取消发布的资源类型

示例代码

Dart
engine.onRemoteUnpublished = (String roomId, String userId, RCRTCMediaType type) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
// type 远端用户取消发布的资源类型
print('用户 $userId 在房间 $roomId 中取消发布了 $type 资源');
};

合流资源发布通知

当 MCU 服务器发布资源时触发。

方法

Dart
RCRTCEngine.onRemoteLiveMixPublished

返回值

参数描述
type发布的资源类型

示例代码

Dart
engine.onRemoteLiveMixPublished = (RCRTCMediaType type) {
// type 发布的资源类型
print('MCU 服务器发布了 $type 合流资源');

// 可以在这里订阅合流资源
engine.subscribeLiveMix(type);
};

合流资源取消发布通知

当 MCU 服务器取消发布资源时触发。

方法

Dart
RCRTCEngine.onRemoteLiveMixUnpublished

返回值

参数描述
type取消发布的资源类型

示例代码

Dart
engine.onRemoteLiveMixUnpublished = (RCRTCMediaType type) {
// type 取消发布的资源类型
print('MCU 服务器取消发布了 $type 合流资源');
};

首帧回调

远端用户发布的视频资源首帧回调

方法

Dart
RCRTCEngine.onRemoteFirstFrame

返回值

参数描述
roomId远端用户所在的房间 ID
userId远端用户 ID
type资源类型

示例代码

Dart
engine.onRemoteFirstFrame = (String roomId, String userId, RCRTCMediaType type) {
// roomId 远端用户所在的房间 ID
// userId 远端用户 ID
// type 资源类型
print('用户 $userId 在房间 $roomId 中的 $type 资源首帧到达');
};

合流视频资源首帧回调

方法

Dart
RCRTCEngine.onRemoteLiveMixFirstFrame

返回值

参数描述
type资源类型

示例代码

Dart
engine.onRemoteLiveMixFirstFrame = (RCRTCMediaType type) {
// type 资源类型
print('MCU 服务器的 $type 合流资源首帧到达');
};