Topik ini mencakup operasi dan konfigurasi audio umum dalam ARTC SDK.
Ikhtisar
ARTC SDK menyediakan berbagai fitur untuk konfigurasi dan pengendalian audio, termasuk pengaturan mode pengkodean dan skenario audio, manajemen perekaman serta pemutaran audio lokal, kontrol pemutaran audio remote, penggunaan pemantauan in-ear, dan konfigurasi routing audio.
Kode contoh
Android: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/AudioBasicUsage/AudioBasicUsageActivity.java.
iOS: iOS/ARTCExample/BasicUsage/AudioBasicUsage/AudioBasicUsageVC.swift.
Harmony: Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/AudioBasicUsage.ets.
Prasyarat
Anda memiliki Akun Alibaba Cloud yang valid dan telah membuat aplikasi ApsaraVideo for RTC. Untuk informasi lebih lanjut, lihat Buat aplikasi. Dapatkan AppID dan AppKey dari ApsaraVideo Live console.
Anda telah mengintegrasikan ARTC SDK ke dalam proyek Anda dan menerapkan fitur audio dan video real-time dasar. Untuk informasi lebih lanjut tentang integrasi SDK, lihat Unduh dan integrasikan SDK. Untuk menerapkan panggilan audio dan video, lihat Terapkan panggilan audio dan video.
Implementasi
1. Atur mode pengkodean dan skenario audio (sebelum bergabung ke channel)
ARTC SDK memungkinkan Anda mengatur mode pengkodean audio dan mode skenario audio menggunakan metode setAudioProfile untuk mengoptimalkan kualitas audio sesuai skenario bisnis yang berbeda.
Panggil
setAudioProfilehanya sebelum bergabung ke channel. Pengaturan tidak dapat diubah setelah Anda bergabung.ARTC SDK merekomendasikan penggunaan mode pengkodean audio berkualitas tinggi
AliRtcEngineHighQualityModedan mode skenario musikAliRtcSceneMusicMode.
1.1. Mode pengkodean audio (AliRtcAudioProfile)
Gunakan mode berkualitas tinggi (
AliRtcEngineHighQualityMode).Untuk interoperabilitas dengan klien web, pilih mode dengan laju sampel 48 kHz.
Untuk suara stereo, atur mode ke
AliRtcEngineStereoHighQualityMode.
Enumeration | Description | Sample rate | Channels | Max bitrate |
AliRtcEngineLowQualityMode | Low-quality audio mode | 8000 Hz | Mono | 12 kbps |
AliRtcEngineBasicQualityMode | Standard-quality audio mode | 16000 Hz | Mono | 24 kbps |
AliRtcEngineHighQualityMode | High-quality audio mode | 48000 Hz | Mono | 64 kbps |
AliRtcEngineStereoHighQualityMode | Stereo high-quality audio mode | 48000 Hz | Stereo | 80 kbps |
AliRtcEngineSuperHighQualityMode | Super-high-quality audio mode | 48000 Hz | Mono | 96 kbps |
AliRtcEngineStereoSuperHighQualityMode | Stereo super-high-quality audio mode | 48000 Hz | Stereo | 128 kbps |
1.2. Mode skenario audio (AliRtcAudioScenario)
Enumeration | Description |
AliRtcSceneDefaultMode | Default mode. Menggunakan pemrosesan 3A berbasis hardware dan mendukung perekaman audio dari perangkat Bluetooth. Gunakan mode ini untuk merekam audio dari headset Bluetooth. |
AliRtcSceneMusicMode | (Direkomendasikan) Skenario musik. Menggunakan pemrosesan 3A berbasis software dan merekam audio dari mikrofon internal perangkat untuk fidelitas audio yang lebih tinggi. |
1.3. Kode contoh
Contoh berikut menunjukkan cara mengonfigurasi mode pengkodean dan skenario audio untuk kasus penggunaan umum.
Untuk perekaman melalui Bluetooth
Android
// Set the audio scenario to AliRtcSceneDefaultMode.
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneDefaultMode);iOS
// Set the audio scenario to AliRtcSceneDefaultMode.
engine.setAudioProfile(AliRtcAudioProfile.engineHighQualityMode, audio_scene: AliRtcAudioScenario.sceneDefaultMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcHighQualityMode, AliRtcAudioScenario.AliRtcSceneDefaultMode);Mac
[self.engine setAudioProfile:AliRtcEngineHighQualityMode audio_scene:AliRtcSceneDefaultMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineHighQualityMode, AliEngineSceneDefaultMode);Untuk interoperabilitas dengan klien web
Android
// Select an encoding mode with a 48 kHz sample rate, such as AliRtcEngineHighQualityMode.
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneMusicMode);iOS
// Select an encoding mode with a 48 kHz sample rate, such as AliRtcEngineHighQualityMode.
engine.setAudioProfile(AliRtcAudioProfile.engineHighQualityMode, audio_scene: AliRtcAudioScenario.sceneMusicMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcHighQualityMode, AliRtcAudioScenario.AliRtcSceneMusicMode);Mac
[self.engine setAudioProfile:AliRtcEngineHighQualityMode audio_scene:AliRtcSceneMusicMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineHighQualityMode, AliEngineSceneMusicMode);Untuk suara stereo
Android
// Set the mode to one that supports stereo, such as AliRtcEngineStereoHighQualityMode.
mAliRtcEngine.setAudioProfile(AliRtcEngineStereoHighQualityMode, AliRtcSceneMusicMode);iOS
// Set the mode to one that supports stereo, such as AliRtcEngineStereoHighQualityMode.
engine.setAudioProfile(AliRtcAudioProfile.engineStereoHighQualityMode, audio_scene: AliRtcAudioScenario.sceneMusicMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcStereoHighQualityMode, AliRtcAudioScenario.AliRtcSceneMusicMode);Mac
[self.engine setAudioProfile:AliRtcEngineStereoHighQualityMode audio_scene:AliRtcSceneMusicMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineStereoHighQualityMode, AliEngineSceneMusicMode);2. Perekaman audio lokal
Bagian ini menjelaskan cara mengontrol perekaman audio lokal, seperti membisukan mikrofon atau menghentikan perekaman mikrofon. Tabel berikut membandingkan metode utama untuk operasi ini.
Method |
|
|
How it works | Sends silent frames. | Stops or starts microphone capture. |
When to call | Can be called before or after joining a channel. | Must be called after joining a channel. |
Releases microphone resources | No | Yes |
2.1. Membisukan mikrofon lokal
Gunakan metode muteLocalMic untuk membisukan mikrofon lokal dan input audio eksternal. Metode ini dapat dipanggil sebelum atau setelah bergabung ke channel untuk mengatur status bisu.
Berbeda dengan stopAudioCapture, metode muteLocalMic tidak melepaskan resource mikrofon. Modul perekaman dan pengkodean tetap berjalan tetapi mengirim frame diam dengan bitrate sangat rendah.
Mode AliRtcMuteLocalAudioMode berikut didukung:
| Default mode. Same behavior as |
| Mutes all audio. Stops publishing audio from both the microphone and external PCM input. |
| Mutes the microphone only. Stops publishing audio captured by the microphone. |
Kode contoh:
Android
// Mute all audio
mAliRtcEngine.muteLocalMic(true, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteAllAudioMode);
// Unmute all audio
mAliRtcEngine.muteLocalMic(false, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteAllAudioMode);
// Mute only the microphone
mAliRtcEngine.muteLocalMic(true, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteOnlyMicAudioMode);iOS
// Mute all audio
self.rtcEngine?.muteLocalMic(true, mode: .allAudioMode)
// Unmute all audio
self.rtcEngine?.muteLocalMic(false, mode: .allAudioMode)
// Mute only the microphone
self.rtcEngine?.muteLocalMic(true, mode: .onlyMicAudioMode)Harmony
// Mute all audio
this.rtcEngine.muteLocalMic(true, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteAll);
// Unmute all audio
this.rtcEngine.muteLocalMic(false, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteAll);
// Mute only the microphone
this.rtcEngine.muteLocalMic(true, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteOnlyMic);Mac
// Mute all audio
[self.engine muteLocalMic:TRUE mode:AliRtcMuteAllAudioMode];
// Unmute all audio
[self.engine muteLocalMic:FALSE mode:AliRtcMuteAllAudioMode];
// Mute only the microphone
[self.engine muteLocalMic:TRUE mode:AliRtcMuteOnlyMicAudioMode];Windows
// Mute all audio
mAliRtcEngine->MuteLocalMic(true, AliEngineMuteLocalAudioModeMuteAll);
// Unmute all audio
mAliRtcEngine->MuteLocalMic(false, AliEngineMuteLocalAudioModeMuteAll);
// Mute only the microphone
mAliRtcEngine->MuteLocalMic(true, AliEngineMuteLocalAudioModeMuteOnlyMic);2.2. Hentikan atau lanjutkan perekaman mikrofon
SDK mengaktifkan perekaman mikrofon secara default saat bergabung ke channel. Untuk menghentikan perekaman mikrofon, panggil stopAudioCapture, yang akan menghentikan perekaman audio dan melepaskan resource mikrofon. Untuk melanjutkan perekaman mikrofon, panggil startAudioCapture.
Android
// Stop microphone capture.
mAliRtcEngine.stopAudioCapture();
// Resume microphone capture.
mAliRtcEngine.startAudioCapture();iOS
// Stop microphone capture.
self.rtcEngine?.stopAudioCapture()
// Resume microphone capture.
self.rtcEngine?.startAudioCapture()Harmony
// Stop microphone capture.
this.rtcEngine.stopAudioCapture();
// Resume microphone capture.
this.rtcEngine.startAudioCapture();Mac
// Stop microphone capture.
[self.engine stopAudioCapture];
// Resume microphone capture.
[self.engine startAudioCapture];Windows
// Stop microphone capture.
mAliRtcEngine->StopAudioCapture();
// Resume microphone capture.
mAliRtcEngine->StartAudioCapture();3. Pengaturan pemutaran audio remote
Bagian ini menjelaskan cara mengontrol pemutaran audio remote.
3.1. Membisukan pengguna remote
ARTC menyediakan metode muteRemoteAudioPlaying untuk menghentikan atau melanjutkan pemutaran audio pengguna remote tertentu. Metode ini didefinisikan sebagai berikut:
public abstract int muteRemoteAudioPlaying(String uid, boolean mute);Membisukan tidak memengaruhi penerimaan dan decoding aliran audio. Pengaturan ini dapat dikonfigurasi sebelum atau setelah bergabung ke session.
Membisukan hanya memengaruhi pemutaran lokal audio pengguna remote dan tidak memengaruhi perekaman audio pengguna tersebut.
3.2. Atur volume pemutaran untuk pengguna remote tertentu
ARTC menyediakan metode setPlayoutVolume untuk mengontrol volume pemutaran lokal.
/**
* @brief Sets the playback volume.
* @param volume The playback volume. The value ranges from 0 to 400.
* - 0: Mute.
* - <100: Decreases the volume.
* - >100: Increases the volume.
* @return
* - 0: Success.
* - A non-zero value: Failure.
*/
public abstract int setPlayoutVolume(int volume);ARTC juga menyediakan metode setRemoteAudioVolume untuk mengontrol volume pemutaran audio pengguna remote tertentu. Ketika parameter volume diatur ke 0, metode ini memiliki efek yang sama dengan muteRemoteAudioPlaying.
/**
* @brief Adjusts the volume of a specific remote user for local playback.
* @param uid The user ID. This is a unique identifier assigned by your app server.
* @param volume The playback volume. The value ranges from 0 to 100, where 0 means mute and 100 means the original volume.
* @return
* - 0: Success.
* - A non-zero value: Failure.
*/
public abstract int setRemoteAudioVolume(String uid, int volume);4. Pemantauan in-ear
Pemantauan in-ear memungkinkan Anda mendengar audio dari mikrofon Anda melalui headphone.
4.1. Aktifkan pemantauan in-ear
Panggil metode enableEarBack sebelum atau setelah bergabung ke channel untuk mengaktifkan pemantauan in-ear. Untuk menonaktifkannya, panggil kembali enableEarBack dengan parameter false.
Gunakan headphone saat pemantauan in-ear diaktifkan.
Android
rtcEngine.enableEarBack(true);iOS
engine.enableEarBack(true)Harmony
this.rtcEngine.enableEarBack(true);Mac
[self.engine enableEarBack:YES];Windows
mAliRtcEngine->EnableEarBack(TRUE);4.2. Atur volume pemantauan in-ear
Panggil metode setEarBackVolume untuk menyesuaikan volume pemantauan in-ear. Parameter volume mengatur volume pada skala 0 hingga 100, di mana 0 berarti dibisukan dan 100 berarti volume asli. Nilai default adalah 100.
Android
rtcEngine.setEarBackVolume(60);iOS
rtcEngine?.setEarBackVolume(volume)Harmony
this.rtcEngine.setEarBackVolume(value);Mac
[self.engine setEarBackVolume:60];Windows
mAliRtcEngine->SetEarBackVolume(volume);5. Callback volume pengguna dan speaker aktif
ARTC menyediakan callback volume pengguna dan speaker aktif untuk membantu aplikasi Anda mendeteksi status berbicara pengguna secara real-time.
Fitur ini dinonaktifkan secara default. Panggil metode enableAudioVolumeIndication untuk mengaktifkannya. Setelah diaktifkan, sistem secara berkala melaporkan volume real-time setiap pengguna dan speaker aktif pada frekuensi tertentu, yang dapat digunakan untuk menerapkan interaksi antarmuka pengguna (UI).
5.1. Aktifkan fitur callback
Panggil enableAudioVolumeIndication untuk mengaktifkan fitur dan mengonfigurasi parameternya. Parameter dijelaskan di bawah ini:
interval: Interval callback dalam milidetik (ms). Rentang yang direkomendasikan adalah 300 ms hingga 500 ms. Nilai minimum adalah 10 ms. Nilai negatif menonaktifkan fitur ini.
smooth: Faktor penghalusan. Nilai yang lebih tinggi menghasilkan perubahan volume yang lebih halus, sedangkan nilai yang lebih rendah memberikan performa real-time yang lebih baik. Nilai yang direkomendasikan adalah 3. Rentang validnya adalah 0 hingga 9.
reportVad: Sakelar untuk deteksi speaker aktif. Atur ke 0 untuk menonaktifkan fitur ini, atau 1 untuk mengaktifkannya.
Android
mAliRtcEngine.enableAudioVolumeIndication(500, 3,1);iOS
// User volume callback and active speaker detection
engine.enableAudioVolumeIndication(500, smooth: 3, reportVad: 1)Harmony
// User volume callback and active speaker detection
this.rtcEngine.enableAudioVolumeIndication(1000, 3, 1);Mac
// User volume callback and active speaker detection
[self.engine enableAudioVolumeIndication:500 smooth:3 reportVad:1];Windows
// User volume callback and active speaker detection
mAliRtcEngine->EnableAudioVolumeIndication(500, 3, 1);5.2. Implementasikan dan daftarkan callback
Panggil metode registerAudioVolumeObserver untuk mendaftarkan callback. Sistem kemudian memicu callback berikut pada interval yang ditentukan:
onAudioVolume: Callback ini secara berkala memberikan informasi volume audio sehingga Anda dapat memantau intensitas berbicara setiap pengguna secara real-time. Sistem melaporkan level volume semua pengguna yang terdeteksi, termasuk pengguna lokal dan pengguna remote. Anda dapat menggunakan informasi ini untuk menerapkan umpan balik UI, seperti animasi gelombang suara, indikator volume, atau deteksi bisu. JikamUserIdadalah "0", entri tersebut untuk volume perekaman lokal. JikamUserIdadalah "1", entri tersebut untuk volume campuran semua pengguna remote. Nilai lain menunjukkan volume pengguna tertentu.totalVolumemenunjukkan volume campuran total semua pengguna remote.onActiveSpeaker: Ini adalah callback speaker aktif yang dipicu oleh deteksi aktivitas suara (VAD). Sistem memicu callback ini ketika mendeteksi bahwa seorang pengguna menjadi speaker paling aktif. Seorang pengguna dianggap sebagai speaker aktif ketika volume dan durasi berbicaranya melebihi ambang batas. Anda dapat menggunakan event ini untuk menerapkan fitur seperti secara otomatis memfokuskan pada speaker aktif. Misalnya, dalam konferensi, Anda dapat memperbesar jendela video speaker aktif.
Android
private final AliRtcEngine.AliRtcAudioVolumeObserver mAliRtcAudioVolumeObserver = new AliRtcEngine.AliRtcAudioVolumeObserver() {
// User volume callback
@Override
public void onAudioVolume(List<AliRtcEngine.AliRtcAudioVolume> speakers, int totalVolume){
handler.post(() -> {
if(!speakers.isEmpty()) {
for(AliRtcEngine.AliRtcAudioVolume volume : speakers) {
if("0".equals(volume.mUserId)) {
// Volume of the local user
} else if ("1".equals(volume.mUserId)) {
// Overall volume of remote users
} else {
// Volume of a remote user
}
}
}
});
}
// Active speaker detection callback
@Override
public void onActiveSpeaker(String uid){
// Active speaker
handler.post(() -> {
String mag = "onActiveSpeaker uid:" + uid;
ToastHelper.showToast(AudioBasicUsageActivity.this, mag, Toast.LENGTH_SHORT);
});
}
};
// Register the callback
mAliRtcEngine.registerAudioVolumeObserver(mAliRtcAudioVolumeObserver);iOS
Untuk iOS, Anda tidak perlu memanggil metode untuk mendaftarkan callback. Cukup implementasikan callback berikut:
onAudioVolumeCallback
onActiveSpeaker
func onAudioVolumeCallback(_ array: [AliRtcUserVolumeInfo]?, totalVolume: Int32) {
// User volume callback
"onAudioVolumeCallback, totalVolume: \(totalVolume)".printLog()
}
func onActiveSpeaker(_ uid: String) {
// Active speaker callback
"onActiveSpeaker, uid: \(uid)".printLog()
}Harmony
this.rtcEngineEventListener.onAudioVolumeCallback(
(volumeInfo : AliRtcUserVolumeInfo[], volumeInfoCount : number, totalVolume : number) => {
console.info(`Volume callback: volumeInfo=${volumeInfo}, volumeInfoCount=${volumeInfoCount}, totalVolume=${totalVolume}`);
}
)
this.rtcEngineEventListener.onActiveSpeaker((uid: string) => {
console.info(`Current active user: uid=${uid}`);
});Mac
- (void)onAudioVolumeCallback:(NSArray <AliRtcUserVolumeInfo *> *)array totalVolume:(int)totalVolume {
for(AliRtcUserVolumeInfo *info in array) {
NSString *uid = info.uid;
NSInteger volume = info.volume;
dispatch_async(dispatch_get_main_queue(), ^{
NSArray * volumeArray = [ _audioVolumeLabel.stringValue componentsSeparatedByString:@"\n"];
if ([uid isEqualToString:@"1"]) { // Volume of remote users
// Overall volume of remote users
}else if ([uid isEqualToString:@"0"] ){ // Volume of the local user
// Display the volume of the local user
} else {
// Overall volume of remote users
}
});
}
}
- (void)onActiveSpeaker:(NSString *)uid {
if ([uid isEqualToString:@"0"]) {
[self log:[@"Active speaker: Self" UTF8String]];
} else {
NSDictionary *dic = [self.engine getUserInfo:uid];
NSString *name = dic[@"displayName"];
MyLog(@"Active speaker: %@",name);
}
}
Windows
void CTutorialDlg::OnAudioVolumeCallback(const AliEngineUserVolumeInfo* volumeInfo, int volumeInfoCount, int totalVolume)
{
CArray<AliEngineUserVolumeInfo*>* pArray = new CArray<AliEngineUserVolumeInfo*>;
for (int i = 0; i < volumeInfoCount; i++)
{
AliEngineUserVolumeInfo* p = new AliEngineUserVolumeInfo;
p->uid = volumeInfo[i].uid;
p->volume = volumeInfo[i].volume;
p->speechState = volumeInfo[i].speechState;
p->sumVolume = volumeInfo[i].sumVolume;
pArray->Add(p);
}
/* Notify the UI to refresh */
PostMessage(MM_VOLUME_CALLBACK, (WPARAM)totalVolume, (LPARAM)pArray);
}
void CTutorialDlg::OnActiveSpeaker(const char *uid)
{
m_strCurSpeaker = CString(uid);
/* Notify the UI to refresh */
PostMessage(MM_ACTIVE_SPEAKER, NULL, NULL);
}
6. Konfigurasi routing audio
Routing audio merupakan bagian penting dari manajemen perangkat audio, yang menentukan dan menyesuaikan perangkat pemutaran audio selama panggilan. Jenis perangkat meliputi:
Perangkat pemutaran internal: Biasanya mencakup speaker dan earpiece.
Ketika audio diarahkan ke speaker, volumenya cukup keras untuk didengar tanpa menempelkan ponsel ke telinga. Ini memungkinkan fitur hands-free.
Ketika audio diarahkan ke earpiece, volumenya lebih rendah. Anda harus menempelkan ponsel ke telinga untuk mendengar dengan jelas. Ini memberikan privasi yang lebih baik dan cocok untuk menjawab panggilan telepon.
Perangkat eksternal: Termasuk perangkat audio eksternal seperti headphone kabel dan headset Bluetooth, serta antarmuka audio profesional seperti sound card eksternal.
SDK memiliki prioritas routing audio yang telah ditentukan dan secara otomatis beralih perangkat berdasarkan status koneksi perangkat tambahan. Bagan alir berikut menunjukkan proses ini:
6.1. Rute audio default
Atur rute audio default ke earpiece atau speaker sebelum bergabung ke meeting. Jika tidak diatur, speaker akan digunakan sebagai output default.
Ketika perangkat tambahan seperti headset Bluetooth atau headphone kabel dilepas, audio diputar melalui perangkat yang diatur oleh fungsi ini.
Jika tidak ada perangkat eksternal yang terhubung dan pengguna belum mengatur perangkat saat ini, SDK menggunakan speaker sebagai output default. Untuk mengubah pengaturan default ini, panggil
setDefaultAudioRoutetoSpeakerphone.
/**
* @brief Sets whether the default audio output is the speaker. The default is the speaker.
* @param defaultToSpeakerphone
* - true: Speaker mode.
* - false: Earpiece mode.
* @return
* - 0: Success.
* - <0: Failure.
*/
public int setDefaultAudioRoutetoSpeakerphone(boolean defaultToSpeakerphone);6.2. Rute audio saat ini
Atur rute audio saat ini ke earpiece atau speaker selama meeting. Jika tidak diatur, perangkat yang ditentukan oleh rute audio default akan digunakan.
Panggilan fungsi ini tidak berpengaruh ketika perangkat tambahan seperti headphone kabel atau headset Bluetooth terhubung.
Ketika tidak ada perangkat eksternal yang terhubung, panggil enableSpeakerphone untuk menggunakan speaker, atau atur ke false untuk menggunakan earpiece. Untuk memeriksa apakah perangkat audio saat ini adalah speaker atau earpiece, panggil antarmuka isSpeakerOn.
/**
* @brief Sets the audio output to the earpiece or the speaker.
* @param enable true: Speaker mode. false: Earpiece mode.
* @return
* - 0: Success.
* - <0: Failure.
*/
public int enableSpeakerphone(boolean enable);
/**
* @brief Gets whether the current audio output is the earpiece or the speaker.
* @return
* - true: Speaker mode.
* - false: Earpiece mode.
*/
public boolean isSpeakerOn();6.3. Callback perubahan rute audio
Untuk menerima callback ketika perangkat pemutaran audio berubah, daftarkan dan dengarkan callback berikut.
public abstract class AliRtcEngineEventListener {
/**
* @brief Warning notification.
* @details Notifies the app through this callback if a warning occurs in the engine.
* @param warn The warning type.
* @param message The warning message.
*/
public void onOccurWarning(int warn, String message);
}Tabel berikut menunjukkan pemetaan antara nilai kembali warn dan jenis perangkat.
Return value | Device |
1 | Wired headphones with microphone |
2 | Earpiece |
3 | Wired headphones without microphone |
4 | Speaker |
6 | SCO Bluetooth device |
7 | A2DP Bluetooth device |