sip - webrtc与SIP通信,如何获取stream、ice?

标签 sip webrtc

<分区>

现在我正在制作 webrtc 信号服务器,使用 SIP。 我有大问题。如何从远程SIP客户端获取流和ICE候选?

  1. 在webrtc客户端,调用getusermedia -> peerconnection -> createoffer -> receive stream

  2. 和 webrtc 客户端发送 session 描述 (SDP) 给信号服务器。

  3. 信号服务器创建 SIP Invite 消息,使用 webrtc 客户端 session 描述(SDP)

  4. 信号服务器与 SIP 客户端(如 jitsi)通信 SIP 消息

  5. webrtc 客户端需要接收 ICE 候选和 STREAM。如何获得?

    我可以从远程 SDP 消息中创建 ICE 候选和流吗?

最佳答案

SDP 是 SIP 和 WebRTC 使用的自己的协议(protocol)。您可以在 SDP 交换中发送大量信息。

SIP 绝对可以通过 SDP 发送连接信息。你必须确保连接信息在 SIP 端是正确的(让它与 STUN/TURN 服务器协商),一旦它有好的信息,你可以简单地用该信息编写 SDP 并发送它。

至于媒体,您必须处理双方之间的 DTLS-SRTP key 交换过程,以便双方都可以对 SRTP 媒体进行加密/解密(双方都有主 key )。

一旦您在双方都拥有主 key 、您的连接信息(ips/端口)和您的媒体(相同的编解码器),那么您可以简单地流式传输通过 ips/端口商定的编解码器进行了协商。

当您的 SIP 客户端与 ICE 服务器通信时,您可以创建自己的 Ice Trickling 并创建 Ice 候选对象,并将其简单地发送到另一端,但等待所有 ICE 协商完成后再尝试协商可能会更容易连接本身。您必须弄清楚 SIP 端的协商何时完成,但 RTCPeerConnection 已为此 already 准备好信号。

您可能想查看 sipML5 。您将不得不做一些与他们正在做的事情类似的事情,以使所有这些事件部件正常工作。

TL;DR 注释:

  1. 你独立地与双方的 ICE(stun 或 turn)服务器进行协商,从中获取良好的连接信息,并将其写入 SDP(你可以在 SIP 端解析 ICE 候选以获得良好的连接,并写信给 SDP,所有候选人都聚集在 SIP 端)
  2. 注意 RTP/RTCP 多路复用。确保您的媒体端可以解复用这些数据包(如果与 chrome 通信)。
  3. 你应该阅读 DTLS-SRTP Linky Linky2 Linky3
  4. 阅读 SDP

编辑:有网关宣称它已经可以做到这一点。 Janus-Gateway 也可能是了解如何执行此操作的好资源。 SIP 插件似乎能够与 SIP 设备通信。恕我直言,这个源代码比 SIPML5 的更容易理解

关于sip - webrtc与SIP通信,如何获取stream、ice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381499/

相关文章:

android - 在 pjsip android 中从前向后切换相机

node.js - 如何通过nodejs进行SIP调用

Android SIP 没有来电事件(doubango)

javascript - 在浏览器中使用 Javascript 端口敲击 UDP

android - Webrtc Android 摄像头捕获

使用 UIWebView 或任何替代方法与 webRTC 进行 iOS 视频/音频通话

java - SIP 服务器中的身份验证问题

Asterisk sip.conf 呼出配置

swift - WebRTC RTCSessionDescription swift

ubuntu - 在 Ubuntu 16.04.3 x64 TLS 上安装 CoTurn 4.5.0.6 不起作用