WebRTC 主要用于浏览器到浏览器的实时媒体通信,但在我的情况下,它将用于浏览器到服务器的音频通信。
根据我收集的信息,MediaStream 是使用 RTP over UDP 传输的。
除了用于信令的协议之外,这将需要至少两个额外的端口,这是我想避免的。
在 WebRTC 中,是否有可能使用 RTP over Websocket 而不是 RTP over UDP,这样我只需要使用端口 80 或 443?
不,使用 WebRTC 是不可能的。
WebRTC 旨在为浏览器提供三个主要功能:
Web 应用程序可以通过此处定义的 Javascript API 访问这些功能。要访问媒体设备,您可以使用getUserMedia()并且您将获得一个 MediaStream 以附加到 HTML5 音频和视频标签。要创建 SRTP 会话,您需要创建对等连接并管理要使用的流。
您必须向浏览器请求媒体 SDP 提供并使用任何协议(例如 websockets)将其发送给另一方。当对方收到您的 SDP 报价时,它可以将其注入浏览器,请求 SDP 答复,然后将其发回。一旦两个浏览器都有报价,它们就会使用 ICE 开始 SRTP 协商。
因此,您将无法访问 RTP 数据包以通过 websocket 发送它们。
实际上,计划是支持 RTCP-mux RFC 5761和某种形式的 BUNDLE(仍在辩论中)将所有流合并到一个端口上。但是,端口将由 ICE/STUN 选择。需要时,它还会使用 TURN,并最终支持 TURN-TCP,我相信它可以在端口 80 上运行。然而,质量会受到影响。