使用带有 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 网络摄像头请求?