【问题标题】:Is it possible to use WebRTC to streaming video from Server to Client?是否可以使用 WebRTC 将视频从服务器传输到客户端?
【发布时间】:2022-02-07 22:01:26
【问题描述】:

在 WebRTC 中,我总是看到有关点对点的实现以及如何将视频流从一个客户端传输到另一个客户端。服务器到客户端呢?

WebRTC 是否可以从服务器到客户端流式传输视频文件? (我正在考虑使用 WebRTC Native C++ API 创建我自己的服务器应用程序以连接到 chrome 或 firefox 浏览器客户端应用程序上的当前实现。)

好的,如果可能的话,它会比当前许多视频流服务更快吗?

【问题讨论】:

  • 嗨,A-letubby,你真的做到了吗?你能告诉我怎么做或分享一些代码吗?谢谢!菲利普
  • @a-letubby:Mac OS、Safari 和 IE 浏览器是否支持?
  • 嗨@Philip,我没有做任何事情。我打算这样做,但仍然没有太多时间。
  • @user2003356,据我所知,只有 Chrome 和 Firefox 支持 WebRTC。
  • 是的,但我们完全可以打赌,未来会有更多浏览器支持这些功能。

标签: webrtc


【解决方案1】:

是的,这是可能的,因为服务器可以是该点对点会话中的对等点之一。 如果您尊重协议并使用 VP8 在 SRTP 数据包中发送视频,浏览器将播放它。为了帮助您在其他应用程序或服务器上构建这些组件,您可以查看this 页面和this 项目作为指南。

现在,将 WebRTC 与其他流媒体服务进行比较...这将取决于几个变量,例如编解码器或协议。但是,例如,将 WebRTC(SRTP over UDP 和 VP8 编解码器)与 Flash(RTMP over TCP 和 H264 编解码器)进行比较,我会说 WebRTC 胜出。

  • 播放器将是 Flash Player,针对原生 <video> 标签。
  • 传输将是针对 UDP 的 TCP。

当然,一切都取决于您发送给客户的内容。

【讨论】:

  • 您答案中的第二个链接已损坏。否则谢谢!
  • 为什么 UDP 比 TCP 更适合视频?
  • 这个问题在 SO 上被回答了几次。例如看这个答案:stackoverflow.com/a/6187510/776409
  • @Alex 因为 TCP 死后重新发送 pkg => 不是实时的,请阅读更多关于 Udp 和 Tcp 的信息
  • @user198829 :) 实际上,您最终将通过 UDP 重新实现 TCP 重新传输。没有用户愿意观看缺少图片部分的视频!视频编码在过去和将来使用对其他帧的引用,因此您丢弃的数据包可能会阻塞解码器,并且在最好的情况下会导致像此图像上的长时间伪影传播,请阅读有关视频压缩的更多信息。 community.avid.com/cfs-filesystemfile.ashx/__key/…
【解决方案2】:

我已经使用原生 WebRTC API 编写了一些应用程序和插件,目前还没有很多信息,但这里有一些有用的资源可以帮助您入门:

QT 示例:http://research.edm.uhasselt.be/jori/qtwebrtc
浏览器原生示例:http://sourcey.com/webrtc-native-to-browser-video-streaming-example/

【讨论】:

【解决方案3】:

我从WebRTC Native C++ to Browser Video Streaming Example 开始,但它不再使用实际的WebRTC Native Code 构建。

然后我做了修改合并成一个独立的进程:

  • peerConnection 的管理(peerconnection_server
  • 访问 Video4Linux 捕获 (peerconnection_client)。

将流从浏览器删除到 WebRTC Native C++ 客户端提供了一个简单的解决方案,可通过 WebRTC 浏览器访问可从 GitHub webrtc-streamer 获得的 Video4Linux 设备。

Live Demo

【讨论】:

  • 编译 webrtc 比我预期的要复杂一些,我需要对您的源代码进行一些小的小更新(看起来像 webrtc API 更改),但是这段代码确实产生了服务器端视频.谢谢!
【解决方案4】:

我们正在尝试将 MJPEG 替换为 Webrtc 用于我们的服务器软件,并使用与 Openwebrtc 项目相关的少量组件来制作一个原型模块。这绝对是一件难事,而且我们经常会出现 ICE 协商错误(即使是在一个简单的 LAN 上),但它大部分都可以工作。

我们还使用 Google Webrtc 模块构建了一个原型,但它有很多依赖项。我发现使用 Openwebrtc 模块更容易,因为 Google 的东西与浏览器上的一般点对点场景紧密相关。

我从头开始编译了以下内容:

libnice 0.1.14 gstreamer-sctp-1.0 usrsctp

然后我必须直接与 libnice 互动以收集候选人。还必须手动写出 SDP 文件。但是控制量——能够控制管道的来源——使得它值得。生成的管道(两个客户端关闭一个服务器源)如下:

【讨论】:

    【解决方案5】:

    当然。我正在使用本机 WebRTC api 编写一个程序,它可以作为对等方加入会议并录制视频和音频。

    见:How to stream audio from browser to WebRTC native C++ application

    而且您绝对可以从原生应用流式传输媒体。

    我相信你可以使用dummy_audio_file从本地文件流式传输音频,并且你可以自己找到一种访问视频流式传输进度的方法。

    【讨论】:

      【解决方案6】:

      是的。我们为 Ant Media Server 开发了一个负载测试工具来发布和播放。这个工具可以播放媒体文件。我们使用了与 Ant Media Server 相同的原生 WebRTC 库。

      【讨论】:

      【解决方案7】:

      当然可以,它允许隐蔽直播到 WebRTC,例如:

      OBS/FFmpeg ---RTMP---> Server ---WebRTC--> Chrome/Client
      

      对于这种场景,它允许超低延迟的直播,大约600~800ms,通过WebRTC播放直播。请看this demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-16
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多