使用带有webRTC的IP摄像头

时间:2014-05-04 21:42:58

标签: linux ffmpeg webrtc ip-camera

我想使用带有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摄像头吗?

4 个答案:

答案 0 :(得分:6)

简短的回答是,不。 Web会话的IETF标准中没有提到RTSP,目前没有浏览器计划支持它。 Link to Chrome discussion

更长的答案是,如果你真的对这个想法一无所知,你必须使用原生的WebRTC API建立一个webrtc网关/断路器。

  1. 在浏览器和断路器之间启动WebRTC会话
  2. 使用网关/断路器抓取IP摄像机
  3. 从断路器通过WebRTC API收集的RTSP流中加密并将rtp流推送到WebRTC会话。
  4. 这就是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连接的要求重新编码。仍在计算预先编码的媒体传递。)