User Facing Diagnostics

Azure Communication Services で通話をしているとき、顧客に影響を及ぼす問題が発生する場合があります。 この問題に対処するため、Communication Services には、通話のさまざまなプロパティを調べて問題の原因を探る、"User Facing Diagnostics" (UFD) という機能が用意されています。 User Facing Diagnostics とは、根本的な問題 (ネットワークが不十分である、ユーザーのマイクがミュートされているなど) が原因でユーザーのエクスペリエンスが低下している可能性があることを示すために発生するイベントです。 User Facing Diagnostics が発生した後、根本的な問題が発生している可能性があることを示すフィードバックをエンドユーザーに提供することを検討する必要があります。 ただし、User Facing Diagnostics 出力は情報提供のみを目的としており、呼び出し元スタックにより、発生している User Facing Diagnostics に基づいて変更が加えられることはありません。

診断値

次の対ユーザー診断を利用できます。

ネットワーク値

名前 説明 有効値 ユース ケース 軽減の手順
noNetwork 利用できるネットワークがありません。 - 利用できるネットワークがないことを理由に通話に失敗したときに、True に設定されます。
- ICE 候補が存在する場合には、False に設定されます。
デバイスがネットワークに接続されていません。 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク最適化 セクションを参照してください。
networkRelaysNotReachable ネットワークに問題があります。 - Azure Communication Services リレーに到達できなくなるような制約がネットワークに存在するときに、True に設定されます。
- 新しい通話を発信すると、False に設定されます。
通話中に Wi-Fi 信号のオンとオフが切り替わったとき。 ファイアウォール規則とネットワーク ルーティングによって、クライアントが Microsoft のターン サーバーに到達できる必要があります。 詳細については、「ファイアウォールの構成」セクションをご覧ください。
networkReconnect 接続が失われ、ネットワークに再度接続しています。 - ネットワークへの接続が切れると、Bad に設定されます
- メディア転送接続が失われると、Poor に設定されます
- 新しいセッションが接続済みになると、Good に設定されます。
帯域幅が狭い、インターネット接続がない 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。
networkReceiveQuality 受信ストリームの品質に関するインジケーターです。 - ストリームの受信に深刻な問題があるときに、Bad に設定されます。
- ストリームの受信に中等度の問題があるときに、Poor に設定されます。
- ストリームの受信に問題がないときに、Good に設定されます。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 使用可能なインターネット帯域幅を節約するために、カメラをオフにすることをエンド ユーザーに提案してください。
networkSendQuality 送信ストリームの品質の指標。 - ストリームの送信に重大な問題があるときに、Bad に設定されます。
- ストリームの送信に軽微な問題があるときに、Poor に設定されます。
- ストリームの送信に問題がないときに、Good に設定されます。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 また、使用可能なインターネット帯域幅を節約するために、カメラをオフにすることをエンド ユーザーに提案してください。

オーディオ値

名前 説明 有効値 ユース ケース 軽減の手順
noSpeakerDevicesEnumerated ユーザーのシステムにオーディオ出力デバイス (スピーカー) がありません。 - システムにスピーカー デバイスがなく、スピーカー選択がサポートされている場合には、True に設定されます。
- システムにスピーカー デバイスが少なくとも 1 つあり、スピーカー選択がサポートされているときに、False に設定されます。
スピーカーがすべて取り外されている 値が True に設定されている場合は、現在の通話セッションで話者が利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。
speakingWhileMicrophoneIsMuted 話をしているものの、ミュート中です。 - ローカルのマイクがミュートになっている間にローカル ユーザーが話をしていると、True に設定されます。
- ローカルのユーザーが話すのをやめるか、マイクのミュートを解除すると False になります。
注: WebRTC の統計情報から音声レベルのサンプルを取得するため、現在 Safari ではこの項目をサポートしていません。
通話中にマイクをミュートした状態で話をする。 値が True に設定されている場合は、話していて、オーディオがミュートされていることに気付いていない可能性があるという視覚的な通知をエンド ユーザーに与えることを検討してください。
noMicrophoneDevicesEnumerated ユーザーのシステムにオーディオ キャプチャ デバイス (マイク) がありません - システムにマイク デバイスがない場合には、True に設定されます。
- システムにマイク デバイスが 1 つ以上あるときに、False に設定されます。
通話中にマイクがすべて取り外される。 値が True に設定されている場合は、現在の通話セッションでマイクが利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。 詳細は、「デバイス マネージャーからマイクを有効にする」を参照してください。
microphoneNotFunctioning マイクが機能していません。 - マイク デバイスがシステムで無効になっている可能性があるか、別のプロセスで使用されていることが原因でローカル オーディオ ストリームの送信開始に失敗した場合には、True に設定されます。 この UFD の発生には、約 10 秒かかります。
- マイクがオーディオ ストリームの送信を正常に再開した場合には、False に設定されます。
利用できるマイクがない、システムでマイクへのアクセスが無効になっている 値を True に設定して、マイクに問題があるという視覚的通知をエンド ユーザーに提供する場合。
microphoneMuteUnexpectedly マイクがミュートになっています - マイクが予期せずミュート状態になった場合には、True に設定されます。
- マイクがオーディオ ストリームの送信を正常に開始した場合には、False に設定されます
マイクがシステムからミュートに設定されています。 ほとんどの場合、ユーザーがモバイル デバイスで Azure Communication Services 通話中に電話がかかってきた場合に発生します。 ほとんどの場合、ユーザーが電話に応答できるよう、オペレーティング システムは Azure Communication Services 通話をミュートします。 値が True に設定されている場合は、通話が受信されたため、通話がミュートされたという視覚的な通知をエンド ユーザーに提供します。 詳細については、Azure Communication Services 通話をミュートする OS の最適な処理方法のセクションを参照してください。
microphonePermissionDenied macOS でデバイスの音量が小さいか、ほぼ無音の状態になっています。 - システム設定 (オーディオ) からオーディオへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS でのみ機能します。
設定でマイクへのアクセス許可が無効になっている。 値が True に設定されている場合は、Azure Communication Services 通話にマイクを使用するアクセス許可を有効にしなかったことをエンド ユーザーに視覚的に通知します。

