【问题标题】:How does Youtube/Facebook live stream from web browser works来自网络浏览器的 Youtube/Facebook 直播如何工作
【发布时间】:2019-04-03 00:59:00
【问题描述】:

我正在寻找一种使用网络浏览器实现视频编码器的方法。 Youtube 和 Facebook 已经允许您直接通过网络浏览器进行直播。我想知道他们是怎么做到的?

我研究了几个解决方案:

  • 使用 web socket:使用 web 浏览器对视频进行编码(使用 mediarecorder api)并将编码后的视频推送到服务器进行广播。
  • 使用 WebRTC:Web 浏览器作为 WebRTC 对等体,另一台服务器作为另一端接收流并使用其他方式(rtmp、hls)重新广播(转码)。

这些人(YouTube、Facebook)正在使用其他技术来实现这一点吗?或者他们也使用这些东西之一?

谢谢

【问题讨论】:

  • 我认为使用了 websocket,webrtc 用于点对点直接但上次我检查它并不能保证所以你需要设置名为 TURN 的中间服务器?服务器。这就像继电器。看看不和谐的 websocket 缩放
  • @MuhammadUmer WebRTC 可以很好地用于连接浏览器和服务器。在这种情况下,服务器只是“对等方”之一。
  • 对服务器是肯定的,但如果其他用户在 NAT 之后,则不会。服务器可以正常工作,因为您提供了 url 来连接,就像在 websocket 中一样。

标签: javascript html webrtc


【解决方案1】:

WebRTCHacks 有一篇“youtube 如何使用 webrtc”帖子 here,其中检查了其实施的一些技术细节。

此外,他们的一位工程师在波士顿 WebRTC 发表了演讲,描述了available on Youtube 的系统

【讨论】:

  • 非常感谢 Philipp,这些信息很有帮助。
【解决方案2】:

正确,您已经找到了两种方法来做到这一点。 (请注意,对于 MediaRecorder 方法,您可以使用任何其他方法将数据获取到服务器。Web Sockets 是一种方法......常规的 HTTP PUT 段也是如此。或者,您甚至可以使用WebRTC 连接到服务器。)

几乎每个人都使用 WebRTC 方法,因为它有一些不错的内置好处:

  • 低延迟(以牺牲一些质量为代价)
  • 动态比特率
  • 客户端优化
  • 如果没有足够的系统资源以更高的帧大小继续编码,则能够自动缩放输出

WebRTC 方法的缺点:

  • 维护服务器端的堆栈极其复杂。
  • 质量较低(由于强调低延迟,但您可以通过自己摆弄 SDP 来调整)

如果您采用 WebRTC 路线,请考虑使用 gstreamer。如果您想使用 Web Socket 路由,我编写了一个代理来接收数据并将其发送到 FFmpeg 以复制到 RTMP。你可以在这里找到它:https://github.com/fbsamples/Canvas-Streaming-Example

【讨论】:

  • 我在 webrtc 中做了一个项目,这是有史以来最困难的事情。即使您接受了这一切的反直觉并跳入其中,MDN 本身的文档也是错误的,因为它们根据规范是正确的,但与浏览器实现的内容不正确。
  • @MuhammadUmer 这里更大的问题是在服务器端接收视频数据,以便对其进行操作或重新编码以进行分发。我之前做过的两种方法是使用 gstreamer,或通过使用实际的浏览器引擎服务器端。我们仍然缺乏一个神奇的工具,它可以是一个合适的 WebRTC 对等点和转储帧,甚至是媒体比特流。
  • 感谢 Brad,但是从视频编码方面来看,WebRTC 也使用与 MediaRecorder API 相同的机制,对吧?也就是说,不管是WebRTC还是Web Socket——也就是说,不管传输机制如何,这两者的编码任务都是一样的吧?
  • @nhong 不!那会很好,但它们是两个不相关的非常不同且经常断开连接的东西。他们甚至不会一直使用相同的编解码器。 (例如,在 Firefox 中,您可以使用 H.264 的基线配置文件,但上次我检查了它,您根本不能在 MediaRecorder 中使用 H.264!我提交了一个错误报告......不确定是否有是否优先。)请记住,WebRTC 堆栈针对延迟进行了优化,而 MediaRecorder 编码则没有。
  • @nhong 如果所有这些参数都暴露给 MediaRecorder 接口,这样我们就可以选择我们自己的延迟目标,并且还可以根据需要动态扩展事物,但这不是它的构建方式和规范不是这样写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多