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

ApsaraVideo Live:カスタム音声再生

最終更新日:Mar 26, 2026

カスタム音声再生は、高度なスキルを持つ開発者に音声再生プロセスの完全制御を提供し、特定の要件を満たすことを目的としています。ARTC は、このようなユースケース向けにこの機能を提供します。

概要

デフォルトでは、ARTC には実地検証済みの音声再生モジュールが組み込まれており、ほとんどの再生要件を満たします。ただし、既存のカスタム音声再生モジュールをお持ちの場合、または再生前に音声データを後処理する必要がある場合は、ARTC のカスタム音声再生機能をご利用ください。これにより、内部再生ロジックを無効化し、音声データの受信および再生を自社で管理できます。

その後、取得した音声データを再生デバイスに渡して処理および再生を行ってください。

サンプルコード

Android: Android/ARTCExample/AdvancedUsage/src/main/java/com/aliyun/artc/api/advancedusage/CustomAudioCaptureAndRender/CustomAudioRenderActivity.java

iOS: iOS/ARTCExample/AdvancedUsage/CustomAudioRender/CustomAudioRenderVC.swift

前提条件

カスタム音声再生を利用する前に、以下の要件を満たしていることを確認してください。

  • 完全な音声再生モジュールを開発できるか、または既に確立されたサードパーティ製または社内開発の音声プレーヤーをお持ちであることです。

  • PCM データ形式、サンプルレート、チャンネル数などの概念を含む基本的な音声処理ワークフローを理解していることです。

  • ARTC SDK を統合済みであり、基本的な音声・映像通話機能を実装済みであることです。

  • ご利用のユースケースにおいて、ARTC の内部再生モジュールをバイパスする必要があることです。該当しない場合は、安定性および互換性を確保するため、デフォルトの再生ソリューションをご利用ください。

実装

image

実装

1. 内部再生の無効化

カスタム音声再生機能を利用するには、通常、SDK の内部再生を無効化する必要があります。エンジンインスタンスの作成時に getInstance を呼び出し、extras パラメーターを渡すことで、この設定を推奨します。関連するパラメーターは以下のとおりです。

user_specified_use_external_audio_player: 外部プレーヤーを使用するかどうかを指定します。

  • "TRUE": 外部プレーヤーを使用し、内部再生を無効化します。

  • "FALSE": デフォルトの内部再生を使用します。

Android

String extras = "{\"user_specified_use_external_audio_player\":\"TRUE\"}";
mAliRtcEngine = AliRtcEngine.getInstance(this, extras);

iOS

// エンジンの作成および初期化。
var customAudioPlayConfig: [String: String] = [:]
// 外部プレーヤーを使用し、SDK の内部再生を無効化します。
customAudioPlayConfig["user_specified_use_external_audio_player"] = "TRUE"
// JSON シリアル化。
guard let jsonData = try? JSONSerialization.data(withJSONObject: customAudioPlayConfig, options: []),
let extras = String(data: jsonData, encoding: .utf8) else {
    print("JSON シリアル化に失敗しました")
    return
}
let engine = AliRtcEngine.sharedInstance(self, extras:extras)

Mac

NSString * extras = @"{\"user_specified_use_external_audio_player\":\"TRUE\"}";
self.engine = [AliRtcEngine sharedInstance:self extras:extras];

Windows

std::string extras = "{\"user_specified_use_external_audio_player\":\"TRUE\"}";
mAliRtcEngine = AliRtcEngine.getInstance(this, extras.c_str());

2. 音声フレームコールバックの登録

enableAudioFrameObserver を呼び出して音声フレームコールバックを登録します。以下のパラメーターを渡します。

  • enable: データコールバックを有効または無効にするブール値です。

  • audioSource: コールバックのデータソースの種別です。カスタム音声再生では、AliRtcAudioSourcePlayback を指定して、onPlaybackAudioFrame コールバックを通じて再生ステージからのデータを受信します。

  • config: コールバックで使用する音声パラメーター(サンプルレートおよびチャンネル数など)です。

Android

// コールバック構成を設定します。
AliRtcEngine.AliRtcAudioFrameObserverConfig config = new AliRtcEngine.AliRtcAudioFrameObserverConfig();
config.sampleRate = AliRtcAudioSampleRate_48000;
config.channels = 1;
// 再生データコールバックを有効化するために登録します。
mAliRtcEngine.enableAudioFrameObserver(true, AliRtcAudioSourcePlayback, config);

