【问题标题】:Video Streaming Over WebsocketsWebsockets 上的视频流
【发布时间】:2014-07-28 11:11:39
【问题描述】:

我正在尝试构建可以从双方流式传输视频的移动应用程序(即视频通话之类的东西)。

我研究了 webrtc,但还没有为移动原生应用程序做好准备,无论如何 webrtc 所做的是允许浏览器直接捕获相机和音频,而不需要插件等。但是在原生移动应用程序中捕获相机和音频是'这是一个问题,基本上需要非常低的延迟和双传输层。在许多文章和地方,我读到了关于在 websockets 上使用 webrtc。

所以我想我可以使用 websockets 流式传输视频。是正确的还是我遗漏了什么?

我知道 webrtc 是直接客户端到客户端的另一个区别......而 websocket 将是客户端-服务器-客户端,无论如何要避免它。这意味着它的延迟条款。

【问题讨论】:

    标签: android ios websocket video-streaming webrtc


    【解决方案1】:

    注意:此解决方案可以并且确实适用于移动浏览器。但是,我不知道是否存在 Android/IOS 环境中所需的所有软件(即使是 React Native 之类的软件)。

    但是,解决方案可以工作。事实上,我已经在树莓派上完成了。

    我基本上只是从 USB 摄像头实时流式传输 FFMPEG 管道,将其传输到 UDP 源,有一个“中继”服务,该服务基本上转换 UDP 数据包并使用 JavaScript 中的 engine.io 将其传输到客户端,然后使用它Web 端的 mpeg1 编码器非常好用,可将 Web 套接字数据包解码为 mpeg1 视频。

    所以我通过管道传递 ffmpeg 流,执行如下操作:https://github.com/freefarmdata/auto_farm_recorder/blob/master/recorder/src/controllers/streams.py#L13

    然后读取 UDP 流并将其中继到 Node 应用程序,例如: https://github.com/freefarmdata/auto_farm_recorder/blob/master/relay/src/socket.js#L97

    然后我使用以下内容对流进行解码: https://github.com/freefarmdata/auto_farm_recorder/blob/master/web/src/app/widgets/LiveStream.js

    请记住,这是使用 TCP 而不是 UDP 作为数据传输协议。这意味着,为了保持直播,我必须确保我的客户端有足够的带宽进行直播。如果他们不这样做,我就不能在我的流上使用 RTP 或其他东西来做 QOS 以降低质量水平。我基本上只需要丢弃数据包,这反过来会丢弃帧并在 mpeg1 解码器中导致奇怪的损坏问题。

    理论上,您可以使用 engine.io 服务来执行此操作,并来回发送有关连接质量的数据包,这将告诉“中继”服务器开始从不同的 UDP 源(比特率较低的源)拉取。

    但我离题了。

    【讨论】:

      【解决方案2】:

      你错过了什么。

      • webRTC 在移动设备上运行良好。在 webrtc.org 的参考代码 (appRTCDEMO) 中有适用于 iOS 和 android 的示例/白色客户端,以及多个应用程序。最后一个被宣布是出现在

      • 从流中获取视频和音频流是 媒体 API 而不是 webRTC API(getusermedia)。

      • webRTC 是真正的 p2p 连接(RTCPeerConnection:传输和防火墙穿越)和媒体引擎(编码、打包、加密),正是您要寻找的。​​p>

      • webSockets 只是一种传输机制。它不处理您必须在应用程序级别实现的防火墙/nat 遍历、媒体处理和打包/分块。

      • 信令而言,webRTC 没有指定/强加任何协议,看似常见的做法是设置信令服务器。该应用程序通常使用 Web 套接字或 XHR 或其他方式连接到该服务器以进行原始握手/呼叫设置。许多应用程序通过使用 socket.io 等库来抽象这一点。

      【讨论】:

      • 好的。美好的。那我为什么要在 websockets 上使用 webrtc 呢? Websockets 还可以提供我正在寻找的基本东西,因为 webrtc 还没有准备好在本机移动应用程序中使用。为什么我不应该使用 websocket?是的,它不是 p2p,但在延迟方面会有多大差异?
      猜你喜欢
      • 2014-09-24
      • 2018-03-15
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多