[英]How to control mono/stereo in WebRTC audio call?
我试图将音频呼叫强制为单声道,我愿意使用PCMU,G.729,OPUS和SpeeX作为此呼叫的编解码器。
现在,我正在使用以下代码在我的sdp消息中搜索所选的编解码器:
function maybePreferCodec(sdp, type, dir, codec) {
var str = type + ' ' + dir + ' codec';
if (codec === '') {
return sdp;
}
var sdpLines = sdp.split('\r\n');
// Search for m line.
var mLineIndex = findLine(sdpLines, 'm=', type);
if (mLineIndex === null) {
return sdp;
}
// If the codec is available, set it as the default in m line.
var codecIndex = findLine(sdpLines, 'a=rtpmap', codec);
console.log('codecIndex', codecIndex);
if (codecIndex) {
var payload = getCodecPayloadType(sdpLines[codecIndex]);
if (payload) {
sdpLines[mLineIndex] = setDefaultCodec(sdpLines[mLineIndex], payload);
}
}
sdp = sdpLines.join('\r\n');
return sdp;
}
其他功能可以在这里找到:
http://www.codeforge.com/read/252733/sdputils.js__html
链接上还有许多其他功能,但我不知道它们是否可以在我选择的编解码器上正常工作。
提前致谢!
对于音频,“ a = rtpmap”行的格式为:
a=rtpmap:<payload type> <encoding name>/<clock rate>[/<number of channels>]
例如:
a=rtpmap:111 opus/48000/2
因此,您可以扫描这些行,并删除具有2个通道的所有编解码器。 请注意,要删除编解码器,您还需要从“ m =”行中删除有效负载类型(在本例中为111),并为其删除“ a = fmtp”行。 我相信sdputils.js具有执行此类操作的代码。
但是Opus有点特殊,因为它总是显示为具有2个通道,这使它可以在单声道和立体声带内之间切换,而无需进行新的报价/回答。 因此,对于Opus,立体声和单声道首选项由设置为0或1的“立体声”参数表示
a=fmtp:111 stereo=0
您可以使用https://github.com/beradrian/sdpparser ,然后将整个SDP有效内容修改为JSON对象。 免责声明:我是sdpparser的作者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.