ライブセッションで他の参加者を管理するには、RealtimeKit のホストコントロールを使います。音声や動画のミュート、参加者のピン留め、セッションからの退出ができます。 これらの操作には、ローカル参加者の Preset で、対応するホストコントロール権限が有効になっている必要があります。 UI コントロールを表示したり、これらのメソッドを呼び出したりする前に、ローカル参加者に必要な権限があることを確認してください。 このガイドでは、ローカル参加者 は操作を実行するユーザーを指します。
特定の参加者に対して操作するには、まずその参加者オブジェクトを取得します。
リモート参加者(自分以外の参加者)は meeting.participants で参照できます。ローカル参加者は meeting.self で参照できます。
詳細は Meeting オブジェクトの説明 を参照してください。
const joinedParticipants = meeting.participants.joined.toArray();
const participant = joinedParticipants[0];
if (!participant) {
// No remote participants are currently joined.
}特定の参加者に対して操作するには、まずその参加者オブジェクトを取得します。
リモート参加者(自分以外の参加者)は meeting.participants で参照できます。ローカル参加者は meeting.self で参照できます。
詳細は Meeting オブジェクトの説明 を参照してください。
const joinedParticipants = meeting.participants.joined.toArray();
const participant = joinedParticipants[0];
if (!participant) {
// No remote participants are currently joined.
}特定の参加者に対して操作するには、まずその参加者オブジェクトを取得します。
リモート参加者(自分以外の参加者)は meeting.participants で参照できます。ローカル参加者は meeting.self で参照できます。
詳細は Meeting オブジェクトの説明 を参照してください。
const joinedParticipants = meeting.participants.joined.toArray();
const participant = joinedParticipants[0];
if (!participant) {
// No remote participants are currently joined.
}特定の参加者に対して操作するには、participants プロパティからその参加者オブジェクトを取得します。
リモート参加者は meeting.participants.joined にあります。ローカル参加者は meeting.localUser にあります。
val joinedParticipants = meeting.participants.joined
val participant = joinedParticipants.firstOrNull()
if (participant == null) {
// No remote participants are currently joined.
}特定の参加者に対して操作するには、participants プロパティからその参加者オブジェクトを取得します。
リモート参加者は meeting.participants.joined にあります。ローカル参加者は meeting.localUser にあります。
let joinedParticipants = meeting.participants.joined
guard let participant = joinedParticipants.first else {
// No remote participants are currently joined.
return
}特定の参加者に対して操作するには、participants プロパティからその参加者オブジェクトを取得します。
リモート参加者は meeting.participants.joined にあります。ローカル参加者は meeting.self にあります。
const joinedParticipants = meeting.participants.joined;
const participant = joinedParticipants.toArray()[0];
if (!participant) {
// No remote participants are currently joined.
}または useRealtimeKitSelector フックを使います。
import { useRealtimeKitSelector } from '@cloudflare/realtimekit-react-native';
const joinedParticipants = useRealtimeKitSelector((m) => m.participants.joined);背景ノイズを抑えたいとき、教室やウェビナーを進行したいとき、セッション中の割り込みを防ぎたいときに、参加者の音声をミュートします。
この操作には、ローカル参加者の preset で Mute Audio(disable_participant_audio)ホストコントロール権限が有効になっている必要があります。
特定の参加者の音声をミュートする手順は次のとおりです。
-
ローカル参加者に、ほかの参加者の音声をミュートする権限があることを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
対象の参加者に対して
disableAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAudio()はコード1201のClientErrorをスローします。try { await participant.disableAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、対象参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { if (participant.id === targetParticipantId) { // audioEnabled is false // Update UI for the participant } }, );
-
ローカル参加者に、ほかの参加者の音声をミュートする権限があることを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
対象の参加者に対して
disableAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAudio()はコード1201のClientErrorをスローします。try { await participant.disableAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、対象参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { if (participant.id === targetParticipantId) { // audioEnabled is false // Update UI for the participant } }, );
-
ローカル参加者に、ほかの参加者の音声をミュートする権限があることを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
対象の参加者に対して
disableAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAudio()はコード1201のClientErrorをスローします。try { await participant.disableAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、対象参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { if (participant.id === targetParticipantId) { // audioEnabled is false // Update UI for the participant } }, );
- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
val canMuteAudio = meeting.localUser.permissions.host.canMuteAudio
if (!canMuteAudio) {
// Disable the control in your UI.
}- 対象の参加者に対して
disableAudio()を呼び出します。ローカル参加者に必要な権限がない場合、disableAudio()はHostErrorを返します。
val error = participant.disableAudio()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
audioEnabledはfalseになります。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onAudioUpdate(participant: RtkRemoteParticipant, isEnabled: Boolean) {
// audioEnabled is false
// Update UI for the participant
}
})- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
let canMuteAudio = meeting.localUser.permissions.host.canMuteAudio
if !canMuteAudio {
// Disable the control in your UI.
}- 対象の参加者に対して
disableAudio()を呼び出します。ローカル参加者に必要な権限がない場合、disableAudio()はHostErrorを返します。
if let error = participant.disableAudio() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
audioEnabledはfalseになります。
extension MeetingViewModel: RtkParticipantsEventListener {
func onAudioUpdate(participant: RtkRemoteParticipant, isEnabled: Bool) {
// audioEnabled is false
// Update UI for the participant
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
const canDisableParticipantAudio = meeting.self.permissions.canDisableParticipantAudio;
if (!canDisableParticipantAudio) {
// Disable the control in your UI.
}- 対象の参加者に対して
disableAudio()を呼び出します。
participant
.disableAudio()
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
audioEnabledはfalseになります。
meeting.participants.joined.on('audioUpdate', (participant) => {
// participant.audioEnabled is false
// Update UI for the participant
});ローカル参加者を含む、すべての参加者が対象になります。セッション内の全員の音声をミュートする手順は次のとおりです。
-
ローカル参加者が、ほかの参加者の音声をミュートする権限を持っているかを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
disableAllAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllAudio()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもaudioUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the local participant });
-
ローカル参加者が、ほかの参加者の音声をミュートする権限を持っているかを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
disableAllAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllAudio()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもaudioUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the local participant });
-
ローカル参加者が、ほかの参加者の音声をミュートする権限を持っているかを確認します。
const canMuteAudio = meeting.self.permissions.canDisableParticipantAudio === true; if (!canMuteAudio) { // Disable the control in your UI. } -
disableAllAudio()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllAudio()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllAudio(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to mute other participants’ audio. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
audioEnabledはfalseになり、SDK はaudioUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもaudioUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "audioUpdate", (participant, { audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the participant }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("audioUpdate", ({ audioEnabled, audioTrack }) => { // audioEnabled is false // Update UI for the local participant });
- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
val canMuteAudio = meeting.localUser.permissions.host.canMuteAudio
if (!canMuteAudio) {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllAudio()を呼び出します。ローカル参加者に必要な権限がない場合、disableAllAudio()はHostErrorを返します。
val error = meeting.participants.disableAllAudio()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
audioEnabledはfalseになります。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onAudioUpdate(participant: RtkRemoteParticipant, isEnabled: Boolean) {
// audioEnabled is false
// Update UI for the participant
}
})- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
let canMuteAudio = meeting.localUser.permissions.host.canMuteAudio
if !canMuteAudio {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllAudio()を呼び出します。ローカル参加者に必要な権限がない場合、disableAllAudio()はHostErrorを返します。
if let error = meeting.participants.disableAllAudio() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
audioEnabledはfalseになります。
extension MeetingViewModel: RtkParticipantsEventListener {
func onAudioUpdate(participant: RtkRemoteParticipant, isEnabled: Bool) {
// audioEnabled is false
// Update UI for the participant
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、他の参加者の音声をミュートする権限があることを確認します。
const canDisableParticipantAudio = meeting.self.permissions.canDisableParticipantAudio;
if (!canDisableParticipantAudio) {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllAudio()を呼び出します。
meeting.participants
.disableAllAudio(true)
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
audioEnabledはfalseになります。
meeting.participants.joined.on('audioUpdate', (participant) => {
// participant.audioEnabled is false
// Update UI for the participant
});セッションを進行したいとき、プライバシーを守りたいとき、教室やウェビナーで不要な動画を止めたいときに、参加者の動画を無効にします。
この操作には、ローカル参加者の preset で Mute Video(disable_participant_video)ホストコントロール権限が有効になっている必要があります。
特定の参加者の動画を無効にする手順は次のとおりです。
-
ローカル参加者に、ほかの参加者のビデオを無効にする権限があることを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // Disable the control in your UI. } -
対象の参加者に対して
disableVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableVideo()はコード1201のClientErrorをスローします。try { await participant.disableVideo(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to disable other participants’ video. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると、対象参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant }, );
-
ローカル参加者に、ほかの参加者のビデオを無効にする権限があることを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // Disable the control in your UI. } -
対象の参加者に対して
disableVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableVideo()はコード1201のClientErrorをスローします。try { await participant.disableVideo(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to disable other participants’ video. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると、対象参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant }, );
-
ローカル参加者に、ほかの参加者のビデオを無効にする権限があることを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // Disable the control in your UI. } -
対象の参加者に対して
disableVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableVideo()はコード1201のClientErrorをスローします。try { await participant.disableVideo(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to disable other participants’ video. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると、対象参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。オプション A: 参加者オブジェクトでリッスンする
participant.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled is false // Update UI for the participant }, );
- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
val canMuteVideo = meeting.localUser.permissions.host.canMuteVideo
if (!canMuteVideo) {
// Disable the control in your UI.
}- 対象の参加者に対して
disableVideo()を呼び出します。ローカル参加者に必要な権限がない場合、disableVideo()はHostErrorを返します。
val error = participant.disableVideo()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
videoEnabledはfalseになります。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onVideoUpdate(participant: RtkRemoteParticipant, isEnabled: Boolean) {
// videoEnabled is false
// Update UI for the participant
}
})- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
let canMuteVideo = meeting.localUser.permissions.host.canMuteVideo
if !canMuteVideo {
// Disable the control in your UI.
}- 対象の参加者に対して
disableVideo()を呼び出します。ローカル参加者に必要な権限がない場合、disableVideo()はHostErrorを返します。
if let error = participant.disableVideo() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
videoEnabledはfalseになります。
extension MeetingViewModel: RtkParticipantsEventListener {
func onVideoUpdate(participant: RtkRemoteParticipant, isEnabled: Bool) {
// videoEnabled is false
// Update UI for the participant
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
const canDisableParticipantVideo = meeting.self.permissions.canDisableParticipantVideo;
if (!canDisableParticipantVideo) {
// Disable the control in your UI.
}- 対象の参加者に対して
disableVideo()を呼び出します。
participant
.disableVideo()
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
videoEnabledはfalseになります。
meeting.participants.joined.on('videoUpdate', (participant) => {
// participant.videoEnabled is false
// Update UI for the participant
});ローカル参加者を含む、すべての参加者が対象になります。セッション内の全員の動画を無効にする手順は次のとおりです。
-
ローカル参加者が、ほかの参加者のビデオを無効にする権限を持っているかを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // UI の操作を無効にします。 } -
disableAllVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllVideo()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllVideo(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者には、ほかの参加者のビデオを無効にする権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもvideoUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled は false です // 参加者の UI を更新します }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled は false です // ローカル参加者の UI を更新します });
-
ローカル参加者が、ほかの参加者のビデオを無効にする権限を持っているかを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // UI の操作を無効にします。 } -
disableAllVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllVideo()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllVideo(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者には、ほかの参加者のビデオを無効にする権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもvideoUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled は false です // 参加者の UI を更新します }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled は false です // ローカル参加者の UI を更新します });
-
ローカル参加者が、ほかの参加者のビデオを無効にする権限を持っているかを確認します。
const canDisableVideo = meeting.self.permissions.canDisableParticipantVideo === true; if (!canDisableVideo) { // UI の操作を無効にします。 } -
disableAllVideo()を呼び出します。ローカル参加者に必要な権限がない場合、
disableAllVideo()はコード1201のClientErrorをスローします。try { await meeting.participants.disableAllVideo(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者には、ほかの参加者のビデオを無効にする権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、各参加者の
videoEnabledはfalseになり、SDK はvideoUpdateイベントを発行します。 ローカル参加者はmeeting.selfでもvideoUpdateを受け取ります。リモート参加者の更新は
joinedマップでリッスンします。meeting.participants.joined.on( "videoUpdate", (participant, { videoEnabled, videoTrack }) => { // videoEnabled は false です // 参加者の UI を更新します }, );ローカル参加者の更新は
meeting.selfでリッスンします。meeting.self.on("videoUpdate", ({ videoEnabled, videoTrack }) => { // videoEnabled は false です // ローカル参加者の UI を更新します });
- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
val canMuteVideo = meeting.localUser.permissions.host.canMuteVideo
if (!canMuteVideo) {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllVideo()を呼び出します。ローカル参加者に必要な権限がない場合、disableAllVideo()はHostErrorを返します。
val error = meeting.participants.disableAllVideo()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
videoEnabledはfalseになります。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onVideoUpdate(participant: RtkRemoteParticipant, isEnabled: Boolean) {
// videoEnabled is false
// Update UI for the participant
}
})- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
let canMuteVideo = meeting.localUser.permissions.host.canMuteVideo
if !canMuteVideo {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllVideo()を呼び出します。ローカル参加者に必要な権限がない場合、disableAllVideo()はHostErrorを返します。
if let error = meeting.participants.disableAllVideo() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
videoEnabledはfalseになります。
extension MeetingViewModel: RtkParticipantsEventListener {
func onVideoUpdate(participant: RtkRemoteParticipant, isEnabled: Bool) {
// videoEnabled is false
// Update UI for the participant
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、他の参加者の動画を無効にする権限があることを確認します。
const canDisableParticipantVideo = meeting.self.permissions.canDisableParticipantVideo;
if (!canDisableParticipantVideo) {
// Disable the control in your UI.
}- participants オブジェクトに対して
disableAllVideo()を呼び出します。
meeting.participants
.disableAllVideo(true)
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、各参加者の
videoEnabledはfalseになります。
meeting.participants.joined.on('videoUpdate', (participant) => {
// participant.videoEnabled is false
// Update UI for the participant
});ウェビナーの発表者や教室の教師など、特定の参加者を目立たせるためにピン留めします。これはセッション全体の操作です。すべての参加者が、ピン留めされた参加者をフォーカスとして見ます。
この操作には、ローカル参加者の preset で Pin Participant(pin_participant)ホストコントロール権限が有効になっている必要があります。
セッション内で参加者をピン留めする手順は次のとおりです。
-
ローカル参加者に、参加者をピン留めする権限があることを確認します。
const canPinParticipant = meeting.self.permissions.pinParticipant === true; if (!canPinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
pin()を呼び出します。ローカル参加者に必要な権限がない場合、
pin()はコード1201のClientErrorをスローします。try { await participant.pin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to pin participants. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると:
- 対象参加者の
isPinnedがtrueになります。 - その参加者が
meeting.participants.pinnedに追加されます。 - SDK が
pinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });すでにピン留めされていた参加者がいる場合、SDK はその参加者に対して
unpinnedイベントを発行します。 - 対象参加者の
-
ピン留めされた対象参加者側では、
meeting.self.isPinnedがtrueになり、meeting.selfがpinnedを発行します。meeting.self.on("pinned", (selfParticipant) => { // Update the local UI to indicate the participant is pinned. });
-
ローカル参加者に、参加者をピン留めする権限があることを確認します。
const canPinParticipant = meeting.self.permissions.pinParticipant === true; if (!canPinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
pin()を呼び出します。ローカル参加者に必要な権限がない場合、
pin()はコード1201のClientErrorをスローします。try { await participant.pin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to pin participants. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると:
- 対象参加者の
isPinnedがtrueになります。 - その参加者が
meeting.participants.pinnedに追加されます。 - SDK が
pinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });すでにピン留めされていた参加者がいる場合、SDK はその参加者に対して
unpinnedイベントを発行します。 - 対象参加者の
-
ピン留めされた対象参加者側では、
meeting.self.isPinnedがtrueになり、meeting.selfがpinnedを発行します。meeting.self.on("pinned", (selfParticipant) => { // Update the local UI to indicate the participant is pinned. });
-
ローカル参加者に、参加者をピン留めする権限があることを確認します。
const canPinParticipant = meeting.self.permissions.pinParticipant === true; if (!canPinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
pin()を呼び出します。ローカル参加者に必要な権限がない場合、
pin()はコード1201のClientErrorをスローします。try { await participant.pin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to pin participants. return; } throw err; } -
更新をリッスンして、結果を処理します。
呼び出しが成功すると:
- 対象参加者の
isPinnedがtrueになります。 - その参加者が
meeting.participants.pinnedに追加されます。 - SDK が
pinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("pinned", (updatedParticipant) => { // updatedParticipant.isPinned is true // Update your UI. });すでにピン留めされていた参加者がいる場合、SDK はその参加者に対して
unpinnedイベントを発行します。 - 対象参加者の
-
ピン留めされた対象参加者側では、
meeting.self.isPinnedがtrueになり、meeting.selfがpinnedを発行します。meeting.self.on("pinned", (selfParticipant) => { // Update the local UI to indicate the participant is pinned. });
- ローカル参加者に、参加者をピン留めする権限があることを確認します。
val canPinParticipant = meeting.localUser.permissions.host.canPinParticipant
if (!canPinParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
pin()を呼び出します。ローカル参加者に必要な権限がない場合、pin()はHostErrorを返します。
val error = participant.pin()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはtrueになり、その参加者はmeeting.participants.pinnedで取得できます。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onParticipantPinned(participant: RtkRemoteParticipant) {
// participant.isPinned is true
// Update your UI.
}
})- ローカル参加者に、参加者をピン留めする権限があることを確認します。
let canPinParticipant = meeting.localUser.permissions.host.canPinParticipant
if !canPinParticipant {
// Disable the control in your UI.
}- 対象の参加者に対して
pin()を呼び出します。ローカル参加者に必要な権限がない場合、pin()はHostErrorを返します。
if let error = participant.pin() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはtrueになり、その参加者はmeeting.participants.pinnedで取得できます。
extension MeetingViewModel: RtkParticipantsEventListener {
func onParticipantPinned(participant: RtkRemoteParticipant) {
// participant.isPinned is true
// Update your UI.
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、参加者をピン留めする権限があることを確認します。
const canPinParticipant = meeting.self.permissions.pinParticipant;
if (!canPinParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
pin()を呼び出します。
participant.pin();- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはtrueになり、その参加者はmeeting.participants.pinnedで取得できます。
meeting.participants.pinned.on('participantPinned', (participant) => {
// participant.isPinned is true
// Update your UI.
});ピン留めを解除して、通常のグリッド表示やアクティブスピーカー表示に戻したいときに使います。 セッション内でピン留めした参加者のピン留めを解除する手順は次のとおりです。
-
ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
const canUnpinParticipant = meeting.self.permissions.pinParticipant === true; if (!canUnpinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
unpin()を呼び出します。ローカル参加者に必要な権限がない場合、
unpin()はコード1201のClientErrorをスローします。try { await participant.unpin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to unpin participants. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、次のようになります。
- 対象の参加者の
isPinnedがfalseになります。 - その参加者は
meeting.participants.pinnedから削除されます。 - SDK が
unpinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. }); - 対象の参加者の
-
ピン留めを解除された対象の参加者側では、
meeting.self.isPinnedがfalseになり、meeting.selfがunpinnedを発行します。meeting.self.on("unpinned", (selfParticipant) => { // Update the local UI to indicate the participant is no longer pinned. });
-
ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
const canUnpinParticipant = meeting.self.permissions.pinParticipant === true; if (!canUnpinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
unpin()を呼び出します。ローカル参加者に必要な権限がない場合、
unpin()はコード1201のClientErrorをスローします。try { await participant.unpin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to unpin participants. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、次のようになります。
- 対象の参加者の
isPinnedがfalseになります。 - その参加者は
meeting.participants.pinnedから削除されます。 - SDK が
unpinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. }); - 対象の参加者の
-
ピン留めを解除された対象の参加者側では、
meeting.self.isPinnedがfalseになり、meeting.selfがunpinnedを発行します。meeting.self.on("unpinned", (selfParticipant) => { // Update the local UI to indicate the participant is no longer pinned. });
-
ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
const canUnpinParticipant = meeting.self.permissions.pinParticipant === true; if (!canUnpinParticipant) { // Disable the control in your UI. } -
対象の参加者に対して
unpin()を呼び出します。ローカル参加者に必要な権限がない場合、
unpin()はコード1201のClientErrorをスローします。try { await participant.unpin(); } catch (err: any) { if (err?.code === 1201) { // The local participant does not have permission to unpin participants. return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、次のようになります。
- 対象の参加者の
isPinnedがfalseになります。 - その参加者は
meeting.participants.pinnedから削除されます。 - SDK が
unpinnedイベントを発行します。
オプション A: 参加者オブジェクトでリッスンする
participant.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. });オプション B:
joinedマップでリッスンするmeeting.participants.joined.on("unpinned", (updatedParticipant) => { // updatedParticipant.isPinned is false // Update your UI. }); - 対象の参加者の
-
ピン留めを解除された対象の参加者側では、
meeting.self.isPinnedがfalseになり、meeting.selfがunpinnedを発行します。meeting.self.on("unpinned", (selfParticipant) => { // Update the local UI to indicate the participant is no longer pinned. });
- ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
val canPinParticipant = meeting.localUser.permissions.host.canPinParticipant
if (!canPinParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
unpin()を呼び出します。ローカル参加者に必要な権限がない場合、unpin()はHostErrorを返します。
val error = participant.unpin()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはfalseになります。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onParticipantUnpinned(participant: RtkRemoteParticipant) {
// participant.isPinned is false
// Update your UI.
}
})- ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
let canPinParticipant = meeting.localUser.permissions.host.canPinParticipant
if !canPinParticipant {
// Disable the control in your UI.
}- 対象の参加者に対して
unpin()を呼び出します。ローカル参加者に必要な権限がない場合、unpin()はHostErrorを返します。
if let error = participant.unpin() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはfalseになります。
extension MeetingViewModel: RtkParticipantsEventListener {
func onParticipantUnpinned(participant: RtkRemoteParticipant) {
// participant.isPinned is false
// Update your UI.
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、参加者のピン留めを解除する権限があることを確認します。
const canPinParticipant = meeting.self.permissions.pinParticipant;
if (!canPinParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
unpin()を呼び出します。
participant.unpin();- 更新をリッスンして結果を処理します。呼び出しが成功すると、対象参加者の
isPinnedはfalseになります。
meeting.participants.pinned.on('unpinned', (participant) => {
// participant.isPinned is false
// Update your UI.
});妨害行為への対応やセッションルールの適用のために、参加者をセッションから退出させます。
この操作には、ローカル参加者の preset で Kick Participants(kick_participant)ホストコントロール権限が有効になっている必要があります。
特定の参加者をセッションから退出させる手順は次のとおりです。
-
ローカルの参加者が、参加者を削除する権限を持っていることを確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI の操作を無効にします。 } -
対象の参加者に対して
kick()を呼び出します。ローカルの参加者が必要な権限を持っていない場合、
kick()はコード1201のClientErrorをスローします。try { await participant.kick(); } catch (err: any) { if (err?.code === 1201) { // ローカルの参加者が参加者を削除する権限を持っていません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功したあと:
- キックされた参加者は
meeting.participants.joinedから削除されます。 - 参加者が含まれていた他の参加者マップからも削除されます(例:
meeting.participants.pinned)。 - SDK は
meeting.participants.joinedでparticipantLeftを発行します。
meeting.participants.joined.on("participantLeft", (participant) => { // UI から参加者のタイルを削除します。 });セッション内の他の参加者も、
participantLeftを通じてその参加者の退出を観測します。 - キックされた参加者は
-
削除された参加者側ではセッションが切断され、
meeting.selfがroomLeftイベントを発行し、state はkickedになります。meeting.self.on("roomLeft", ({ state }) => { if (state === "kicked") { // メッセージを表示し、ユーザーをミーティング UI から退出させます。 } });
-
ローカルの参加者が、参加者を削除する権限を持っていることを確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI の操作を無効にします。 } -
対象の参加者に対して
kick()を呼び出します。ローカルの参加者が必要な権限を持っていない場合、
kick()はコード1201のClientErrorをスローします。try { await participant.kick(); } catch (err: any) { if (err?.code === 1201) { // ローカルの参加者が参加者を削除する権限を持っていません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功したあと:
- キックされた参加者は
meeting.participants.joinedから削除されます。 - 参加者が含まれていた他の参加者マップからも削除されます(例:
meeting.participants.pinned)。 - SDK は
meeting.participants.joinedでparticipantLeftを発行します。
meeting.participants.joined.on("participantLeft", (participant) => { // UI から参加者のタイルを削除します。 });セッション内の他の参加者も、
participantLeftを通じてその参加者の退出を観測します。 - キックされた参加者は
-
削除された参加者側ではセッションが切断され、
meeting.selfがroomLeftイベントを発行し、state はkickedになります。meeting.self.on("roomLeft", ({ state }) => { if (state === "kicked") { // メッセージを表示し、ユーザーをミーティング UI から退出させます。 } });
-
ローカルの参加者が、参加者を削除する権限を持っていることを確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI の操作を無効にします。 } -
対象の参加者に対して
kick()を呼び出します。ローカルの参加者が必要な権限を持っていない場合、
kick()はコード1201のClientErrorをスローします。try { await participant.kick(); } catch (err: any) { if (err?.code === 1201) { // ローカルの参加者が参加者を削除する権限を持っていません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功したあと:
- キックされた参加者は
meeting.participants.joinedから削除されます。 - 参加者が含まれていた他の参加者マップからも削除されます(例:
meeting.participants.pinned)。 - SDK は
meeting.participants.joinedでparticipantLeftを発行します。
meeting.participants.joined.on("participantLeft", (participant) => { // UI から参加者のタイルを削除します。 });セッション内の他の参加者も、
participantLeftを通じてその参加者の退出を観測します。 - キックされた参加者は
-
削除された参加者側ではセッションが切断され、
meeting.selfがroomLeftイベントを発行し、state はkickedになります。meeting.self.on("roomLeft", ({ state }) => { if (state === "kicked") { // メッセージを表示し、ユーザーをミーティング UI から退出させます。 } });
- ローカル参加者に、参加者を退出させる権限があることを確認します。
val canKickParticipant = meeting.localUser.permissions.host.canKickParticipant
if (!canKickParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
kick()を呼び出します。ローカル参加者に必要な権限がない場合、kick()はHostErrorを返します。
val error = participant.kick()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、退出させた参加者は
meeting.participants.joinedから削除されます。
meeting.addParticipantsEventListener(object : RtkParticipantsEventListener {
override fun onParticipantLeave(participant: RtkRemoteParticipant) {
// Remove the participant tile from the UI.
}
})- ローカル参加者に、参加者を退出させる権限があることを確認します。
let canKickParticipant = meeting.localUser.permissions.host.canKickParticipant
if !canKickParticipant {
// Disable the control in your UI.
}- 対象の参加者に対して
kick()を呼び出します。ローカル参加者に必要な権限がない場合、kick()はHostErrorを返します。
if let error = participant.kick() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、退出させた参加者は
meeting.participants.joinedから削除されます。
extension MeetingViewModel: RtkParticipantsEventListener {
func onParticipantLeave(participant: RtkRemoteParticipant) {
// Remove the participant tile from the UI.
}
}
// Register the listener
meeting.addParticipantsEventListener(participantsEventListener: self)- ローカル参加者に、参加者を退出させる権限があることを確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant;
if (!canKickParticipant) {
// Disable the control in your UI.
}- 対象の参加者に対して
kick()を呼び出します。
participant
.kick()
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、退出させた参加者は
meeting.participants.joinedから削除されます。
meeting.participants.joined.on('participantLeft', (participant) => {
// Remove the participant tile from the UI.
});ローカル参加者を含む全員がセッションから退出します。セッションは全員に対して終了します。
セッションを終了する一連の流れは、セッションを終了する を参照してください。
セッションから全員を退出させる手順は次のとおりです。
-
ローカル参加者が、参加者を削除する権限を持っているか確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI でコントロールを無効にします。 } -
kickAll()を呼び出します。ローカル参加者に必要な権限がない場合、
kickAll()はコード1201のClientErrorをスローします。try { await meeting.participants.kickAll(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者に、参加者を削除する権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、全参加者がセッションを退出します。各クライアントで、
meeting.selfはstateがendedのroomLeftを発行します。meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // メッセージを表示し、ミーティング UI からユーザーを移動します。 } });
-
ローカル参加者が、参加者を削除する権限を持っているか確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI でコントロールを無効にします。 } -
kickAll()を呼び出します。ローカル参加者に必要な権限がない場合、
kickAll()はコード1201のClientErrorをスローします。try { await meeting.participants.kickAll(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者に、参加者を削除する権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、全参加者がセッションを退出します。各クライアントで、
meeting.selfはstateがendedのroomLeftを発行します。meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // メッセージを表示し、ミーティング UI からユーザーを移動します。 } });
-
ローカル参加者が、参加者を削除する権限を持っているか確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant === true; if (!canKickParticipant) { // UI でコントロールを無効にします。 } -
kickAll()を呼び出します。ローカル参加者に必要な権限がない場合、
kickAll()はコード1201のClientErrorをスローします。try { await meeting.participants.kickAll(); } catch (err: any) { if (err?.code === 1201) { // ローカル参加者に、参加者を削除する権限がありません。 return; } throw err; } -
更新をリッスンして結果を処理します。
呼び出しが成功すると、全参加者がセッションを退出します。各クライアントで、
meeting.selfはstateがendedのroomLeftを発行します。meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // メッセージを表示し、ミーティング UI からユーザーを移動します。 } });
- ローカル参加者に、参加者を退出させる権限があることを確認します。
val canKickParticipant = meeting.localUser.permissions.host.canKickParticipant
if (!canKickParticipant) {
// Disable the control in your UI.
}- participants オブジェクトに対して
kickAll()を呼び出します。ローカル参加者に必要な権限がない場合、kickAll()はHostErrorを返します。
val error = meeting.participants.kickAll()
if (error != null) {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、すべての参加者がセッションを退出します。
meeting.addMeetingRoomEventListener(object : RtkMeetingRoomEventListener {
override fun onMeetingEnded() {
// Show a message and navigate the user out of the meeting UI.
}
})- ローカル参加者に、参加者を退出させる権限があることを確認します。
let canKickParticipant = meeting.localUser.permissions.host.canKickParticipant
if !canKickParticipant {
// Disable the control in your UI.
}- participants オブジェクトに対して
kickAll()を呼び出します。ローカル参加者に必要な権限がない場合、kickAll()はHostErrorを返します。
if let error = meeting.participants.kickAll() {
// Handle error - permission denied.
}- 更新をリッスンして結果を処理します。呼び出しが成功すると、すべての参加者がセッションを退出します。
extension MeetingViewModel: RtkMeetingRoomEventListener {
func onMeetingEnded() {
// Show a message and navigate the user out of the meeting UI.
}
}
// Register the listener
meeting.addMeetingRoomEventListener(meetingRoomEventListener: self)- ローカル参加者に、参加者を退出させる権限があることを確認します。
const canKickParticipant = meeting.self.permissions.kickParticipant;
if (!canKickParticipant) {
// Disable the control in your UI.
}- participants オブジェクトに対して
kickAll()を呼び出します。
meeting.participants
.kickAll()
.catch((err) => {
// Handle error - permission denied or other issue.
console.log(err);
});- 更新をリッスンして結果を処理します。呼び出しが成功すると、すべての参加者がセッションを退出します。
meeting.self.on('roomLeft', ({ state }) => {
if (state === 'kicked') {
// Show a message and navigate the user out of the meeting UI.
}
});