カメラの値

名前 説明 有効値 ユース ケース 軽減の手順
cameraFreeze カメラのフレーム生成が 5 秒以上停止しています。 - ローカル ビデオ ストリームが停止していると、True に設定されます。 この診断は、自分のビデオがリモートの相手側では停止して見えているか、リモート参加者がビデオを画面にレンダリングできていないことを意味します。
- 停止状態が解消し、相手側でビデオが通常どおり表示されるようになると、False に設定されます。
通話中にカメラが失われたか、ネットワークの状態が悪いためにカメラが停止した。 値が True に設定されている場合、リモート参加者ネットワークが悪い可能性があるという通知をエンド ユーザーに提供する場合は、帯域幅を節約するためにカメラをオフにしてください。 詳細については、Azure Communication Services 通話に必要なインターネット機能に関する「ネットワーク帯域幅の要件」セクションを参照してください。
cameraStartFailed カメラの障害全般です。 - カメラ デバイスがシステムで無効になっている可能性があるか、別のプロセスで使用されていることが原因でローカル ビデオの送信開始に失敗した場合には、True に設定されます。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合は、カメラの起動に失敗したという視覚的な通知をエンド ユーザーに提供します。
cameraStartTimedOut カメラの状態が悪い場合に共通するシナリオです。 - カメラ デバイスがビデオ ストリームの送信を開始する際にタイムアウトになった場合には、True に設定されます。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。
cameraPermissionDenied カメラへのアクセス許可が設定で拒否されました。 - システム設定 (ビデオ) からカメラへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS の Chrome でのみ機能します。
設定でカメラへのアクセス許可が無効になっている。 値が True に設定されている場合は、Azure Communication Services 通話にカメラを使用するアクセス許可を有効にしなかったことをエンド ユーザーに視覚的に通知します。
cameraStoppedUnexpectedly カメラの不具合 - カメラが予期しない停止状態になると True になります。
- カメラが起動して動画ストリームの送信を再開すると False になります。
カメラが正しく動作しているかどうかを確認します。 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。

その他の値

名前 説明 有効値 ユース ケース 軽減策の手順
screenshareRecordingDisabled システムの画面共有が、設定から拒否されました。 - システム設定 (共有) から画面共有のためのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS の Chrome でのみ機能します。
設定で画面のレコーディングが無効になっている。 値が True に設定されている場合は、Azure Communication Services 通話に画面を共有するためのアクセス許可を有効にしなかったことをエンド ユーザーに視覚的に通知します。
capturerStartFailed システム画面の共有に失敗しました。 - 画面の録画の開始に失敗すると True になります。
- 画面の録画を開始すると False になります。
値が True に設定されている場合は、画面の共有に問題が発生した可能性があるという視覚的な通知をエンド ユーザーに提供します。 (値が False に設定し戻されている場合、通知を削除します)。
capturerStoppedUnexpectedly システム画面の共有の不具合 - 画面の録画が予期しない停止状態になると True になります。
- 画面の録画を再開すると False になります。
画面共有が正しく機能しているかどうかを確認します 値が Trueに設定されている場合、画面共有が停止するような問題が発生している可能性があることをエンドユーザーに視覚的に通知します。 (通知を削除するために値が False に設定されている場合)。

診断へのアクセス

対ユーザー診断はコア Call API の拡張機能であり、実行中の通話の診断ができます。

const userFacingDiagnostics = call.feature(Features.UserFacingDiagnostics);

User Facing Diagnostic イベント

  • diagnosticChanged イベントをサブスクライブして、対ユーザー診断の変化をモニターします。
/**
 *  Each diagnostic has the following data:
 * - diagnostic is the type of diagnostic, e.g. NetworkSendQuality, DeviceSpeakWhileMuted, etc...
 * - value is DiagnosticQuality or DiagnosticFlag:
 *     - DiagnosticQuality = enum { Good = 1, Poor = 2, Bad = 3 }.
 *     - DiagnosticFlag = true | false.
 * - valueType = 'DiagnosticQuality' | 'DiagnosticFlag'
 */
const diagnosticChangedListener = (diagnosticInfo: NetworkDiagnosticChangedEventArgs | MediaDiagnosticChangedEventArgs) => {
    console.log(`Diagnostic changed: ` +
        `Diagnostic: ${diagnosticInfo.diagnostic}` +
        `Value: ${diagnosticInfo.value}` +
        `Value type: ${diagnosticInfo.valueType}`);

    if (diagnosticInfo.valueType === 'DiagnosticQuality') {
        if (diagnosticInfo.value === DiagnosticQuality.Bad) {
            console.error(`${diagnosticInfo.diagnostic} is bad quality`);

        } else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
            console.error(`${diagnosticInfo.diagnostic} is poor quality`);
        }

    } else if (diagnosticInfo.valueType === 'DiagnosticFlag') {
        if (diagnosticInfo.value === true) {
            console.error(`${diagnosticInfo.diagnostic}`);
        }
    }
};

userFacingDiagnostics.network.on('diagnosticChanged', diagnosticChangedListener);
userFacingDiagnostics.media.on('diagnosticChanged', diagnosticChangedListener);