iOS

// コールバック構成を設定します。
var observerConfig: AliRtcAudioFrameObserverConfig = AliRtcAudioFrameObserverConfig()
observerConfig.sampleRate = ._Unknown
observerConfig.channels = .monoAudio
// 再生データコールバックを有効化するために登録します。
let audioSource: AliRtcAudioSource = .playback
engine.enableAudioFrameObserver(true, audioSource: audioSource, config: observerConfig)

Mac

AliRtcAudioFrameObserverConfig* config = [[AliRtcAudioFrameObserverConfig alloc] init];
config.channels = audioNumChannel;
config.sampleRate = AliRtcAudioSampleRate_48000;
config.mode = AliRtcAudioFrameObserverOperationModeReadOnly;
[self.engine enableAudioFrameObserver:TRUE audioSource:AliRtcAudioSourcePlayback config:config];

Windows

// コールバック構成を設定します。
AliEngineAudioFrameObserverConfig config ;
config.sampleRate = AliRtcAudioSampleRate_48000;
config.channels = AliEngineMonoAudio;
// 再生データコールバックを有効化するために登録します。
mAliRtcEngine->EnableAudioFrameObserver(true, AliEngineAudioSourcePlayback, config);

3. コールバック内の PCM データの処理

コールバック内で受信した PCM データを処理し、再生デバイスに送信します。

Android

@Override
public boolean onPlaybackAudioFrame(AliRtcEngine.AliRtcAudioFrame frame) {
    // コールバックで受信した音声データを再生するためのカスタム処理を実装します。

    return true;
}

iOS

func onPlaybackAudioFrame(_ frame: AliRtcAudioFrame) -> Bool {
    // コールバックで受信した音声データを再生するためのカスタム処理を実装します。
    
    return true
}

Mac

- (BOOL)onPlaybackAudioFrame:(AliRtcAudioFrame* _Nonnull)frame {
    // コールバックで受信した音声データを再生するためのカスタム処理を実装します。
    return true;
}

Windows

bool CTutorialDlg::OnPlaybackAudioFrame(AliEngineAudioRawData audioRawData) {
	// コールバックで受信した音声データを再生するためのカスタム処理を実装します。
	return true;
}

4. オブザーバーを無効化する

Android

mAliRtcEngine.enableAudioFrameObserver(false, AliRtcAudioSourcePlayback, config)

iOS

engine.enableAudioFrameObserver(false, audioSource: audioSource, config: observerConfig)

Mac

[self.engine enableAudioFrameObserver:false audioSource:AliRtcAudioSourcePlayback config:config];

Windows

mAliRtcEngine->EnableAudioFrameObserver(false, AliEngineAudioSourcePlayback, config);

5. (任意)内部再生の動的有効化/無効化

通話中に SDK の内部再生を動的に有効化または無効化するには、setParameter メソッドを呼び出します。

Android

/* 内部再生を動的に無効化 */
String parameter = "{\"audio\":{\"enable_system_audio_device_play\":\"FALSE\"}}";
mAliRtcEngine.setParameter(parameter);

/* 内部再生を動的に有効化 */
String parameter = "{\"audio\":{\"enable_system_audio_device_play\":\"TRUE\"}}"; 
mAliRtcEngine.setParameter(parameter);

iOS

// 内部再生を動的に無効化。
engine.setParameter("{\"audio\":{\"enable_system_audio_device_play\":\"FALSE\"}}")
// 内部再生を動的に有効化。
engine.setParameter("{\"audio\":{\"enable_system_audio_device_play\":\"TRUE\"}}")

Mac

// 内部再生を動的に無効化。
[self.engine setParameter:"{\"audio\":{\"enable_system_audio_device_play\":\"FALSE\"}}"];
// 内部再生を動的に有効化。
[self.engine setParameter:"{\"audio\":{\"enable_system_audio_device_play\":\"TRUE\"}}"];

Windows

/* 内部再生を動的に無効化 */
std::string parameter = "{\"audio\":{\"enable_system_audio_device_play\":\"FALSE\"}}";
mAliRtcEngine->SetParameter(parameter.c_str());

/* 内部再生を動的に有効化 */
std::string parameter = "{\"audio\":{\"enable_system_audio_device_play\":\"TRUE\"}}"; 
mAliRtcEngine->SetParameter(parameter.c_str());