すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:事前通話デバイステスト

最終更新日:Mar 26, 2026

このトピックでは、通話開始前にご利用のデバイスをテストする方法について説明します。

概要

Alibaba Real-Time Communication (ARTC) SDK は、事前通話時のデバイス検出機能を提供しており、マイク、スピーカー、カメラなどのローカル音声・映像デバイスをテストできます。事前にハードウェアの問題を検出することで、予期しないデバイス障害を防止し、円滑な通信体験を確保できます。

サンプルコード

Android: Android/ARTCExample/AdvancedUsage/src/main/java/com/aliyun/artc/api/advancedusage/PreJoinChannelTest/PreJoinChannelTestActivity.java

iOS: iOS/ARTCExample/AdvancedUsage/PreJoinChannelTest/PreJoinChannelTestVC.swift

Harmony: Harmony/ARTCExample/entry/src/main/ets/pages/advancedusage/PreJoinChannelTestPage.ets

実装方法

1. マイクテスト

マイクを起動します。例外が報告されず、キャプチャされた音声のボリュームが正常であれば、マイクは正常に動作しています。

1. マイクテストの開始

startAudioCaptureTest メソッドを呼び出して、マイクからの音声キャプチャを開始します。

Android
/**
 * @brief 通話開始前の音声キャプチャデバイステストを開始します。
 * @details このメソッドは音声キャプチャテストを開始します。
 * - 音声キャプチャが正常に動作しているかを確認するには、{@link AliRtcAudioVolumeObserver::onTestAudioVolumeCallback} コールバックを使用します。
 * @return 
 * - 0: 成功。
 * - 0 以外の値: エラーコード。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
public abstract int startAudioCaptureTest();
iOS
/**
 * @brief 通話開始前の音声キャプチャデバイステストを開始します。
 * @details このメソッドは音声キャプチャを開始します。
 * - 音声キャプチャが正常に動作しているかを確認するには、{@link onTestAudioVolumeCallback} コールバックを使用します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
- (void)startAudioCaptureTest;
Windows
/**
 * @brief 通話開始前の音声キャプチャテストを開始します。
 * @details このメソッドは音声キャプチャテストを開始します。
 * - 音声キャプチャが正常に動作しているかを確認するには、{@link AliEngineEventListener::OnTestAudioVolumeCallback} コールバックを使用します。
 * @return
 * - 0: 成功。
 * - 0 以外の値: エラーコード。
 * @note このメソッドは、{@link JoinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
virtual int StartAudioCaptureTest() = 0;

2. マイクの例外発生確認

以下のコールバックを監視してデバイス例外を検出します。例外が報告されず、マイクのボリュームが正常であれば、デバイスは利用可能です。

Android
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
iOS
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
Windows
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};

3. マイクのボリューム確認

以下のコールバックを監視してキャプチャされた音声のボリュームを取得します。ボリュームデータが正常であれば、マイクは正常に動作しており、通話で使用可能です。

Android
/**
 * @brief 事前通話テスト中の音声ボリュームのコールバック。
 * @param volume 音声ボリューム。
 */
public void OnTestAudioVolume(int volume) {}
iOS
/**
 * @brief 事前通話テスト中のキャプチャ音声ボリュームのコールバック。
 * @param volume 音声ボリューム。
 */
- (void)onTestAudioVolumeCallback:(int)volume;
Windows
/**
 * @brief 事前通話テスト中のキャプチャ音声ボリュームのコールバック。
 * @param volume 音声ボリューム。
 */
virtual void OnTestAudioVolumeCallback(int volume) {}

4. マイクテストの停止

マイクが正常に動作していることを確認した後、stopAudioCaptureTest を呼び出してテストを停止します。