最新の User Facing Diagnostics を取得する

  • 出力された最新の診断値を取得します。 診断が定義されていないときは、一度も発生していないことを意味します。
const latestNetworkDiagnostics = userFacingDiagnostics.network.getLatest();

console.log(
  `noNetwork: ${latestNetworkDiagnostics.noNetwork.value}, ` +
    `value type = ${latestNetworkDiagnostics.noNetwork.valueType}`
);

console.log(
  `networkReconnect: ${latestNetworkDiagnostics.networkReconnect.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReconnect.valueType}`
);

console.log(
  `networkReceiveQuality: ${latestNetworkDiagnostics.networkReceiveQuality.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReceiveQuality.valueType}`
);

const latestMediaDiagnostics = userFacingDiagnostics.media.getLatest();

console.log(
  `speakingWhileMicrophoneIsMuted: ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.value}, ` +
    `value type = ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.valueType}`
);

console.log(
  `cameraStartFailed: ${latestMediaDiagnostics.cameraStartFailed.value}, ` +
    `value type = ${latestMediaDiagnostics.cameraStartFailed.valueType}`
);

console.log(
  `microphoneNotFunctioning: ${latestMediaDiagnostics.microphoneNotFunctioning.value}, ` +
    `value type = ${latestMediaDiagnostics.microphoneNotFunctioning.valueType}`
);

診断値

次の対ユーザー診断を利用できます。

ネットワーク値

名前 説明 有効値 ユース ケース 軽減の手順
networkUnavailable 利用できるネットワークがありません。 - 利用できるネットワークがないことを理由に通話に失敗したときに、True に設定されます。
- ICE 候補が存在する場合には、False に設定されます。
デバイスがネットワークに接続されていません。 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク最適化 セクションを参照してください。
networkRelaysUnreachable ネットワークに問題があります。 - Azure Communication Services リレーに到達できなくなるような制約がネットワークに存在するときに、True に設定されます。
- 新しい通話を発信すると、False に設定されます。
通話中に Wi-Fi 信号のオンとオフが切り替わったとき。 ファイアウォール規則とネットワーク ルーティングによって、クライアントが Microsoft のターン サーバーに到達できる必要があります。 詳細については、「ファイアウォールの構成」セクションをご覧ください。
networkReconnectionQuality 接続が失われ、ネットワークに再接続しています。 - ネットワークへの接続が切れると、Bad に設定されます
- メディア転送接続が失われると、Poor に設定されます
- 新しいセッションが接続済みになると、Good に設定されます。
帯域幅が狭い、インターネット接続がない 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。
networkReceiveQuality 受信ストリームの品質に関するインジケーターです。 - ストリームの受信に深刻な問題があるときに、Bad に設定されます。
- ストリームの受信に中等度の問題があるときに、Poor に設定されます。
- ストリームの受信に問題がないときに、Good に設定されます。
- 通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。
networkSendQuality 送信ストリームの品質の指標。 - ストリームの送信に重大な問題があるときに、Bad に設定されます。
- ストリームの送信に軽微な問題があるときに、Poor に設定されます。
- ストリームの送信に問題がないときに、Good に設定されます。
- 品質診断の受信と同様に、通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。 ただし、品質を確認するために反対側からの情報に依存するため、1 対 1 の呼び出しでのみ機能します。 相手側が受信したデータを通知する必要がある場所。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 また、エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。

オーディオ値

名前 説明 有効値 ユース ケース 軽減の手順
noSpeakerDevicesAvailable ユーザーのシステムにオーディオ出力デバイス (スピーカー) がありません。 - システムにスピーカー デバイスがなく、スピーカー選択がサポートされている場合には、True に設定されます。
- システムにスピーカー デバイスが少なくとも 1 つあり、スピーカー選択がサポートされているときに、False に設定されます。
スピーカーがすべて取り外されている 値が True に設定されている場合は、現在の通話セッションで話者が利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。
speakingWhileMicrophoneIsMuted 話をしているものの、ミュート中です。 - ローカルのマイクがミュートになっている間にローカル ユーザーが話をしていると、True に設定されます。
- ローカルのユーザーが話すのをやめるか、マイクのミュートを解除すると False になります。
- この診断イベントは、ノイズを回避し、ユーザー エクスペリエンスを向上させるために、ユーザーアクションなしで一定の時間トリガーされた場合に自動的に無効にすることができます。 新しいミュート アクションが発生すると、再度有効になります。
通話中にマイクをミュートした状態で話をする。 値が True に設定されている場合は、話していて、オーディオがミュートされていることに気付いていない可能性があるという視覚的な通知をエンド ユーザーに与えることを検討してください。
noMicrophoneDevicesAvailable ユーザーのシステムにオーディオ キャプチャ デバイス (マイク) がありません - システムにマイク デバイスがない場合には、True に設定されます。
- システムにマイク デバイスが 1 つ以上あるときに、False に設定されます。
通話中にマイクがすべて取り外される。 値が True に設定されている場合は、現在の通話セッションでマイクが利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。 詳細は、「デバイス マネージャーからマイクを有効にする」を参照してください。
microphoneNotFunctioning マイクが機能していません。 - マイク デバイスがシステムで無効になっているか、別のプロセスで使用されている可能性があるため、ローカル オーディオ ストリームの送信を開始できない場合に設定 True します。 この UFD の発生には、約 10 秒かかります。
- マイクがオーディオ ストリームの送信を正常に再開した場合には、False に設定されます。
利用できるマイクがない、システムでマイクへのアクセスが無効になっている 値を True に設定して、マイクに問題があるという視覚的通知をエンド ユーザーに提供する場合。
microphoneMuteUnexpectedly マイクがミュートになっています - マイクが予期せずミュート状態になった場合には、True に設定されます。
- マイクがオーディオ ストリームの送信を正常に開始した場合には、False に設定されます
マイクがシステムからミュートに設定されています。 ほとんどの場合、ユーザーがモバイル デバイスで Azure Communication Services 通話中に電話がかかってきた場合に発生します。 ほとんどの場合、ユーザーが電話に応答できるよう、オペレーティング システムは Azure Communication Services 通話をミュートします。 値が True に設定されている場合は、通話が受信されたため、通話がミュートされたという視覚的な通知をエンド ユーザーに提供します。 詳細については、Azure Communication Services 通話をミュートする OS の最適な処理方法のセクションを参照してください。
microphonePermissionDenied macOS でデバイスの音量が小さいか、ほぼ無音の状態になっています。 - システム設定 (オーディオ) からオーディオへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS でのみ機能します。
設定でマイクへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにマイクを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。

