最近更新时间:2024.03.13 15:27:32
首次发布时间:2024.02.04 16:01:02
你可以获取格式为 PCM 的原始音频数据,对这些数据进行处理。例如,将数据存储到本地,实现客户端录制音频。
本地音频录制,应用将原始音频数据存储到本地设备中。
客户端内容审核,获取声音数据并传入第三方 SDK,进行音频内容审核。
你已经集成 RTC SDK,实现了基本的音视频通话。
支持获取原始音频数据的 SDK 详见API 及回调。
以下时序图以 Android SDK 中的 API 名称为例。不同端的 SDK 中 API 或回调名称可能略有不同,以 API 及回调为准。
创建和初始化一个音视频引擎类。
如果你需要获取远端的音频数据,还需要加入房间并发布音频流,参考 构建 RTC 应用 获取详细步骤。
rtcVideo = RTCVideo.createRTCVideo(this, Constants.APP_ID, videoEventHandler, null, null);
继承回调类,并实现里面的回调方法。
private IAudioFrameObserver audioFrameObserver = new IAudioFrameObserver() { @Override public void onRecordAudioFrame(IAudioFrame audioFrame) { Log.i(TAG, "onRecordAudioFrame:"); } @Override public void onPlaybackAudioFrame(IAudioFrame audioFrame) { Log.i(TAG, "onPlaybackAudioFrame:"); } @Override public void onRemoteUserAudioFrame(RemoteStreamKey streamKey, IAudioFrame audioFrame) { Log.i(TAG, "onRemoteUserAudioFrame:"); } @Override public void onMixedAudioFrame(IAudioFrame audioFrame) { Log.i(TAG, "onMixedAudioFrame:"); } };
通过 registerAudioFrameObserver
注册音频数据回调。
调用 enableAudioFrameCallback
,为需要收到的音频数据设置回调格式。每次调用只能设置其中一种音频数据的格式。
目标音频数据为录制、回放和混音时,需要在音频参数格式
format
中指定具体的采样率和声道数。
目标音频数据为远端音频流时,音频参数格式format
需要设置为自动。
RawAudioDataObserver
中接收对应类型的音频回调数据,你可以在回调数据中实现音频录制等操作。// 注册音频数据回调 rtcVideo.registerAudioFrameObserver(audioFrameObserver); //设置回调音频格式 AudioFormat format = new AudioFormat(AudioSampleRate.AUDIO_SAMPLE_RATE_48000, AudioChannel.AUDIO_CHANNEL_MONO); // 开启本地麦克风录制的音频数据回调 rtcVideo.enableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_RECORD, format); // 开启本地麦克风录制和订阅的远端所有用户混音后的音频数据回调 rtcVideo.enableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_MIXED, format); // 开启订阅的远端所有用户混音后的音频数据回调 rtcVideo.enableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_PLAYBACK, format); //设置回调音频格式 AudioFormat audioFormat = new AudioFormat(AudioSampleRate.AUDIO_SAMPLE_RATE_AUTO, AudioChannel.AUDIO_CHANNEL_AUTO); // 开启订阅的远端每个用户混音前的音频数据回调 rtcVideo.enableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_REMOTE_USER, audioFormat);
不再需要音频数据时,给 registerAudioFrameObserver
传空可关闭回调。
rtcVideo.disableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_RECORD); rtcVideo.disableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_MIXED); rtcVideo.disableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_PLAYBACK); rtcVideo.disableAudioFrameCallback(AudioFrameCallbackMethod.AUDIO_FRAME_CALLBACK_REMOTE_USER);
通话结束后,销毁音视频引擎。
如果用户已经进入房间,则需要在销毁所有房间实例后再销毁音视频引擎。
RTCVideo.destroyRTCVideo();
参考以下项目获取完整代码。
以下客户端 SDK 均支持获取原始音频数据。你可以根据上文中的描述和实例,使用不同的 SDK,在不同的端上实现这个功能。
说明:表格中的 macOS API 接口为 Objective-C,而示例项目中的 macOS 项目使用的是 Windows SDK 中的 API 接口。
A:确认调用 enableAudioFrameCallback
时传入的参数 method
和 format
是否匹配,参考以下表格。
参数含义 | 参数名称 | 参数取值组合 1 | 参数取值组合 2 |
---|---|---|---|
音频回调方法 |
|
|
|
音频格式 | format | 指定采样率和声道 | -1 : 自动 |
A:通过本文提到的回调获取数据,进行处理后,不会影响发送到远端的数据。如果你希望处理音频数据后,送回 RTC 进行编码和发送,应使用 registerAudioProcessor
方法,参见 自定义音频处理。