【问题标题】:What is the minimal SDP answer to receive WebRTC Audio and Video?接收 WebRTC 音频和视频的最低 SDP 答案是什么?
【发布时间】:2015-02-19 11:29:08
【问题描述】:

我目前正在尝试将 WebRTC MediaStreams 流式传输到我的服务器,并将其记录下来。遗憾的是没有原生的 Java webRTC 端点,所以我想自己实现这个特殊情况。

现在,给定一个提议 sdp 和我的服务器的公共 IP,我如何构建浏览器启动 SRTP 所需的 DTLS 握手所需的最小 sdp 响应?

如果您想解释一个具体的例子,请使用下面的 sdp 报价(源于带有单个视频 mediaStream 的 chrome)并假设服务器的公共 IP 为“12.34.56.78”:

v=0
o=- 8782460735244849509 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video
a=msid-semantic: WMS oHpG0QpIucmqjpjl26NElSfQfQD9Lnetl3Tn
m=video 59183 RTP/SAVPF 100 116 117 96
c=IN IP4 192.168.178.37
a=rtcp:59183 IN IP4 192.168.178.37
a=candidate:1833114227 1 udp 2122063615 192.168.178.37 59183 typ host generation 0
a=candidate:1833114227 2 udp 2122063615 192.168.178.37 59183 typ host generation 0
a=candidate:599844483 1 tcp 1518083839 192.168.178.37 0 typ host tcptype active generation 0
a=candidate:599844483 2 tcp 1518083839 192.168.178.37 0 typ host tcptype active generation 0
a=ice-ufrag:6iMBf9B5eBE6OQmW
a=ice-pwd:cc+Og0UJeyl5aUAYHNU2ixY0
a=ice-options:google-ice
a=fingerprint:sha-256 5C:1C:0B:92:6C:E7:87:D1:E0:83:26:2E:D9:90:B2:58:B0:76:D6:AF:D1:E9:38:91:C0:AF:1D:92:13:45:13:AC
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=ssrc-group:FID 2157921332 2260451967
a=ssrc:2157921332 cname:36oaVisUAzbVEQm5
a=ssrc:2157921332 msid:oHpG0QpIucmqjpjl26NElSfQfQD9Lnetl3Tn bdea0afa-598b-4829-9dfd-ceb9e8c6d23d
a=ssrc:2157921332 mslabel:oHpG0QpIucmqjpjl26NElSfQfQD9Lnetl3Tn
a=ssrc:2157921332 label:bdea0afa-598b-4829-9dfd-ceb9e8c6d23d
a=ssrc:2260451967 cname:36oaVisUAzbVEQm5
a=ssrc:2260451967 msid:oHpG0QpIucmqjpjl26NElSfQfQD9Lnetl3Tn bdea0afa-598b-4829-9dfd-ceb9e8c6d23d
a=ssrc:2260451967 mslabel:oHpG0QpIucmqjpjl26NElSfQfQD9Lnetl3Tn
a=ssrc:2260451967 label:bdea0afa-598b-4829-9dfd-ceb9e8c6d23d

【问题讨论】:

    标签: webrtc rtp sdp


    【解决方案1】:

    您需要使用将接收媒体的 ip:port 进行回答,并仅使用该信息添加一名候选人。 在下面的示例中,将端口设为 22222。

    您可以过滤要使用的编解码器。我选择了VP8。请注意,您需要更新 m=video 行以仅包含正确的有效负载类型(在 VP8 的情况下为 100)。

    如果你不支持扩展,你也应该删除它们(a=extmap...)

    如果您不支持捆绑包(并且您不需要它用于仅视频通话),则需要删除 a=GROUP... 和 a=mid... 属性。同样在这种情况下,您不需要生成 ssrc 标签,因此您也可以删除 a=ssrc...。

    您收到了 setup:actpass,因此您需要回答 setup:passive 或 setup:active 取决于您是要启动连接检查还是让它们启动。

    好的,到目前为止,您只是删除了非强制性的内容。现在您需要将您的部分添加到 SDP。您需要生成 ice 凭据并添加它们作为响应。

    最后,您需要在服务器上拥有自己的证书(可以是自签名证书)并在 SDP 上共享指纹。

    v=0
    o=- 6548769878907123 4 IN IP4 127.0.0.1
    s=-
    t=0 0
    m=video 22222 RTP/SAVPF 100
    c=IN IP4 12.34.56.78
    a=rtcp:22222 IN IP4 12.34.56.78
    a=candidate:234234234 1 udp 768678678678 12.34.56.78 22222 typ host generation 0
    a=ice-ufrag:yourgeneratedufrag
    a=ice-pwd:yourgeneratedicepw
    a=ice-options:google-ice
    a=fingerprint:sha-256 YOUR_CERTIFICATE_FINGERPRINT_GOES_HERE
    a=setup:passive
    a=sendrecv
    a=rtcp-mux
    a=rtpmap:100 VP8/90000
    a=rtcp-fb:100 ccm fir
    a=rtcp-fb:100 nack
    a=rtcp-fb:100 nack pli
    a=rtcp-fb:100 goog-remb
    

    请注意,您需要在 DTLS 握手之前处理并生成 ICE(经过身份验证的 STUN 请求)。

    所以,这不是一个简单的任务......

    【讨论】:

      【解决方案2】:

      我不认为它会像你想象的那么容易。您必须建立 ICE 连接。似乎有几个图书馆应该能够帮助您解决这个问题。您应该插入由此类库创建的 ICE 候选对象。

      对于 SDP 的转换,您可能想看看我的 WebRTC Echo 服务器中的一些代码,它执行类似的操作:https://github.com/Innovailable/webrtc-echo/blob/master/src/echo.coffee

      【讨论】:

      • 当我问这个问题时,我认为可以简单地构建一个包含服务器众所周知的公共 IP、ubt 的 ICE 候选者,从那时起我已经阅读了关于交换 stun 消息以确保双向链接的信息,这这里不是必需的,但规范要求:/ 看看你的例子
      【解决方案3】:

      虽然您的示例中有具有相同 IP 的候选者,但更通用的情况是不同的候选者来自 ICE 环境的不同部分。

      来自应用程序 IP 的 2 名候选人 来自 STUN 服务器的 2 名候选人 来自 TURN 服务器的 2 名候选人

      在另一个上锁定是基于您从媒体服务器端提出的等效集,然后发生 ICE 数据包握手。基本上,这些都是特定的路由,在端点锁定到能够使用一个特定集合建立双向握手之前,应尝试每一个路由。媒体/RTP 应该仅在该特定路由中开始流动。

      之前的答案是一个普通的 SDP 报价-答案案例,而涉及 ICE 的情况已不再如此。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        • 2023-03-03
        • 2015-10-04
        • 2018-10-13
        • 2021-02-09
        相关资源
        最近更新 更多