カメラの値

名前 説明 有効値 ユース ケース 軽減の手順
cameraFrozen カメラのフレーム生成が 5 秒以上停止しています。 - ローカル ビデオ ストリームが停止していると、True に設定されます。 この診断は、リモート側でビデオが画面に固定されていることを意味します。または、リモート参加者が自分の画面にビデオをレンダリングしていないことを意味します。
- 停止状態が解消し、相手側でビデオが通常どおり表示されるようになると、False に設定されます。
通話中にカメラが失われたか、ネットワークの状態が悪いためにカメラが停止した。 値が True に設定されている場合、リモート参加者ネットワークが悪い可能性があるという通知をエンド ユーザーに提供する場合は、帯域幅を節約するためにカメラをオフにしてください。 詳細については、Azure Communication Services 通話に必要なインターネット機能に関する「ネットワーク帯域幅の要件」セクションを参照してください。
cameraStartFailed カメラの障害全般です。 - カメラ デバイスがシステムで無効になっているか、別のプロセスで使用されているため、ローカル ビデオの送信を開始できない場合に設定 True します。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合は、カメラの起動に失敗したという視覚的な通知をエンド ユーザーに提供します。
cameraStartTimedOut カメラの状態が悪い場合に共通するシナリオです。 - カメラ デバイスがビデオ ストリームの送信を開始する際にタイムアウトになった場合には、True に設定されます。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。
cameraPermissionDenied カメラへのアクセス許可が設定で拒否されました。 - システム設定 (ビデオ) からカメラへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS の Chrome でのみ機能します。
設定でカメラへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにカメラを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。
cameraStoppedUnexpectedly カメラの不具合 - カメラが予期しない停止状態になると True になります。
- カメラが起動して動画ストリームの送信を再開すると False になります。
カメラが正しく動作しているかどうかを確認します。 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。

ネイティブのみ

名前 説明 有効値 ユース ケース 軽減策の手順
speakerVolumeIsZero デバイス (スピーカー) のボリュームが 0 です。 - スピーカーのボリュームが 0 であるときに、True に設定されます。
- スピーカーの False 音量が 0 でない場合に設定します。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤って最小 (ゼロ) になる可能性があります。
speakerMuted スピーカー デバイスがミュートされています。 - スピーカー デバイスがミュートされているときに、True に設定されます。
- スピーカー デバイスがミュートされていないときに、False に設定されます。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤ってミュートされる可能性があります。
speakerBusy スピーカーは既に使用中です。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - スピーカー デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 値が Trueに設定されている場合は、別のアプリケーションがスピーカーを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。
speakerNotFunctioning スピーカーが機能していない (オーディオ デバイス クライアントを初期化できなかったか、デバイスが 5 秒を超えて非アクティブになった) - スピーカーが使用不可であるか、デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 スピーカー デバイスの状態を確認してみてください。
microphoneBusy マイクは既に使用されています。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - マイク デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- マイクの獲得が成功したときに、False に設定されます。
音声が通話の他の参加者に届いていません。 値が Trueに設定されている場合は、別のアプリケーションがマイクを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。

診断へのアクセス

対ユーザー診断はコア Call API の拡張機能であり、実行中の通話の診断ができます。

DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

User Facing Diagnostic イベント

  • 機能オブジェクトを取得し、診断イベントにリスナーを追加します。
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

/* NetworkDiagnostic */
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for no network diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkUnreachableChangedListener(listener);

// To remove listener for network quality event
networkDiagnostics.removeOnNetworkUnreachableChangedListener(listener);

// Quality Diagnostics
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
QualityDiagnosticChangedListener listener = (QualityDiagnosticChangedEvent args) -> {
  DiagnosticQuality diagnosticQuality = args.getValue();
  // Handle new value for network reconnect diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkReconnectionQualityChangedListener(listener);

// To remove listener for media flag event
networkDiagnostics.removeOnNetworkReconnectionQualityChangedListener(listener);

/* MediaDiagnostic */
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for speaker not functioning diagnostic.
};

MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
mediaDiagnostics.addOnIsSpeakerNotFunctioningChangedListener(listener);

// To remove listener for media flag event
mediaDiagnostics.removeOnIsSpeakerNotFunctioningChangedListener(listener);

最新の User Facing Diagnostics を取得する

  • 現在の通話で出力された最新の診断値を取得します。 診断の値をまだ受け取っていない場合は、例外がスローされます。
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetwork();
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();

NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatestDiagnostics();
Boolean lastNetworkValue = latestNetwork.isNetworkUnavailable(); // null if there isn't a value for this diagnostic.
DiagnosticQuality lastReceiveQualityValue = latestNetwork.getNetworkReceiveQuality(); //  UNKNOWN if there isn't a value for this diagnostic.

MediaDiagnosticValues latestMedia = networkDiagnostics.getLatestDiagnostics();
Boolean lastSpeakerNotFunctionValue = latestMedia.isSpeakerNotFunctioning(); // null if there isn't a value for this diagnostic.

// Use the last values ...

診断値

次の対ユーザー診断を利用できます。

ネットワーク値

名前 説明 有効値 ユース ケース 軽減の手順
networkUnavailable 利用できるネットワークがありません。 - 利用できるネットワークがないことを理由に通話に失敗したときに、True に設定されます。
- ICE 候補が存在する場合には、False に設定されます。
デバイスがネットワークに接続されていません。 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク最適化 セクションを参照してください。
networkRelaysUnreachable ネットワークに問題があります。 - Azure Communication Services リレーに到達できなくなるような制約がネットワークに存在するときに、True に設定されます。
- 新しい通話を発信すると、False に設定されます。
通話中に Wi-Fi 信号のオンとオフが切り替わったとき。 ファイアウォール規則とネットワーク ルーティングによって、クライアントが Microsoft のターン サーバーに到達できる必要があります。 詳細については、「ファイアウォールの構成」セクションをご覧ください。
networkReconnectionQuality 接続が失われ、ネットワークに再接続しています。 - ネットワークへの接続が切れると、Bad に設定されます
- メディア転送接続が失われると、Poor に設定されます
- 新しいセッションが接続済みになると、Good に設定されます。
帯域幅が狭い、インターネット接続がない 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。
networkReceiveQuality 受信ストリームの品質に関するインジケーターです。 - ストリームの受信に深刻な問題があるときに、Bad に設定されます。
- ストリームの受信に中等度の問題があるときに、Poor に設定されます。
- ストリームの受信に問題がないときに、Good に設定されます。
- 通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。
networkSendQuality 送信ストリームの品質の指標。 - ストリームの送信に重大な問題があるときに、Bad に設定されます。
- ストリームの送信に軽微な問題があるときに、Poor に設定されます。
- ストリームの送信に問題がないときに、Good に設定されます。
- 品質診断の受信と同様に、通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。 ただし、品質を確認するために反対側からの情報に依存するため、1 対 1 の呼び出しでのみ機能します。 相手側が受信したデータを通知する必要がある場所。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 また、エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。

オーディオ値

名前 説明 有効値 ユース ケース 軽減の手順
noSpeakerDevicesAvailable ユーザーのシステムにオーディオ出力デバイス (スピーカー) がありません。 - システムにスピーカー デバイスがなく、スピーカー選択がサポートされている場合には、True に設定されます。
- システムにスピーカー デバイスが少なくとも 1 つあり、スピーカー選択がサポートされているときに、False に設定されます。
スピーカーがすべて取り外されている 値が True に設定されている場合は、現在の通話セッションで話者が利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。
speakingWhileMicrophoneIsMuted 話をしているものの、ミュート中です。 - ローカルのマイクがミュートになっている間にローカル ユーザーが話をしていると、True に設定されます。
- ローカルのユーザーが話すのをやめるか、マイクのミュートを解除すると False になります。
- この診断イベントは、ノイズを回避し、ユーザー エクスペリエンスを向上させるために、ユーザーアクションなしで一定の時間トリガーされた場合に自動的に無効にすることができます。 新しいミュート アクションが発生すると、再度有効になります。
通話中にマイクをミュートした状態で話をする。 値が True に設定されている場合は、話していて、オーディオがミュートされていることに気付いていない可能性があるという視覚的な通知をエンド ユーザーに与えることを検討してください。
noMicrophoneDevicesAvailable ユーザーのシステムにオーディオ キャプチャ デバイス (マイク) がありません - システムにマイク デバイスがない場合には、True に設定されます。
- システムにマイク デバイスが 1 つ以上あるときに、False に設定されます。
通話中にマイクがすべて取り外される。 値が True に設定されている場合は、現在の通話セッションでマイクが利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。 詳細は、「デバイス マネージャーからマイクを有効にする」を参照してください。
microphoneNotFunctioning マイクが機能していません。 - マイク デバイスがシステムで無効になっているか、別のプロセスで使用されている可能性があるため、ローカル オーディオ ストリームの送信を開始できない場合に設定 True します。 この UFD の発生には、約 10 秒かかります。
- マイクがオーディオ ストリームの送信を正常に再開した場合には、False に設定されます。
利用できるマイクがない、システムでマイクへのアクセスが無効になっている 値を True に設定して、マイクに問題があるという視覚的通知をエンド ユーザーに提供する場合。
microphoneMuteUnexpectedly マイクがミュートになっています - マイクが予期せずミュート状態になった場合には、True に設定されます。
- マイクがオーディオ ストリームの送信を正常に開始した場合には、False に設定されます
マイクがシステムからミュートに設定されています。 ほとんどの場合、ユーザーがモバイル デバイスで Azure Communication Services 通話中に電話がかかってきた場合に発生します。 ほとんどの場合、ユーザーが電話に応答できるよう、オペレーティング システムは Azure Communication Services 通話をミュートします。 値が True に設定されている場合は、通話が受信されたため、通話がミュートされたという視覚的な通知をエンド ユーザーに提供します。 詳細については、Azure Communication Services 通話をミュートする OS の最適な処理方法のセクションを参照してください。
microphonePermissionDenied macOS でデバイスの音量が小さいか、ほぼ無音の状態になっています。 - システム設定 (オーディオ) からオーディオへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS でのみ機能します。
設定でマイクへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにマイクを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。

