通过Websocket发送WebRTC MediaStream (在HTTP / Websocket上的RTP)

10

WebRTC 是用于实时浏览器到浏览器媒体通信的技术,但在我这个案例中,它将被用于浏览器到服务器的音频通信。

根据我收集到的信息,MediaStream 是使用 RTP over UDP 进行传输的。

这将需要至少两个额外的端口,除了用于信令的协议之外,这是我想避免的。

在 WebRTC 中,是否有可能使用 RTP over Websocket 而不是 RTP over UDP,以便我只需要使用 80 或 443 端口?

2个回答

10

抱歉,使用WebRTC不可能实现此目的。

WebRTC旨在为浏览器提供三个主要功能:

  1. 能够访问设备的摄像头和麦克风;
  2. 能够建立SRTP会话以发送/接收音频和视频;
  3. 能够在浏览器之间建立点对点数据通道。

这些功能可通过JavaScript API在Web应用程序中访问,定义在这里。 要访问媒体设备,可以使用getUserMedia(),然后获取一个MediaStream以附加到HTML5音频和视频标记上。 要创建SRTP会话,需要创建对等连接并管理要使用的流。

你必须向浏览器请求媒体SDP报告并使用任何协议(例如WebSockets)将其发送给另一方。当另一方接收到你的SDP报告时,它可以将其注入浏览器中,请求SDP答案并将其发送回来。一旦两个浏览器都有报告,它们就开始使用ICE启动SRTP协商。

因此,你将无法访问RTP包以通过WebSockets发送它们。


我早就猜到了。所以,额外的两个端口就是它了。感谢你的明确答案! - ANisus
有没有可能用JSON对象创建自己的mediaStream?只是好奇。 - cggaurav
不,媒体流始终由浏览器提供。它可以是本地媒体流,您可以从getUserMedia()方法中获取它,也可以是远程媒体流,您可以从对等连接中接收它。 - nakib
Nakib,我做了一个类似的问题,因为我想知道websocket和webrtc之间的限制是什么,我很感激你的知识...https://dev59.com/yHvaa4cB1Zd3GeqPDXfs 谢谢! - user1050817
那么当只允许HTTP数据包时,你如何解决这种情况? - Md. Arafat Al Mahmud
1
你需要使用TCP over TLS。 - nakib

3
实际上,计划支持RTCP-mux RFC 5761 和某种形式的BUNDLE(仍在讨论中),以将所有流合并到单个端口上。然而,端口将由ICE/STUN选择。必要时,它还将使用TURN,并最终支持可以运行在80端口上的TURN-TCP。然而,质量会受到影响。

+1 很高兴知道这可能是未来的解决方案,并有一些我可以进一步研究的协议。当然,与UDP相比,通过TCP发送将会有一定的成本,但对于一些公司来说,这可能是他们愿意支付的价格。 - ANisus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接