Android
/**
 * @brief 音声キャプチャテストを停止します。
 * @return 
 * - 0: 成功。
 * - 0 以外の値: エラーコード。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
public abstract int stopAudioCaptureTest();
iOS
/**
 * @brief 音声キャプチャテストを停止します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
- (void)stopAudioCaptureTest;
Windows
/**
 * @brief 音声キャプチャテストを停止します。
 * @return
 * - 0: 成功。
 * - 0 以外の値: エラーコード。
 * @note このメソッドは、{@link JoinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
virtual int StopAudioCaptureTest() = 0;

2. スピーカーテスト

音声ファイルを再生します。音声が聞こえる場合は、スピーカーが正常に動作しています。

1. 音声ファイルの再生

playAudioFileTest メソッドを呼び出してテスト用音声ファイルを再生します。音声が聞こえる場合は、スピーカーが正常に動作しています。

Android
/**
 * @brief テスト用に音声ファイルを再生します。
 * @param filePath 音声ファイルのパス。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
public abstract int playAudioFileTest(String filePath) ;
iOS
/**
 * @brief テスト用に音声ファイルを再生します。
 * @param filePath 音声ファイルのパス。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
- (int)playAudioFileTest:(NSString *_Nonnull)filePath;
Windows
/**
 * @brief テスト用に音声ファイルを再生します。
 * @param filePath 音声ファイルのパス。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link JoinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
virtual int PlayAudioFileTest(const char* filePath) = 0;

2. スピーカーの例外発生確認

以下のコールバックを監視してデバイス例外を検出します。例外が報告されず、音声が聞こえる場合は、スピーカーが正常に動作しています。

Android
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
iOS
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
Windows
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};

3. 音声ファイルの再生停止

スピーカーが正常に動作していることを確認した後、stopAudioFileTest を呼び出して再生を停止します。

Android
/**
 * @brief テスト用音声ファイルの再生を停止します。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
public abstract int stopAudioFileTest();
iOS
/**
 * @brief テスト用音声ファイルの再生を停止します。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link joinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
- (int)stopAudioFileTest;
Windows
/**
 * @brief テスト用音声ファイルの再生を停止します。
 * @return 成功時は 0、失敗時は負の値を返します。
 * @note このメソッドは、{@link JoinChannel} を使用してチャンネルに参加する前に呼び出す必要があります。
 */
virtual int StopAudioFileTest() = 0;

3. カメラテスト

ローカルプレビュー表示を設定し、カメラを起動します。プレビューが正しく表示され、例外コールバックがトリガーされない場合は、カメラが正常に動作しています。

1. ローカルプレビューの設定

カメラプレビューを開始する前に、setLocalViewConfig を呼び出して表示ビューを設定します。

Android
/**
 * @brief ローカルプレビュー表示の設定を行います。
 * @param viewConfig ローカル映像の表示プロパティ。詳細については、{@link com.alivc.rtc.AliRtcEngine.AliRtcVideoCanvas} をご参照ください。
 * @param track {@link AliRtcVideoTrack#AliRtcVideoTrackCamera} および {@link AliRtcVideoTrack#AliRtcVideoTrackScreen} のみサポートされています。
 * @return
 * - 0: 成功。
 * - < 0: 失敗。
 * @note チャンネル参加前後いずれでもビューの切り替えが可能です。canvas または {@link AliRtcVideoCanvas#view} が null の場合、レンダリングは停止します。
 *       {@link AliRtcVideoCanvas#renderMode} または {@link AliRtcVideoCanvas#mirrorMode} を変更するには、他のキャンバスプロパティを保持したまま、新しい値でこのメソッドを再度呼び出します。
 */
public abstract int setLocalViewConfig(AliRtcVideoCanvas viewConfig, AliRtcVideoTrack track);
iOS
/**
 * @brief ローカルプレビュー表示の設定を行います。
 * @param viewConfig ローカル映像の表示プロパティ。詳細については、{@link AliVideoCanvas} をご参照ください。
 * @param track {@link AliRtcVideoTrackCamera} および {@link AliRtcVideoTrackScreen} のみサポートされています。
 * @return
 * - 0: 成功。
 * - < 0: 失敗。
 * @note チャンネル参加前後いずれでもビューの切り替えが可能です。canvas または {@link AliVideoCanvas::view} が nil の場合、レンダリングは停止します。
 *       {@link AliVideoCanvas::renderMode} または {@link AliVideoCanvas::mirrorMode} を変更するには、他のキャンバスプロパティを保持したまま、新しい値でこのメソッドを再度呼び出します。
 */
