オーディオ再生を自身で制御して特定の機能を実装する必要がある開発者向けに、ARTC はカスタムオーディオ再生機能を提供しています。これにより、再生プロセスを完全に制御できます。
機能紹介
デフォルトでは、ARTC には市場で実績のあるオーディオ再生モジュールが含まれており、ほとんどのユースケースのニーズを満たします。しかし、成熟したカスタムオーディオ再生モジュールをすでに持っている場合や、再生前にオーディオデータの後処理を行う必要がある場合があります。このような目的のために、ARTC はカスタムオーディオ再生機能を提供しており、内部の再生ロジックを無効にして、オーディオデータの受信と再生を引き継ぐことができます。
この機能のコアは、オーディオフレームコールバックを有効にすることです。これにより、リモートまたはローカルの PCM オーディオデータを取得し、それを再生デバイスに渡して処理およびレンダリングできます。
サンプルコード
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 の内部再生モジュールをバイパスすることが厳密に必要である。そうでない場合は、安定性と互換性を確保するために、デフォルトの再生ソリューションを使用することを推奨します。
実装
実装
1. SDK の内部再生モジュールを無効化
カスタムオーディオ再生を使用するには、まず SDK の内部オーディオ再生モジュールを無効にする必要があります。この操作は、エンジンインスタンスの作成時に extras パラメーターを getInstance メソッドに渡すことで行うことをお勧めします。
関連するパラメーターは user_specified_use_external_audio_player です:
TRUE: 外部オーディオプレーヤーを使用します。SDK の内部再生が無効になります。FALSE: 外部オーディオプレーヤーを使用しません。SDK の内部再生が有効になります。
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)2. オーディオコールバックの監視
enableAudioFrameObserver を呼び出して、オーディオコールバックを登録します。以下のパラメーターを渡す必要があります:
enable: データコールバックを有効にするかどうかを決定するブール値。audioSource: コールバックのデータソースのタイプ。さまざまな段階のオーディオデータを含めることができます。カスタムオーディオ再生の場合、通常はonPlaybackAudioFrameコールバックに対応するAliRtcAudioSourcePlaybackソースを監視する必要があります。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)3. コールバックでの PCM データの処理
コールバック内で受信した PCM データを処理し、システムのオーディオデバイスに送信して再生します。
Android
@Override
public boolean onPlaybackAudioFrame(AliRtcEngine.AliRtcAudioFrame frame) {
// ここに、コールバックからのオーディオデータを再生するためのカスタムロジックを実装します。
return true;
}iOS
func onPlaybackAudioFrame(_ frame: AliRtcAudioFrame) -> Bool {
// ここに、コールバックからのオーディオデータを再生するためのカスタムロジックを実装します。
return true
}4. チャンネル退出時のオブザーバーの無効化
Android
mAliRtcEngine.enableAudioFrameObserver(false, AliRtcAudioSourcePlayback, config)iOS
engine.enableAudioFrameObserver(false, audioSource: audioSource, config: observerConfig)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\"}}")