ミュート状態の共有および制御
ミュートとは、マイクに入力されたオーディオの送信を無効にすることをいいます。ローカルオーディオのミュート/ミュート解除を操作し、アプリケーションのミュート状態をピアと共有できます。また、特定のピアもしくはすべてのピアにミュート/ミュート解除をリクエストすることもできます。
PlanetKit 6.0以前では、ミュートの制御がマイクの作動に直接的な影響を及ぼすことはありませんでした。しかし、PlanetKit 6.0からミュートの制御が次のようにマイクを制御します。
- ローカルオーディオをミュートにすると、PlanetKitがマイクをオフにしてオーディオ送信を無効にするため、マイクインジケーター(microphone indicator)がオフになります。
- ローカルオーディオのミュートを解除すると、PlanetKitがマイクをオンにしてオーディオ送信を有効にするため、マイクインジケーターがオンになります。
ローカルオーディオのミュート制御および共有
通話タイプ別にローカルオーディオをミュートまたはミュート解除する方法について説明します。
1対1通話
1対1通話でローカルオーディオをミュートまたはミュート解除するには、MuteMyAudio()を使用します。ローカルオーディオのミュート状態の変更は、OnPeerMicMutedまたはOnPeerMicUnmutedを介してピアに転送されます。
次の図は、1対1通話でローカルオーディオをミュートまたはミュート解除するフローを示しています。
関連するサンプルコードは次のとおりです。
ローカルオーディオをミュートまたはミュート解除する
// bMute: true for mute, false for unmute
void MuteMyAudioExample(PlanetKit::PlanetKitCallPtr pCall, bool bMute)
{
std::wcout << L"MuteMyAudio(bMute=" << (bMute ? L"true" : L"false") << L")" << std::endl;
pCall->MuteMyAudio(bMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
ピア側で関連イベントを処理する
class CallEventListener : public PlanetKit::ICallEvent {
public:
...
void OnPeerMicMuted(PlanetKitCallPtr pPlanetKitCall) override {
// This is called when the peer changed their microphone status to be muted.
// Write your own code here.
}
void OnPeerMicUnmuted(PlanetKitCallPtr pPlanetKitCall) override {
// This is called when the peer changed their microphone status to be unmuted.
// Write your own code here.
}
}
グループ通話
グループ通話でローカルオーディオをミュートまたはミュート解除するには、MuteMyAudio()を使用します。ローカルオーディオのミュート状態の変更は、OnPeersMicMutedまたはOnPeersMicUnmutedを介してピアに転送されます。
次の図は、グループ通話でローカルオーディオをミュートまたはミュート解除するフローを示しています。
関連するサンプルコードは次のとおりです。
ローカルオーディオをミュートまたはミュート解除する
// bMute: true for mute, false for unmute
void MuteMyAudioExample(PlanetKit::PlanetKitConferencePtr pConference, bool bMute)
{
std::wcout << L"MuteMyAudio(bMute=" << (bMute ? L"true" : L"false") << L")" << std::endl;
pConference->MuteMyAudio(bMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
ピア側で関連イベントを処理する
class ConferenceEventListener : public PlanetKit::IConferenceEvent {
public:
...
void OnPeersMicMuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeers) override {
// This is called when one or more peers changed their microphone status to be muted.
// Write your own code here.
}
void OnPeersMicUnmuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeers) override {
// This is called when one or more peers changed their microphone status to be unmuted.
// Write your own code here.
}
}
リモートオーディオにおけるミュートのリクエスト
通話タイプ別にリモートオーディオのミュートまたはミュート解除をリクエストする方法について説明します。
ピアがリクエストを受けた際にオーディオをミュート/ミュート解除するかどうかは、実装によって異なります。
以下の例では、ピアがリクエストに応じてミュートまたはミュート解除を行うと仮定します。
1対1通話
1対1通話でピアにミュートまたはミュート解除をリクエストするには、RequestPeerMute()を使用します。このリクエストはOnReceivedMuteMyAudioRequestを介してピアに転送され、リモートオーディオのミュート状態の変更はOnPeerMicMutedまたはOnPeerMicUnmutedを介してローカルユーザーに転送されます。
次の図は、1対1通話でリモートオーディオのミュートまたはミュート解除をリクエストするフローを示しています。
関連するサンプルコードは次のとおりです。
リモートオーディオのミュートまたはミュート解除をリクエストする
// bMute: true for mute, false for unmute
void RequestPeerMuteExample(PlanetKit::PlanetKitCallPtr pCall, bool bMute)
{
std::wcout << L"RequestPeerMute(bMute=" << (bMute ? L"true" : L"false") << L")" << std::endl;
pCall->RequestPeerMute(bMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
ピア側で関連イベントを処理する
class CallEventListener : public PlanetKit::ICallEvent {
public:
...
// This is called when the peer requests the local user to mute or unmute the microphone.
void OnReceivedMuteMyAudioRequest(PlanetKitCallPtr pPlanetKitCall, bool bEnableMute) override {
std::wcout << L"MuteMyAudio(bMute=" << (bEnableMute ? L"true" : L"false") << L")" << std::endl;
pPlanetKitCall->MuteMyAudio(bEnableMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
}
グループ通話
グループ通話では、特定のピアまたはすべてのピアにオーディオをミュートまたはミュート解除するようにリクエストできます。
- 特定のピアにミュートまたはミュート解除をリクエストするには、
RequestPeerMute()を使用します。 - すべてのピアにミュートまたはミュート解除をリクエストするには、
RequestPeersMute()を使用します。
このリクエストはOnReceivedMuteMyAudioRequestを介してピアに転送され、リモートオーディオのミュート状態の変更はOnPeersMicMutedまたはOnPeersMicUnmutedを介してローカルユーザーに転送されます。
次の図は、グループ通話でリモートオーディオのミュートまたはミュート解除をリクエストするフローを示しています。
関連するサンプルコードは次のとおりです。
リモートオーディオのミュートまたはミュート解除をリクエストする
// Request mute for single peer
// bMute: true for mute, false for unmute
void RequestPeerMuteExample(PlanetKit::PlanetKitConferencePtr pConference, PlanetKit::UserIdPtr pPeerId, bool bMute)
{
std::wcout << L"RequestPeerMute(bMute=" << (bMute ? L"true" : L"false") << L")" << std::endl;
pConference->RequestPeerMute(pPeerId, bMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L"RequestPeerMute(bMute=" << (bMute ? L"true" : L"false")
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
// Request mute for all peers
// bMute: true for mute, false for unmute
void RequestPeersMuteExample(PlanetKit::PlanetKitConferencePtr pConference, bool bMute)
{
std::wcout << L"RequestPeersMute(bMute=" << (bMute ? L"true" : L"false") << L")" << std::endl;
pConference->RequestPeersMute(bMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
ピア側で関連イベントを処理する
class ConferenceEventListener : public PlanetKit::IConferenceEvent {
public:
...
// This is called when the peer requests the local user to mute or unmute the microphone.
void OnReceivedMuteMyAudioRequest(PlanetKitConferencePtr pPlanetKitConference, PeerPtr pPeer, bool bEnableMute) override {
std::wcout << L"MuteMyAudio(bMute=" << (bEnableMute ? L"true" : L"false") << L")" << std::endl;
pPlanetKitConference->MuteMyAudio(bEnableMute, nullptr, [](void*, bool bSuccess) {
std::wcout
<< L") result: " << (bSuccess ? L"true" : L"false")
<< std::endl;
});
}
}
関連API
ミュートの制御とミュート状態の共有に関連するAPIは次のとおりです。
1対1通話
メソッド
イベント
グループ通話
メソッド
-
PlanetKitConference::MuteMyAudio() -
PlanetKitConference::RequestPeerMute() -
PlanetKitConference::RequestPeersMute()