网络浏览器中的YouTube / Facebook实时流如何工作

时间:2019-04-03 00:59:01

标签: javascript html webrtc

我正在寻找一种使用Web浏览器实现视频编码器的方法。 Youtube和Facebook已经允许您直接从Web浏览器上线。我想知道他们是怎么做到的?

我研究了几种解决方案:

  • 使用网络套接字:使用网络浏览器对视频进行编码(使用mediarecorder api),然后将编码后的视频推送到要广播的服务器上。
  • 使用WebRTC:Web浏览器作为WebRTC对等方,另一台服务器作为另一端,以使用其他方法(rtmp,hls)接收流并重新广播(转码)。

还有其他技术可以实现这些人(YouTube,Facebook)正在使用的技术吗?或者他们也使用其中之一?

谢谢

2 个答案:

答案 0 :(得分:2)

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

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

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

WebRTC方法的缺点:

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

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

答案 1 :(得分:1)

WebRTCHacks的here帖子中有一个“ YouTube如何使用youtube使用webrtc”,研究了其实现的一些技术细节。

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

的系统。