腾讯云实时音视频Android&iOS&Windows&Mac_音视频解决方案_同尘科技

实时音视频 2年前 (2023-07-11) 浏览 95

本文档主要介绍如何使用 TRTC SDK 实现自定义音频采集和获取,分为:音频采集、音频获取两个部分。

自定义音频采集

TRTC SDK 的自定义音频采集功能的开启分为两步,即:开启功能、发送音频帧给 SDK,具体 API 使用步骤见下文,同时我们也提供有对应平台的 API-Example:AndroidiOSWindows

开启自定义音频采集功能

首先,您需要调用 TRTCCloud 的 enableCustomAudioCapture 接口开启 TRTC SDK 自定义音频采集的功能,示例代码如下:Android iOS&Mac Windows

TRTCCloud mTRTCCloud = TRTCCloud.shareInstance();mTRTCCloud.enableCustomAudioCapture(true);
self.trtcCloud = [TRTCCloud sharedInstance];[self.trtcCloud enableCustomAudioCapture:YES];
liteav::ITRTCCloud* trtc_cloud = liteav::ITRTCCloud::getTRTCShareInstance();trtc_cloud->enableCustomAudioCapture(true);



发送自定义音频帧

然后您就可以使用 TRTCCloud 的 sendCustomAudioData 接口向 TRTC SDK 填充您自己的声音数据,示例代码如下:Android iOS&Mac Windows

TRTCCloudDef.TRTCAudioFrame trtcAudioFrame = new TRTCCloudDef.TRTCAudioFrame();trtcAudioFrame.data = data;trtcAudioFrame.sampleRate = sampleRate;trtcAudioFrame.channel = channel;trtcAudioFrame.timestamp = timestamp;mTRTCCloud.sendCustomAudioData(trtcAudioFrame);
TRTCAudioFrame *audioFrame = [[TRTCAudioFrame alloc] init];audioFrame.channels = audioChannels;audioFrame.sampleRate = audioSampleRate;audioFrame.data = pcmData;
[self.trtcCloud sendCustomAudioData:audioFrame];
liteav::TRTCAudioFrame frame;frame.audioFormat = liteav::TRTCAudioFrameFormatPCM;frame.length = buffer_size;frame.data = array.data();frame.sampleRate = 48000;frame.channel = 1;getTRTCShareInstance()->sendCustomAudioData(&frame);


注意 使用 sendCustomAudioData 有可能会导致回声抵消(AEC)的功能失效。

获取音频原数据

声音模块是一个高复杂度的模块,SDK 需要严格控制声音设备的采集和播放逻辑。在某些场景下,当您需要获取远程用户的音频数据或者需要获取本地麦克风采集到的音频数据时,可以通过 TRTCCloud 对应的不同平台的接口,我们也提供有对应平台的 API-Example:Android:iOSWindows

设置音频回调函数

Android iOS&MacWindows

mTRTCCloud.setAudioFrameListener(new TRTCCloudListener.TRTCAudioFrameListener() {        @Override        public void onCapturedRawAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) {
}
@Override public void onLocalProcessedAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) {
}
@Override public void onRemoteUserAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame, String s) {
}
@Override public void onMixedPlayAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) {
}
@Override public void onMixedAllAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // 详见TRTC-API-Example 中自定义渲染的工具类:com.tencent.trtc.mediashare.helper.CustomFrameRender } });
 [self.trtcCloud setAudioFrameDelegate:self]; // MARK: - TRTCAudioFrameDelegate - (void)onCapturedRawAudioFrame:(TRTCAudioFrame *)frame {        NSLog(@"onCapturedRawAudioFrame");}
- (void)onLocalProcessedAudioFrame:(TRTCAudioFrame *)frame { NSLog(@"onLocalProcessedAudioFrame");}
- (void)onRemoteUserAudioFrame:(TRTCAudioFrame *)frame userId:(NSString *)userId { NSLog(@"onRemoteUserAudioFrame");}
- (void)onMixedPlayAudioFrame:(TRTCAudioFrame *)frame { NSLog(@"onMixedPlayAudioFrame");}
- (void)onMixedAllAudioFrame:(TRTCAudioFrame *)frame { NSLog(@"onMixedAllAudioFrame");}
// 设置音频数据自定义回调liteav::ITRTCCloud* trtc_cloud = liteav::ITRTCCloud::getTRTCShareInstance();trtc_cloud->setAudioFrameCallback(callback)
// 音频数据自定义回调
virtual void onCapturedRawAudioFrame(TRTCAudioFrame* frame) {}
virtual void onLocalProcessedAudioFrame(TRTCAudioFrame* frame) {}
virtual void onPlayAudioFrame(TRTCAudioFrame* frame, const char* userId) {}
virtual void onMixedPlayAudioFrame(TRTCAudioFrame* frame) {}


注意不要在上述回调函数中做任何耗时操作,建议直接拷贝,并通过另一线程进行处理,否则会导致声音断断续续或者回声抵消(AEC)失效的问题。上述回调函数中回调出来的数据都只允许读取和拷贝,不能修改,否则会导致各种不确定的后果。

对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?