摄像头webrtc对讲方案之metaRTC+ZLMediaKit

概述

网络摄像头可以通过网络远程查看实时视频图像,也可以和浏览器与手机APP等对讲,对讲方案有P2P/SFU/MCU等。metaRTC+ZLMediaKit是一个比较适合的SFU对讲方案。

语音编码

考虑摄像头算力低以及拾音器采样率等因素,G711比OPUS更适合。

  1. metaRTC支持G711A(PCMA)/G711U(PCMU)
  2. metaRTC采用缓存等技术实现G711A/G711U占用CPU算力极低
  3. ZLMediaKit支持G711 webRTC推拉流

视频编码

考虑到市面上摄像头硬编码大多支持H264/H265,视频编码H264/H265是比较适合的选项。

综上所述推荐G711+H264/H265音视频编码。

语音处理

摄像头对讲语音处理是其中非常重要的模块,实现流畅、清晰、稳定的对讲需要多种声音处理模块。

回声消除AEC(Acoustic Echo Chancellor)

AEC会监测扬声器和麦克风拾音器输入之间的回声,并使用算法来抵消回声信号,避免出现回声和延迟以提高语音对讲质量。

YangRtcAec *aec;
//aecLib 1:webrtc aec 0:speexdsp aec 2:内置AEC或其他AEC实现
yang_create_rtcaec(session->aec,aecLib);

aec->echoPlayback(aec->session,pcm); 
aec->echoCapture(aec->session, input, pcm);

自适应增益控制AGC(Automatic Gain Control)

AGC可以自动检测音频信号强度和自动调整输入和输出音频信号的音量,防止音频音量忽大忽小,保证音频采集和播放的稳定性。

YangAgc* agc;
agc->agcProcess(agc->session,pcm);

背景噪音抑制ANS(Automatic Noise Suppression)

ANS可探测出背景固定频率的杂音并消除背景噪音,例如:风扇、空调声等杂音会自动滤除,使声音更清晰。

YangRtcAns* ans;
ans->preprocess_run(ans->session,pcm);

语音动态侦测VAD(Voice Activity Detection)

VAD算法的作用是检测是否是人的语音,可作为其他音频处理的参考。

YangVad* vad;
vad->voiceActivity(vad->session,pcm,frameSize,sampleRate);

舒适噪音生成CNG(Comfort Noise Generation)

CNG是一个在对讲过程中出现短暂静音时用来为对讲产生背景噪声的模块,常用在VAD检测没有人声时处理。

YangCng* cng;
cng->voiceGenerate(cng->session,pcm,frameSize,sampleRate);

视频处理

对讲时受网络影响视频会有花屏绿屏、卡顿等情形发生,花屏绿屏影响尤甚,花屏会被非专业用户误认为是产品质量问题而非网络问题。

视频处理模块非常重要的一项功能是减少或者消除花屏绿屏情形。

音视频流

考虑到ZLMediaKit等SFU只接收单向传输流,对讲需建立推拉两个流。

  1. 推流:采集摄像头视频和拾音器(麦克风)音频推流到ZLMediaKit。
  2. 拉流:从ZLMediaKit拉流播放远端视频和声音。

猜你喜欢

转载自blog.csdn.net/m0_56595685/article/details/130836649