我试图将我的音频呼叫强制为单声道,我愿意使用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
链接上还有许多其他功能,但我不知道他们是否能够正确使用我选择的编解码器。
提前致谢!
答案 0 :(得分:4)
对于音频," a = rtpmap"的格式行是:
a=rtpmap:<payload type> <encoding name>/<clock rate>[/<number of channels>]
例如:
a=rtpmap:111 opus/48000/2
因此,您可以扫描这些行,并删除任何带有2个通道的编解码器。请注意,要删除编解码器,您还需要从&#34; m =&#34;删除有效负载类型(在本例中为111)。 line,并删除&#34; a = fmtp&#34;它的线条。我相信sdputils.js有代码来执行此类操作。
Opus有点特殊情况,因为它总是显示为有2个声道,这使得它可以在单声道和立体声带内切换,而无需进行新的提供/应答。因此,对于Opus,立体声与单声道偏好由&#34;立体声&#34;表示。参数设置为0或1:
a=fmtp:111 stereo=0
答案 1 :(得分:0)
您可以使用https://github.com/beradrian/sdpparser,然后将整个SDP有效内容修改为JSON对象。免责声明:我是sdpparser的作者。