カメラの値

名前 説明 有効値 ユース ケース 軽減の手順
cameraFrozen カメラのフレーム生成が 5 秒以上停止しています。 - ローカル ビデオ ストリームが停止していると、True に設定されます。 この診断は、リモート側でビデオが画面に固定されていることを意味します。または、リモート参加者が自分の画面にビデオをレンダリングしていないことを意味します。
- 停止状態が解消し、相手側でビデオが通常どおり表示されるようになると、False に設定されます。
通話中にカメラが失われたか、ネットワークの状態が悪いためにカメラが停止した。 値が True に設定されている場合、リモート参加者ネットワークが悪い可能性があるという通知をエンド ユーザーに提供する場合は、帯域幅を節約するためにカメラをオフにしてください。 詳細については、Azure Communication Services 通話に必要なインターネット機能に関する「ネットワーク帯域幅の要件」セクションを参照してください。
cameraStartFailed カメラの障害全般です。 - カメラ デバイスがシステムで無効になっているか、別のプロセスで使用されているため、ローカル ビデオの送信を開始できない場合に設定 True します。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合は、カメラの起動に失敗したという視覚的な通知をエンド ユーザーに提供します。
cameraStartTimedOut カメラの状態が悪い場合に共通するシナリオです。 - カメラ デバイスがビデオ ストリームの送信を開始する際にタイムアウトになった場合には、True に設定されます。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。
cameraPermissionDenied カメラへのアクセス許可が設定で拒否されました。 - システム設定 (ビデオ) からカメラへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS の Chrome でのみ機能します。
設定でカメラへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにカメラを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。
cameraStoppedUnexpectedly カメラの不具合 - カメラが予期しない停止状態になると True になります。
- カメラが起動して動画ストリームの送信を再開すると False になります。
カメラが正しく動作しているかどうかを確認します。 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。

ネイティブのみ

名前 説明 有効値 ユース ケース 軽減策の手順
speakerVolumeIsZero デバイス (スピーカー) のボリュームが 0 です。 - スピーカーのボリュームが 0 であるときに、True に設定されます。
- スピーカーの False 音量が 0 でない場合に設定します。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤って最小 (ゼロ) になる可能性があります。
speakerMuted スピーカー デバイスがミュートされています。 - スピーカー デバイスがミュートされているときに、True に設定されます。
- スピーカー デバイスがミュートされていないときに、False に設定されます。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤ってミュートされる可能性があります。
speakerBusy スピーカーは既に使用中です。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - スピーカー デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 値が Trueに設定されている場合は、別のアプリケーションがスピーカーを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。
speakerNotFunctioning スピーカーが機能していない (オーディオ デバイス クライアントを初期化できなかったか、デバイスが 5 秒を超えて非アクティブになった) - スピーカーが使用不可であるか、デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 スピーカー デバイスの状態を確認してみてください。
microphoneBusy マイクは既に使用されています。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - マイク デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- マイクの獲得が成功したときに、False に設定されます。
音声が通話の他の参加者に届いていません。 値が Trueに設定されている場合は、別のアプリケーションがマイクを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。

診断へのアクセス

対ユーザー診断はコア Call API の拡張機能であり、実行中の通話の診断ができます。

let userFacingDiagnostics = self.call?.feature(Features.localUserDiagnostics)

User Facing Diagnostic イベント

  • media および network 診断ソースのデリゲートを実装します。 それぞれ MediaDiagnosticsDelegateNetworkDiagnosticsDelegate
extension CallObserver: MediaDiagnosticsDelegate {
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraFrozen args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartFailed args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerVolumeZero args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraPermissionDenied args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartTimedOut args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneMutedUnexpectedly args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroSpeakerDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...                            
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroMicrophoneDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakingWhileMicrophoneIsMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}

extension CallObserver: NetworkDiagnosticsDelegate {
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkRelaysUnreachable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReconnectionQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkSendQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkUnavailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReceiveQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}
  • media および network 診断への参照を保持し、イベントをリッスンするためのデリゲート オブジェクトを設定します。
self.mediaDiagnostics = userFacingDiagnostics?.media
self.networkDiagnostics = userFacingDiagnostics?.network
self.mediaDiagnostics?.delegate = self.callObserver
self.networkDiagnostics?.delegate = self.callObserver

Note

SDK を使用してCallKit が有効であるか、アプリケーションで CallKit 統合を実装している場合、OS でプライバシー上の理由により、アプリケーションがマイクを保持できなくなる可能性があります。この結果、ユーザーが話していることを検出するためのマイク デバイスからの入力をキャプチャできないため、didIsSpeakingWhileMicrophoneIsMuted イベントが期待どおりに機能しなくなります。

最新の User Facing Diagnostics を取得する

  • 出力された最新の診断値を取得します。 診断の値をまだ受け取っていない場合は、nil または .unknown が返されます。
let lastSpeakerNotFunctionValue = self.mediaDiagnostics.latest.isSpeakerNotFunctioning // Boolean?
let lastNetworkRelayNotReachableValue = self.networkDiagnostics.latest.networkRelaysUnreachable // Boolean?
let lastReceiveQualityValue = self.networkDiagnostics.latest.networkReceiveQuality // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.

診断値

次の対ユーザー診断を利用できます。

ネットワーク値

