我想使用带有webrtc的IP摄像头。然而,webrtc似乎只支持网络摄像头。所以我尝试将IP摄像机的流转换为虚拟网络摄像头。
我找到了像IP Camera Adapter这样的软件,但它们效果不佳(每秒2-3帧,延迟2秒),它们只适用于Windows,我更喜欢使用Linux(如果可能的话)。< / p>
我尝试ffmpeg / avconv:
首先,我创建了一个v4l2loopback的虚拟设备(命令为:sudo modprobe v4l2loopback
)。检测到虚拟设备,可以使用以下命令(.avi)输入视频(.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摄像头吗?
答案 0 :(得分:6)
简短的回答是,不。 Web会话的IETF标准中没有提到RTSP
,目前没有浏览器计划支持它。 Link to Chrome discussion
更长的答案是,如果你真的对这个想法一无所知,你必须使用原生的WebRTC API建立一个webrtc网关/断路器。
这就是others have done it以及如何完成的方式。
更新2014年7月30日:
我已经尝试了janus-gateway,我相信流媒体插件确实可以实现这一点,因为它可以获取rtp流并将其推送到webrtc对等体。对于RTSP,您可以创建RTSP客户端(可能使用library like gstreamer),然后将RTP和RTCP从连接推送到WebRTC对等端。
答案 1 :(得分:5)
我创建了一个简单的示例,将RTSP或HTTP视频源转换为WebRTC流。此示例基于Kurento Media Server(KMS),并且需要安装它才能使示例正常工作。
安装KMS并享受......
https://github.com/lulop-k/kurento-rtsp2webrtc
更新22-09-2015。 请查看this post,了解有关转码只是此问题解决方案的一部分的技术说明。
答案 2 :(得分:4)
Janus-gateway最近在其流媒体插件中添加了一个简单的RTSP支持(基于libcurl)commit
然后可以配置网关与摄像机协商RTSP并中继RTP思想WebRTC添加流媒体插件配置<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流答案 3 :(得分:1)
对于那些想使用本机WebRTC弄脏手的人,请继续阅读...
您可以尝试通过简单的ffmpeg-webrtc包装器https://github.com/TekuConcept/WebRTCExamples来流式传输IP摄像机的RTSP流。
它使用VideoCaptureModule和AudioDeviceModule抽象类来注入原始媒体。在后台,这些抽象类针对所有特定于平台的硬件(例如video4linux或alsa-audio)进行了扩展。
包装程序使用ffmpeg CLI工具,但我认为自己使用ffmpeg C库应该不太困难。 (包装程序依靠转码或解码源媒体,然后让WebRTC根据ICE连接的要求重新编码。仍在计算预先编码的媒体传递。)