0

我有一个简单的广播测试应用程序。

我作为主持人加入了一个频道,最终我取消了发布。

this.client = AgoraRTC.createClient({ mode: "live", codec: "h264", role: "host"});

//...then
await this.client.publish([this.audioTrack, this.videoTrack]);

//..eventually
await this.client.unpublish([this.audioTrack, this.videoTrack]);

这会立即在“观众”远程用户中触发users-unpublished和触发。user-left

这在 SDK 中没有记录。

user-left当用户还没有真正离开频道时,如何防止事件被触发?

4

2 回答 2

2

这是 agora-web-sdk-ng 的默认行为。当主持人呼叫“取消发布”以取消发布他的本地流时,他的角色将从主持人变为观众。这将触发“user-left”回调。

“用户左”回调接口:https ://agoraio-community.github.io/AgoraWebSDK-NG/api/en/interfaces/iagorartcclient.html#event_user_left

“取消发布” api:https ://agoraio-community.github.io/AgoraWebSDK-NG/api/en/interfaces/iagorartcclient.html#unpublish

如果您想检测用户是否离开频道而不是切换角色,您可以通过实现 RTM SDK 来实现。用户在加入RTC频道(视频通话频道)时,还应加入与视频通话频道同名的RTM频道。然后,您可以使用 RTM SDK 中的“getMembers”方法来检索该频道中的用户列表。

“getMembers” api:https ://docs.agora.io/en/Real-time-Messaging/API%20Reference/RTM_cpp/classagora_1_1rtm_1_1_i_channel.html#a3f9c943059ac48a568c81798da38c3cb

于 2020-05-26T21:49:34.587 回答
1

user-left作为正在开发的 SDK 的副作用而被触发。计划在下一个版本中移除此效果。

区分用户离开和未发布的一种方法是事件的reason参数。BecomeAudience如果在主机取消发布媒体时触发事件,则该参数成立。否则,论证成立Quitor ServerTimeOut

另外,事件的原因是“成为听众”,该user-joind事件将在 10 秒后触发。

https://agoraio-community.github.io/AgoraWebSDK-NG/api/en/interfaces/iagorartcclient.html#event_user_left

于 2020-05-28T05:09:07.967 回答