使用带有 webRTC 的 IP 摄像头

Posted

技术标签:

【中文标题】使用带有 webRTC 的 IP 摄像头【英文标题】:Use an IP-camera with webRTC 【发布时间】: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 摄像头吗?

【问题讨论】:

【参考方案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 网关/断路器。

    在您的浏览器和断路器之间启动 WebRTC 会话 使用网关/断路器获取 IP 摄像机源 从断路器通过 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 如果你能从发布的日志中给我一些线索,你能看看这个问题吗? ***.com/questions/46412464/…

以上是关于使用带有 webRTC 的 IP 摄像头的主要内容,如果未能解决你的问题,请参考以下文章

Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

QtWebEngine 时允许使用 WebRTC 网络摄像头请求?

在 AR-session ios 中使用 WebRTC 摄像头

带有 IP 摄像机的 OpenCV 问题

使用带有OPEN CV的IP摄像头,无需互联网连接(直接连接到PC)