- (int)setLocalViewConfig:(AliVideoCanvas *_Nullable)viewConfig forTrack:(AliRtcVideoTrack)track;
Windows
/**
 * @brief ローカルプレビュー表示の設定を行います。
 * @param renderConfig ローカル映像の表示プロパティ。詳細については、{@link AliEngineVideoCanvas} をご参照ください。
 * @param track {@link AliEngineVideoTrackCamera} および {@link AliEngineVideoTrackScreen} のみサポートされています。
 * @return
 * - 0: 成功。
 * - 0 以外の値: 失敗。
 * @note チャンネル参加前後いずれでもビューの切り替えが可能です。{@link AliEngineVideoCanvas::displayView} が null の場合、レンダリングは停止します。
 *       {@link AliEngineVideoCanvas::renderMode} または {@link AliEngineVideoCanvas::mirrorMode} を変更するには、他の renderConfig プロパティを保持したまま、新しい値でこのメソッドを再度呼び出します。
 */
virtual int SetLocalViewConfig(AliEngineVideoCanvas renderConfig,
AliEngineVideoTrack track) = 0;

2. カメラプレビューの開始

startPreview メソッドを呼び出してカメラプレビューを開始します。

Android
/**
 * @brief ローカル映像プレビューを開始します。
 * @details このメソッドはローカル映像プレビューを開始し、自動的にカメラを起動します。
 * @return
 * - 0: 成功。
 * - < 0: 失敗。
 * @note {@link #setLocalViewConfig} でビューが設定されていない場合、プレビューは表示されませんが、ストリームのアップストリーミングには影響しません。
 *       プレビューを開始するには、{@link #joinChannel} の前にこのメソッドを呼び出し、自動的にカメラを起動できます。
 */
public abstract int startPreview();
iOS
/**
 * @brief ローカル映像プレビューを開始します。
 * @return
 * - 0: 成功。
 * - <0: 失敗。
 * @note {@link setLocalViewConfig:forTrack:} でビューが設定されていない場合、プレビューは表示されません。
 *       プレビューを開始するには、{@link joinChannel:name:onResultWithUserId:} の前にこのメソッドを呼び出し、自動的にカメラを起動できます。
 */
- (int)startPreview;
Windows
/**
 * @brief ローカル映像プレビューを開始します。
 * @return
 * - 0: 成功。
 * - 0 以外の値: 失敗。
 * @note {@link SetLocalViewConfig} でビューが設定されていない場合、プレビューは表示されません。
 *       プレビューを開始するには、{@link JoinChannel} の前にこのメソッドを呼び出し、自動的にカメラを起動できます。
 */
virtual int StartPreview(int width = 0, int height = 0) = 0;

3. カメラの例外発生確認

以下のコールバックを監視してデバイス例外を検出します。例外が報告されず、プレビューが正しく表示される場合は、カメラが正常に動作しています。

Android
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
iOS
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliRtcLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliRtcLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
Windows
/**
 * @brief ローカルデバイス例外のコールバック。
 * @param deviceType デバイスタイプ。詳細については、{@link AliEngineLocalDeviceType} をご参照ください。
 * @param exceptionType 例外タイプ。詳細については、{@link AliEngineLocalDeviceExceptionType} をご参照ください。
 * @param msg 例外メッセージ。
 * @note このコールバックは、回復不能な内部デバイス例外が発生した際にトリガーされます。このコールバックがトリガーされた場合、デバイスの可用性を確認してください。
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};