名前 説明 有効値 ユース ケース 軽減の手順
networkUnavailable 利用できるネットワークがありません。 - 利用できるネットワークがないことを理由に通話に失敗したときに、True に設定されます。
- ICE 候補が存在する場合には、False に設定されます。
デバイスがネットワークに接続されていません。 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク最適化 セクションを参照してください。
networkRelaysUnreachable ネットワークに問題があります。 - Azure Communication Services リレーに到達できなくなるような制約がネットワークに存在するときに、True に設定されます。
- 新しい通話を発信すると、False に設定されます。
通話中に Wi-Fi 信号のオンとオフが切り替わったとき。 ファイアウォール規則とネットワーク ルーティングによって、クライアントが Microsoft のターン サーバーに到達できる必要があります。 詳細については、「ファイアウォールの構成」セクションをご覧ください。
networkReconnectionQuality 接続が失われ、ネットワークに再接続しています。 - ネットワークへの接続が切れると、Bad に設定されます
- メディア転送接続が失われると、Poor に設定されます
- 新しいセッションが接続済みになると、Good に設定されます。
帯域幅が狭い、インターネット接続がない 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。
networkReceiveQuality 受信ストリームの品質に関するインジケーターです。 - ストリームの受信に深刻な問題があるときに、Bad に設定されます。
- ストリームの受信に中等度の問題があるときに、Poor に設定されます。
- ストリームの受信に問題がないときに、Good に設定されます。
- 通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。
networkSendQuality 送信ストリームの品質の指標。 - ストリームの送信に重大な問題があるときに、Bad に設定されます。
- ストリームの送信に軽微な問題があるときに、Poor に設定されます。
- ストリームの送信に問題がないときに、Good に設定されます。
- 品質診断の受信と同様に、通話にアクティブなオーディオ フローがある場合にのみ表示されます。つまり、参加者が一定期間アクティブに話しています。 ただし、品質を確認するために反対側からの情報に依存するため、1 対 1 の呼び出しでのみ機能します。 相手側が受信したデータを通知する必要がある場所。
低帯域幅 通話に、音声通話を維持できる信頼性の高いインターネット接続が設定されている必要があります。 詳細は、「ネットワーク帯域幅の要件」セクションを参照してください。 また、エンド ユーザーがカメラをオフにして、使用可能なインターネット帯域幅を節約することをお勧めします。

オーディオ値

名前 説明 有効値 ユース ケース 軽減の手順
noSpeakerDevicesAvailable ユーザーのシステムにオーディオ出力デバイス (スピーカー) がありません。 - システムにスピーカー デバイスがなく、スピーカー選択がサポートされている場合には、True に設定されます。
- システムにスピーカー デバイスが少なくとも 1 つあり、スピーカー選択がサポートされているときに、False に設定されます。
スピーカーがすべて取り外されている 値が True に設定されている場合は、現在の通話セッションで話者が利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。
speakingWhileMicrophoneIsMuted 話をしているものの、ミュート中です。 - ローカルのマイクがミュートになっている間にローカル ユーザーが話をしていると、True に設定されます。
- ローカルのユーザーが話すのをやめるか、マイクのミュートを解除すると False になります。
- この診断イベントは、ノイズを回避し、ユーザー エクスペリエンスを向上させるために、ユーザーアクションなしで一定の時間トリガーされた場合に自動的に無効にすることができます。 新しいミュート アクションが発生すると、再度有効になります。
通話中にマイクをミュートした状態で話をする。 値が True に設定されている場合は、話していて、オーディオがミュートされていることに気付いていない可能性があるという視覚的な通知をエンド ユーザーに与えることを検討してください。
noMicrophoneDevicesAvailable ユーザーのシステムにオーディオ キャプチャ デバイス (マイク) がありません - システムにマイク デバイスがない場合には、True に設定されます。
- システムにマイク デバイスが 1 つ以上あるときに、False に設定されます。
通話中にマイクがすべて取り外される。 値が True に設定されている場合は、現在の通話セッションでマイクが利用できないという視覚的な通知をエンド ユーザーに与えることを検討してください。 詳細は、「デバイス マネージャーからマイクを有効にする」を参照してください。
microphoneNotFunctioning マイクが機能していません。 - マイク デバイスがシステムで無効になっているか、別のプロセスで使用されている可能性があるため、ローカル オーディオ ストリームの送信を開始できない場合に設定 True します。 この UFD の発生には、約 10 秒かかります。
- マイクがオーディオ ストリームの送信を正常に再開した場合には、False に設定されます。
利用できるマイクがない、システムでマイクへのアクセスが無効になっている 値を True に設定して、マイクに問題があるという視覚的通知をエンド ユーザーに提供する場合。
microphoneMuteUnexpectedly マイクがミュートになっています - マイクが予期せずミュート状態になった場合には、True に設定されます。
- マイクがオーディオ ストリームの送信を正常に開始した場合には、False に設定されます
マイクがシステムからミュートに設定されています。 ほとんどの場合、ユーザーがモバイル デバイスで Azure Communication Services 通話中に電話がかかってきた場合に発生します。 ほとんどの場合、ユーザーが電話に応答できるよう、オペレーティング システムは Azure Communication Services 通話をミュートします。 値が True に設定されている場合は、通話が受信されたため、通話がミュートされたという視覚的な通知をエンド ユーザーに提供します。 詳細については、Azure Communication Services 通話をミュートする OS の最適な処理方法のセクションを参照してください。
microphonePermissionDenied macOS でデバイスの音量が小さいか、ほぼ無音の状態になっています。 - システム設定 (オーディオ) からオーディオへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS でのみ機能します。
設定でマイクへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにマイクを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。

カメラの値

