Ale*_*ama 4 javascript rtp sdp webrtc
我试图将我的音频呼叫强制为单声道,我愿意使用 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;
}
Run Code Online (Sandbox Code Playgroud)
其他功能可以在这里找到:
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
Run Code Online (Sandbox Code Playgroud)