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

ApsaraVideo Live:カスタム音声収集

最終更新日:Mar 05, 2025

Alibaba Real-Time Communication (ARTC) SDK は、柔軟なカスタム音声収集機能を提供します。この機能を使用すると、オーディオ デバイスを管理し、Alibaba Cloud 管理の音声とユーザー管理の音声の収集メカニズムを切り替えることができます。

動作のしくみ

サンプル コード

内部収集モジュールの有効化または無効化

Android

/* Alibaba Cloud が提供する収集モジュールを無効にします。 */
String parameter = "{\"audio\":\"{\\\"enable_system_audio_device_record\\\":\\\"FALSE\\\"}\"}";
mAliRtcEngine.setParameter(parameter);

/* Alibaba Cloud が提供する収集モジュールを有効にします。 */
String parameter = "{\"audio\":\"{\\\"enable_system_audio_device_record\\\":\\\"TRUE\\\"}\"}";
mAliRtcEngine.setParameter(parameter);

iOS

/* Alibaba Cloud が提供する収集モジュールを無効にします。 */
[_engine setParameter:@"{\"audio\":\"{\\\"enable_system_audio_device_record\\\":\\\"FALSE\\\"}\"}"];

/* Alibaba Cloud が提供する収集モジュールを有効にします。 */
[_engine setParameter:@"{\"audio\":\"{\\\"enable_system_audio_device_record\\\":\\\"TRUE\\\"}\"}"];

Windows

/* Windows では、エンジンを作成するときに音声収集を有効にするか無効にするかを指定できます。 */
/* Alibaba Cloud が提供する収集モジュールを無効にします。 */
char* extra = "{\"user_specified_enable_use_virtual_audio_device\":\"TRUE\", \"user_specified_use_external_audio_record\":\"TRUE\"}";
mAliRtcEngine = AliRtcEngine.Create(extra);

/* Alibaba Cloud が提供する収集モジュールを有効にします。 */
char* extra = "{\"user_specified_enable_use_virtual_audio_device\":\"FALSE\", \"user_specified_use_external_audio_record\":\"FALSE\"}";
mAliRtcEngine = AliRtcEngine.Create(extra);

外部オーディオ ストリームの追加

Android

/* ビジネス要件に基づいてパラメーターを設定します。 */
AliRtcEngine.AliRtcExternalAudioStreamConfig config = new AliRtcEngine.AliRtcExternalAudioStreamConfig();
config.playoutVolume = currentAudioPlayoutVolume;
config.publishVolume = currentAudioPublishVolume;
config.channels = 1;
config.sampleRate = 48000;
audioStreamID = mAliRtcEngine.addExternalAudioStream(config);

iOS

/* ビジネス要件に基づいてパラメーターを設定します。 */
AliRtcExternalAudioStreamConfig *config = [AliRtcExternalAudioStreamConfig new];
config.channels = _pcmChannels;
config.sampleRate = _pcmSampleRate;
config.playoutVolume = 0;
config.publishVolume = 100;
_externalPlayoutStreamId = [self.engine addExternalAudioStream:config];

Windows

/* メディア エンジンを取得します。 */
IAliEngineMediaEngine* mAliRtcMediaEngine = nullptr;
    
mAliRtcEngine->QueryInterface(AliEngineInterfaceMediaEngine, (void **)&mAliRtcMediaEngine);
/* ビジネス要件に基づいてパラメーターを設定します。 */
AliEngineExternalAudioStreamConfig config;
config.playoutVolume = currentAudioPlayoutVolume;
config.publishVolume = currentAudioPublishVolume;
config.channels = 1;
config.sampleRate = 48000;
config.publishStream = 0;
audioStreamID = mAliRtcMediaEngine->AddExternalAudioStream(config);

mAliRtcMediaEngine->Release();

パルス符号変調(PCM)データのオーディオ ストリームへの送信

Android

AliRtcEngine.AliRtcAudioFrame rawData = new AliRtcEngine.AliRtcAudioFrame();
rawData.data = frameInfo.audio_data[0];
rawData.numSamples = (int) (frameInfo.audio_data[0].length / (2 * frameInfo.audio_channels));
rawData.bytesPerSample = 2;
rawData.numChannels = frameInfo.audio_channels;
rawData.samplesPerSec = frameInfo.audio_sample_rate;

int ret = mAliRtcEngine.pushExternalAudioStreamRawData(audioStreamID, rawData);

if(ret == 0x01070101) {
    sleep(20);
} else if(ret < 0) {
    /* 異常です。パラメーターとアップストリーミングの状態を確認してください。 */
}

iOS

AliRtcAudioFrame *sample = [AliRtcAudioFrame new];
sample.dataPtr = _pcmLocalData;
sample.samplesPerSec = _pcmLocalSampleRate;
sample.bytesPerSample = sizeof(int16_t);
sample.numOfChannels = _pcmLocalChannels;
sample.numOfSamples = numOfSamples;
int rc = [self.engine pushExternalAudioStream:_externalPlayoutStreamId rawData:sample];
if(rc == 0x01070101) {
    sleep(20);
} else if(ret < 0) {
    /* 異常です。パラメーターとアップストリーミングの状態を確認してください。 */
}

Windows

/* メディア エンジンを取得します。 */
IAliEngineMediaEngine* mAliRtcMediaEngine = nullptr;
    
mAliRtcEngine->QueryInterface(AliEngineInterfaceMediaEngine, (void **)&mAliRtcMediaEngine);

AliEngineAudioRawData rawData;
rawData.dataPtr = frameInfo.audio_data[0];
rawData.numOfSamples = (int) (frameInfo.audio_data[0].length / (2 * frameInfo.audio_channels));
rawData.bytesPerSample = 2;
rawData.numOfChannels = frameInfo.audio_channels;
rawData.samplesPerSec = frameInfo.audio_sample_rate;
int ret = mAliRtcMediaEngine->PushExternalAudioStreamRawData(audioStreamID, rawData);
mAliRtcMediaEngine->Release();

外部オーディオ ストリームの削除

Android

mAliRtcEngine.removeExternalAudioStream(audioStreamID);

iOS

[self.engine removeExternalAudioStream:_externalPublishStreamId];

Windows

/* メディア エンジンを取得します。 */
IAliEngineMediaEngine* mAliRtcMediaEngine = nullptr;
    
mAliRtcEngine->QueryInterface(AliEngineInterfaceMediaEngine, (void **)&mAliRtcMediaEngine);

mAliRtcMediaEngine->RemoveExternalAudioStream(audioStreamID);
mAliRtcMediaEngine->Release();