使用Twilio从IP摄像头RTSP流式传输视频

12
我找到的 Twilio Programmable Video 服务的示例要么展示屏幕共享,要么是网络摄像头媒体流。 请问有人能给我提供一个示例,从由 IP 摄像机提供的 RTSP 流中传输视频吗?
我已经找到了使用 Kurento 实现此行为的示例并进行了实验,所以我想知道 Twilio-Video 是否也可以提供相同的功能。请参见https://github.com/lulop-k/kurento-rtsp2webrtc

你已经发现,不能直接使用RTSP与WebRTC。这个答案提供了更多详细信息。如果你对此更感兴趣,请发送你的用例细节到help@twilio.com,他们将能够将查询定向到正确的团队。 - philnash
2个回答

2
您看过this了吗?
这是一篇关于该问题的有趣、写得很好的文章。
从链接中可以看到:

用于媒体互操作性的WebRTC媒体网关 要将IP摄像机与WebRTC应用程序集成,首先需要实现媒体互操作性。这意味着摄像机提供的媒体流需要与浏览器支持的WebRTC编解码器和格式兼容。这意味着将IP摄像机说的任何话都翻译成WebRTC浏览器支持的内容。为了实现这一点,通常需要使用一个名为WebRTC媒体网关的技术。要理解这样一个网关的作用,请观察以下内容。

市场上大多数IP摄像机(除了奇特的摄像机)通过以下机制之一发布媒体:

RTSP/H.264: 这些类型的摄像头通常用于视频监控应用程序。它们使用 RTSP 协议来建立 RTP 媒体会话。换句话说,信令通过 RTSP 进行,而媒体传输本身基于普通的 RTP。不同的摄像头供应商可能支持不同的 RTP 配置文件,但对于我见过的大多数摄像头来说,AVP 是唯一可用的选项。在这些摄像头中,也通常只有 H.264 作为编解码器的选项。
HTTP/MJPEG:这些摄像头使用 HTTP 流进行信令和传输,并将视频编码为 JPEG 图片序列。这些摄像头的硬件更简单,需要更少的资源来运行。这就是为什么它们经常在电池消耗或重量成为问题时使用(例如机器人、无人机等)。缺点是视频质量往往会显著降低。
通过 Kurento 媒体服务器正确处理。
Kurento媒体服务器工具箱使得以灵活的方式使用Java或JavaScript编程来创建丰富的WebRTC媒体网关成为可能。要了解有关Kurento媒体服务器技术的介绍,请查看文档。在Kurento中实现用于与IP摄像机进行互操作的WebRTC媒体网关是简单而安全的。您只需要考虑三个方面: - Kurento媒体服务器PlayerEndpoint支持从不同类型的源(包括RTSP / RTP和HTTP / MJPEG)读取视频流。换句话说,PlayerEndpoint能够管理从IP摄像机捕获媒体。 - Kurento媒体服务器WebRtcEndpoint支持将媒体流发布到具有完整RTCP反馈终止的WebRTC浏览器。这意味着每次接收到PLI数据包时,WebRtcEndpoint都会命令VP8编码器生成一个新的关键帧。这也意味着REMB反馈和拥塞控制将被命令VP8编码器降低其质量来遵守。 - Kurento媒体服务器不可知的媒体功能在两个不兼容的媒体元素连接时自动执行所有适当的转码,对于开发人员来说是透明的。因此,在此情况下,只需将PlayerEndpoint源连接到WebRtcEndpoint接收器,即可进行H.264 / MJPEG到VP8的转码。

enter image description here

下面是实现这种逻辑的JavaScript应用程序的源代码草图:
    var pipeline = ...//Use Kurento Client API for obtaining your pipeline.

//Create the PlayerEndpoint for receiving from the IP camera. HTTP and RTSP uris are supportd
pipeline.create("PlayerEndpoint", {uri: "rtsp://your.rtsp.address"}, function(error, playerEndpoint){

    //Create the WebRtcEndpoint
    pipeline.create("WebRtcEndpoint", function(error, webRtcEndpoint){
    
    //If working with trickle ice, some code for candidate management is required here.
    
        //Connect playerEndpoint to webRtcEndpoint. This connection activates the agnostic media
        //capability and the appropriate transcodings are configured and activated.
    playerEndpoint.connect(webRtcEndpoint, function(error){
        
                //Media starts flowing ... enjoy
        player.play(function(error){
        });
    });
    });
});

如果你想要一个JavaScript的完整可运行示例,你可以查看这个GitHub存储库
这应该能够满足你的需求,如果有任何问题,请留言评论。
祝你好运!

如果你仔细看的话,我实际上已经包含了与那篇文章相关的Github存储库链接。我已经有一个使用Kurento的工作示例 - 我想要的是一个类似的解决方案,但使用Twilio可编程视频。 - hatboyzero

0
有人能给我指一下如何从IP摄像头提供的RTSP流中实时传输视频的示例吗?
由于您标记了JavaScript,您必须意识到在HTML5环境中,rtsp://不是预期的视频源。没有针对来自相机的RTSP流的特定示例。
可能的解决方案: 我唯一能想到的解决方案是使用虚拟网络摄像头软件,该软件输出视频流/文件,而不是显示设备网络摄像头的内容。
虚拟网络摄像头将被浏览器/WebRTC检测到,就像普通网络摄像头一样,但它不会显示您的面部,而是显示预先录制的流/文件。如果您涉及FFmpeg,则可以将MP4文件替换为RTSP实时流。
在Twilio / HTML5代码方面,您只需选择“虚拟摄像头”,就像真正的摄像头一样,现在您可以将RTSP流发送为您的摄像头流。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接