【问题标题】:Use an IP-camera with webRTC使用带有 webRTC 的 IP 摄像头
【发布时间】:2014-06-21 03:09:29
【问题描述】:

我想使用带有 webrtc 的 IP 摄像机。但是 webrtc 似乎只支持网络摄像头。所以我尝试将 IP 摄像头的视频流转换为虚拟网络摄像头。

我找到了IP Camera Adapter 之类的软件,但它们运行不佳(每秒 2-3 帧,延迟 2 秒)而且它们只能在 Windows 上运行,我更喜欢使用 Linux(如果可能的话)。

我试试 ffmpeg/avconv:

  • 首先,我用v4l2loopback创建了一个虚拟设备(命令是:sudo modprobe v4l2loopback)。检测到虚拟设备,可以通过以下命令提供视频 (.avi):ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1

  • 来自 IP 摄像头的流可用于:rtsp://IP/play2.sdp 用于 Dlink DCS-5222L 摄像头。这个流可以被ffmpeg捕获。

我的问题是在这两个步骤之间建立链接(接收 rstp 流并将其写入虚拟网络摄像头)。我尝试了ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0,但 v4l2 出现错误(未找到 v4l2)。

有人知道如何在 webRTC 中使用 IP 摄像头吗?

【问题讨论】:

    标签: linux ffmpeg webrtc ip-camera


    【解决方案1】:

    其实我们的相机可以支持webrtc。它使用带有 h5 的 ip 摄像头,来自 P2P 电车,以及带有网络浏览器的 ip 摄像头的两路通话!延迟只有300ms!

    【讨论】:

      【解决方案2】:

      对于那些想亲身体验一些原生 WebRTC 的人,请继续阅读...

      您可以尝试通过简单的 ffmpeg-webrtc 包装器流式传输 IP 摄像机的 RTSP 流:https://github.com/TekuConcept/WebRTCExamples

      它使用 VideoCaptureModule 和 AudioDeviceModule 抽象类来注入原始媒体。在底层,这些抽象类针对所有特定于平台的硬件进行了扩展,例如 video4linux 或 alsa-audio。

      包装器使用 ffmpeg CLI 工具,但我觉得使用 ffmpeg C 库本身应该不会太难。 (包装器依赖于对源媒体进行转码或解码,然后让 WebRTC 根据 ICE 连接的要求重新编码。仍在处理预编码的媒体传递。)

      【讨论】:

        【解决方案3】:

        如果您安装了 video4linux,以下命令将从 rtsp 流创建虚拟网络摄像头:

          gst-launch rtspsrc location=rtsp://192.168.2.18/play.spd ! decodebin ! v4l2sink device=/dev/video1
        

        你在正确的轨道上,“decodebin”是缺失的链接。

        【讨论】:

          【解决方案4】:

          我创建了一个将 RTSP 或 HTTP 视频馈送转换为 WebRTC 流的简单示例。此示例基于 Kurento Media Server (KMS),需要安装它才能使示例正常工作。

          安装 KMS 并享受...

          https://github.com/lulop-k/kurento-rtsp2webrtc

          2015 年 9 月 22 日更新。 查看this post,了解为什么转码只是解决此问题的一部分。

          【讨论】:

          • 有没有可能安装Kurento for mac?如果可能,请提供帮助
          • @Maneeios 可能使用 docker 或其他类型的虚拟化。
          【解决方案5】:

          Janus-gateway 最近在其流插件中添加了一个简单的 RTSP 支持(基于 libcurl),因为 commit

          然后可以配置网关与摄像头协商 RTSP 并通过 WebRTC 中继 RTP,添加流插件配置<prefix>/etc/janus/janus.plugin.streaming.cfg

          [camera]
          type = rtsp
          id = 99
          description = Dlink DCS-5222L camera
          audio = no
          video = yes
          url=rtsp://192.168.1.16/play2.sdp
          

          接下来,您将能够使用流式演示页面 http://..../demos/streamingtest.html 访问 WebRTC 流

          【讨论】:

          • 感谢您的智能回答,但我如何将这样的流推送到 Firefox 或 chromium 以便 webrtc 应用程序可以接收它?现在它只是抓取 IP:port 上的摄像头,但在应用程序会议中没有视频显示。
          • @OlaB 视频来自Streaming,而不是VideoRoom。您也可以尝试我正在处理的一个项目,该项目使网关 RTSP->WebRTC webrtc-streamer.herokuapp.com
          • 好的,谢谢先生,我现在会检查一下,也许它可以更清楚地说明您所谓的流媒体,例如我正在尝试运行 jitsi 视频桥,但我的来源是 IP凸轮
          • 哇!你的项目很棒,只是浏览了一下就印象深刻
          • 使用 Jitsi 需要一段代码来发送 XMPP 请求,janus 使用简单的 HTTP 请求,有一个示例将 RTSP url 发布到 Janus 视频室webrtc-streamer.herokuapp.com/janusvideoroom.html
          【解决方案6】:

          简短的回答是,不。 RTSP 在 WebRTC 的 IETF 标准中没有提及,目前没有浏览器计划支持它。 Link to Chrome discussion.

          更长的答案是,如果你真的被这个想法卖光了,你将不得不利用原生 WebRTC API 构建一个 webrtc 网关/断路器。

          1. 在您的浏览器和断路器之间启动 WebRTC 会话
          2. 使用网关/断路器获取 IP 摄像机源
          3. 从断路器通过 WebRTC API 收集的 RTSP 流中加密 rtp 流并将其推送到 WebRTC 会话。

          这就是others have done it 的方式以及必须完成的方式。

          2014 年 7 月 30 日更新:

          我已经对janus-gateway 进行了实验,我相信流插件确实可以做到这一点,因为它可以抓取 rtp 流并将其推送到 webrtc 对等点。对于 RTSP,您可能可以创建 RTSP 客户端(可能使用library like gstreamer),然后将 RTP 和 RTCP 从连接推送到 WebRTC 对等体。

          【讨论】:

          • 这不是质量捕获,请确保在回答时尊重口型同步和延迟。我已经完成了你的方法,但它有很大的延迟。请让 WebRTC 团队实现内置的原生 RTSP 捕获。
          • Chrome/Canary 中也移除了 NPAPI,那么如何使用实时、快速、无延迟和延迟引入的 RTSP 捕获?
          • @YumYumYum,RTSP 超出了 webrtc 试图完成的范围。如果将来支持它,我会感到非常惊讶。 Lipsync 和延迟是问题,但您可以通过在应用程序中适当地处理 RTCP 来纠正它们。 Gstreamer 和 janus 不是最后一句话,而 janus 是一个非常新的项目,它本身就有很多问题。老实说,您可能很容易使用本机 webrtc API 并通过它提供 RTSP 流
          • @BenjaminTrent 如果你能从发布的日志中给我一些线索,你能看看这个问题吗? stackoverflow.com/questions/46412464/…
          猜你喜欢
          • 2018-09-05
          • 2014-12-19
          • 2018-02-14
          • 2016-12-31
          • 2020-11-14
          • 2018-07-11
          • 1970-01-01
          • 1970-01-01
          • 2021-12-30
          相关资源
          最近更新 更多