音频传输过程中,我们可以对采集到的音频数据进行前处理和后处理,获取想要的播放效果。 对于有自行处理音频数据需求的场景,百家云提供原始数据功能。你可以在将数据发送给编码器前进行前处理,对捕捉到的音频信号进行修改。
相关函数接口在 android-sdk 2.8.9 及以上版本支持
通过接口 setLocalVideoProcessListener 设置本地视频帧监听,通过回调函数接收编码前采集的原始视频数据, 返回处理后的数据给 sdk 做后续处理。
BRTC engine = BRTC.sharedInstance(getApplicationContext()); engine.setListener(brtcListener); engine.setDefaultStreamRecvMode(autoRecvAudio, autoRecvVideo); BRTCDef.BRTCParams BRTCParams = new BRTCDef.BRTCParams(String.valueOf(GenerateTestUserSig.SDKAPPID),roomId, localUid, uSig, BRTCDef.BRTCRoleType.BRTCRoleAnchor); engine.enterRoom(BRTCParams); BBRTCListener brtcListener = new BRTCListener() { @Override public void onEnterRoom(long result) { logView.logI("成功加入房间:" + result)); //设置视频帧监听回调 engine.setLocalVideoProcessListener(BRTCVideoFrame.BRTC_VIDEO_PIXEL_FORMAT_Texture_2D,BRTC_VIDEO_BUFFER_TYPE_TEXTURE, brtcVideoFrameListener); BRTCDef.BRTCVideoEncParam videoParam = new BRTCDef.BRTCVideoEncParam(); engine.setVideoEncoderParam(videoParam); engine.startLocalPreview(true, localVideoViewMaster); engine.startLocalAudio(BRTCDef.BRTCAudioQuality.BRTCAudioQualitySpeech); engine.muteLocalVideo(false); engine.muteLocalAudio(false); } }; BRTCListener.BRTCVideoFrameListener brtcVideoFrameListener = new BRTCListener.BRTCVideoFrameListener() { //SDK 内部的 OpenGL 环境的创建通知 @Override public void onGLContextCreated() { } //第三方美颜的视频数据回调,需要使用 BRTC 中的 setLocalVideoProcessListener 接口进行设置 //srcFrame 用于承载 BRTC 采集到的摄像头画面 //dstFrame 用于接收第三方美颜处理过的视频画面 @Override public int onProcessVideoFrame(BRTCVideoFrame srcFrame, BRTCVideoFrame dstFrame) { if (srcFrame.bufferType == BRTC_VIDEO_BUFFER_TYPE_TEXTURE) { dstFrame.texture.textureId = srcFrame.texture.textureId; } Bitmap bitmap = VideoFrameConverter.convertBRTCVideoFrameToBitmap(srcFrame); runOnUiThread(() -> { localVideoLayoutSlave.setBackground(new BitmapDrawable(getResources(), bitmap)); }); return 0; } //SDK 内部的 OpenGL 环境的销毁通知 @Override public void onGLContextDestroy() { } };
通过接口 setAudioFrameListener 设置本地音频帧监听,通过回调函数接收编码前采集的原始音频数据, 做语音识别等
BRTC engine = BRTC.sharedInstance(getApplicationContext()); engine.setListener(brtcListener); engine.setDefaultStreamRecvMode(autoRecvAudio, autoRecvVideo); BRTCDef.BRTCParams BRTCParams = new BRTCDef.BRTCParams(String.valueOf(GenerateTestUserSig.SDKAPPID),roomId, localUid, uSig, BRTCDef.BRTCRoleType.BRTCRoleAnchor); engine.enterRoom(BRTCParams); BBRTCListener brtcListener = new BRTCListener() { @Override public void onEnterRoom(long result) { logView.logI("成功加入房间:" + result)); //设置音频频帧监听回调 engine.setAudioFrameListener(brtcAudioFrameListener); BRTCDef.BRTCVideoEncParam videoParam = new BRTCDef.BRTCVideoEncParam(); engine.setVideoEncoderParam(videoParam); engine.startLocalPreview(true, localVideoViewMaster); engine.startLocalAudio(BRTCDef.BRTCAudioQuality.BRTCAudioQualitySpeech); engine.muteLocalVideo(false); engine.muteLocalAudio(false); } }; BRTCListener.BRTCAudioFrameListener brtcAudioFrameListener = new BRTCListener.BRTCAudioFrameListener() { //本地采集并经过音频模块前处理后的音频数据回调 @Override public void onCapturedRawAudioFrame(BRTCDef.BRTCAudioFrame audioFrame) { //接收到数据后的处理逻辑 } //本地采集并经过音频模块前处理、音效处理和混 BGM 后的音频数据回调 @Override public void onLocalProcessedAudioFrame(BRTCDef.BRTCAudioFrame audioFrame) { //接收到数据后的处理逻辑,比如语言识别等 } //提供播放器播放前的音频帧数据及格式,简单说就是送去播放的数据,从这里可以拿到一份 @Override public void onCustomAudioRenderingFrame(BRTCDef.BRTCAudioFrame audioFrame) { } };
原始数据采集
音频传输过程中,我们可以对采集到的音频数据进行前处理和后处理,获取想要的播放效果。 对于有自行处理音频数据需求的场景,百家云提供原始数据功能。你可以在将数据发送给编码器前进行前处理,对捕捉到的音频信号进行修改。
相关函数接口在 android-sdk 2.8.9 及以上版本支持
视频原始数据读取
通过接口 setLocalVideoProcessListener 设置本地视频帧监听,通过回调函数接收编码前采集的原始视频数据, 返回处理后的数据给 sdk 做后续处理。
音频原始数据
通过接口 setAudioFrameListener 设置本地音频帧监听,通过回调函数接收编码前采集的原始音频数据, 做语音识别等