网络摄像头可以通过网络远程查看实时视频图像,也可以和浏览器与手机APP等对讲,对讲方案有P2P/SFU/MCU等。metaRTC+ZLMediaKit是一个比较适合的SFU对讲方案。
考虑摄像头算力低以及拾音器采样率等因素,G711比OPUS更适合。
考虑到市面上摄像头硬编码大多支持H264/H265,视频编码H264/H265是比较适合的选项。
综上所述推荐G711+H264/H265音视频编码。
摄像头对讲语音处理是其中非常重要的模块,实现流畅、清晰、稳定的对讲需要多种声音处理模块。
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可以自动检测音频信号强度和自动调整输入和输出音频信号的音量,防止音频音量忽大忽小,保证音频采集和播放的稳定性。
YangAgc* agc;
agc->agcProcess(agc->session,pcm);
ANS可探测出背景固定频率的杂音并消除背景噪音,例如:风扇、空调声等杂音会自动滤除,使声音更清晰。
YangRtcAns* ans;
ans->preprocess_run(ans->session,pcm);
VAD算法的作用是检测是否是人的语音,可作为其他音频处理的参考。
YangVad* vad;
vad->voiceActivity(vad->session,pcm,frameSize,sampleRate);
CNG是一个在对讲过程中出现短暂静音时用来为对讲产生背景噪声的模块,常用在VAD检测没有人声时处理。
YangCng* cng;
cng->voiceGenerate(cng->session,pcm,frameSize,sampleRate);
对讲时受网络影响视频会有花屏绿屏、卡顿等情形发生,花屏绿屏影响尤甚,花屏会被非专业用户误认为是产品质量问题而非网络问题。
视频处理模块非常重要的一项功能是减少或者消除花屏绿屏情形。
考虑到ZLMediaKit等SFU只接收单向传输流,对讲需建立推拉两个流。