【问题标题】:How to control mono/stereo in WebRTC audio call?如何在 WebRTC 音频通话中控制单声道/立体声?
【发布时间】:2017-06-26 10:19:18
【问题描述】:

我正在尝试将我的音频呼叫强制为单声道,我愿意使用 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

链接上还有许多其他功能,但我不知道它们是否能在我选择的编解码器上正常工作。

提前致谢!

【问题讨论】:

    标签: javascript webrtc rtp sdp


    【解决方案1】:

    对于音频,“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
    

    【讨论】:

    • 实际上 Opus 总是声明为opus/48000/2,因为它可以在会话期间透明地在单声道和立体声之间切换。接收器可以使用stereo fmtp 参数来指示它是否更喜欢立体声(默认为stereo=0,即单声道)。发送方还可以通过sprop-stereo 参数(默认sprop-stereo=0)指示是否可能发送立体声。有关详细信息,请参阅RFC 7587。无论发送什么,Opus 解码器都可以将其输出为单声道或立体声。此行可能是您的 SDP 中最灵活的行,而不是要删除的行。
    • 你能解释一下什么是单声道,什么是立体声吗?提前致谢
    【解决方案2】:

    您可以使用https://github.com/beradrian/sdpparser,然后将整个 SDP 有效负载修改为 JSON 对象。免责声明:我是 sdpparser 的作者。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 2020-03-12
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      相关资源
      最近更新 更多