名前 説明 有効値 ユース ケース 軽減の手順
cameraFrozen カメラのフレーム生成が 5 秒以上停止しています。 - ローカル ビデオ ストリームが停止していると、True に設定されます。 この診断は、リモート側でビデオが画面に固定されていることを意味します。または、リモート参加者が自分の画面にビデオをレンダリングしていないことを意味します。
- 停止状態が解消し、相手側でビデオが通常どおり表示されるようになると、False に設定されます。
通話中にカメラが失われたか、ネットワークの状態が悪いためにカメラが停止した。 値が True に設定されている場合、リモート参加者ネットワークが悪い可能性があるという通知をエンド ユーザーに提供する場合は、帯域幅を節約するためにカメラをオフにしてください。 詳細については、Azure Communication Services 通話に必要なインターネット機能に関する「ネットワーク帯域幅の要件」セクションを参照してください。
cameraStartFailed カメラの障害全般です。 - カメラ デバイスがシステムで無効になっているか、別のプロセスで使用されているため、ローカル ビデオの送信を開始できない場合に設定 True します。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合は、カメラの起動に失敗したという視覚的な通知をエンド ユーザーに提供します。
cameraStartTimedOut カメラの状態が悪い場合に共通するシナリオです。 - カメラ デバイスがビデオ ストリームの送信を開始する際にタイムアウトになった場合には、True に設定されます。
- 選択したカメラ デバイスがローカル ビデオの送信を正常に再開した場合には、False に設定されます。
カメラの障害 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。
cameraPermissionDenied カメラへのアクセス許可が設定で拒否されました。 - システム設定 (ビデオ) からカメラへのアクセス許可が拒否されたときに、True に設定されます。
- ストリームの取得に成功した場合には、False に設定されます。
注: この診断は、macOS の Chrome でのみ機能します。
設定でカメラへのアクセス許可が無効になっている。 値が設定 Trueされている場合は、Azure Communication Services 呼び出しにカメラを使用するアクセス許可が有効になっていないことをエンド ユーザーに視覚的に通知します。
cameraStoppedUnexpectedly カメラの不具合 - カメラが予期しない停止状態になると True になります。
- カメラが起動して動画ストリームの送信を再開すると False になります。
カメラが正しく動作しているかどうかを確認します。 値が True に設定されている場合、カメラで問題が発生している可能性があるという視覚的な通知をエンド ユーザーに提供します。 (通知を削除するために値が False に設定されている場合)。

ネイティブのみ

名前 説明 有効値 ユース ケース 軽減策の手順
speakerVolumeIsZero デバイス (スピーカー) のボリュームが 0 です。 - スピーカーのボリュームが 0 であるときに、True に設定されます。
- スピーカーの False 音量が 0 でない場合に設定します。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤って最小 (ゼロ) になる可能性があります。
speakerMuted スピーカー デバイスがミュートされています。 - スピーカー デバイスがミュートされているときに、True に設定されます。
- スピーカー デバイスがミュートされていないときに、False に設定されます。
通話中に参加者から音声が聞こえません。 値が True に設定されている場合、ボリュームが誤ってミュートされる可能性があります。
speakerBusy スピーカーは既に使用中です。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - スピーカー デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 値が Trueに設定されている場合は、別のアプリケーションがスピーカーを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。
speakerNotFunctioning スピーカーが機能していない (オーディオ デバイス クライアントを初期化できなかったか、デバイスが 5 秒を超えて非アクティブになった) - スピーカーが使用不可であるか、デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- スピーカーの獲得が成功したときに、False に設定されます。
通話中に参加者からスピーカーを介して音声が聞こえません。 スピーカー デバイスの状態を確認してみてください。
microphoneBusy マイクは既に使用されています。 デバイスが排他モードで使用されているか、デバイスが共有モードで使用されており、呼び出し元が排他モードでデバイスを使用するように求められています。 - マイク デバイス ストリームの取得がタイムアウト (オーディオ) したときに、True に設定されます。
- マイクの獲得が成功したときに、False に設定されます。
音声が通話の他の参加者に届いていません。 値が Trueに設定されている場合は、別のアプリケーションがマイクを使用しているかどうかを確認し、これを閉じることを試みることができるように、エンド ユーザーに視覚的な通知を送信します。

診断へのアクセス

対ユーザー診断はコア Call API の拡張機能であり、実行中の通話の診断ができます。

this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;

User Facing Diagnostic イベント

  • 診断イベントのリスナーを実装します。
private async void Call__OnNetworkUnavailableChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other network diagnostics

private async void Call__OnMediaSpeakerNotFunctioningChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other media diagnostics
  • イベントをリッスンするためのイベント メソッドを設定します。
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

this.networkDiagnostics.NetworkUnavailableChanged += Call__OnNetworkUnavailableChanged;
// Listen to other network events as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged += Call__OnMediaSpeakerNotFunctioningChanged;
// Listen to other media events as well ... 

// Removing listeners

this.networkDiagnostics.NetworkUnavailable -= Call__NetworkUnavailableChanged;
// Remove the other listeners as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged -= Call__OnMediaSpeakerNotFunctioningChanged;
// Remove the other listeners as well ... 

最新の User Facing Diagnostics を取得する

  • 現在の通話で出力された最新の診断値を取得します。 診断の値をまだ受け取っていない場合は、null または .unknown が返されます。
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

bool? lastSpeakerNotFunctionValue = this.mediaDiagnostics.GetLatestDiagnostics().IsSpeakerNotFunctioning; // Boolean?
bool? lastNetworkRelayNotReachableValue = this.networkDiagnostics.GetLatestDiagnostics().IsNetworkRelaysUnreachable; // Boolean?
DiagnosticQuality lastReceiveQualityValue = this.networkDiagnostics.GetLatestDiagnostics().NetworkReceiveQuality; // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.