【问题标题】:Stream Video using Twilio from IP Camera RTSP使用来自 IP 摄像机 RTSP 的 Twilio 流式传输视频
【发布时间】:2017-07-19 21:45:30
【问题描述】:

我能够找到的所有 Twilio 的可编程视频服务示例都演示了屏幕共享或网络摄像头媒体流。有人可以指出一个从 IP 摄像机提供的 RTSP 流中流式传输视频的示例吗?

我已经能够使用 Kurento 找到并尝试这种行为的示例,因此我认为 Twilio-Video 可能会暴露相同的行为。见https://github.com/lulop-k/kurento-rtsp2webrtc

【问题讨论】:

  • 正如您所发现的,您不能直接将 RTSP 与 WebRTC 一起使用。 This answer 对此有更多详细信息。如果您对此更感兴趣,可以将您的用例的一些详细信息发送到 help@twilio.com,他们将能够将查询定向到正确的团队。

标签: javascript video webrtc twilio rtsp


【解决方案1】:

你有没有看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 媒体服务器工具箱可以灵活地创建丰富的 WebRTC 媒体网关,并根据需要使用 Java 或 JavaScript 进行编程。有关 Kurento 媒体服务器技术的介绍,请查看文档。在 Kurento 中实施 WebRTC 媒体网关以与 IP 摄像机互操作是简单且安全的。您只需要考虑三个方面:

    Kurento Media Server PlayerEndpoint 支持从不同类型的源读取视频流,包括 RTSP/RTP 和 HTTP/MJPEG。换句话说,PlayerEndpoint 能够管理从 IP 摄像机捕获媒体。
    Kurento 媒体服务器 WebRtcEndpoint 支持将媒体流发布到 WebRTC 浏览器,并完全终止 RTCP 反馈。这意味着,每次接收到 PLI 数据包时,WebRtcEndpoint 都应命令 VP8 编码器生成新的关键帧。这也意味着 REMB 反馈和拥塞控制应通过命令 VP8 编码器降低其质量来实现。
    当连接两个不兼容的媒体元素时,Kurento 媒体服务器不可知媒体功能对开发人员透明地执行所有适当的代码转换。因此,在这种情况下,只需将 PlayerEndpoint 源连接到 WebRtcEndpoint 接收器,即可进行 H.264/MJPEG 到 VP8 的转码。

实现此逻辑的 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 repository

这应该为您的需求提供解决方案,如果您有任何问题,请发表评论。

祝你好运!

【讨论】:

  • 如果你仔细看,我实际上包含了与该文章相关的 github 存储库的链接。我已经有一个使用 Kurento 的工作示例 - 我想要的是使用 Twilio 可编程视频的类似解决方案......
【解决方案2】:

谁能指出一个从 RTSP 流式传输视频的示例 IP 摄像机提供的流?

由于您已标记Javascript,您必须意识到rtsp:// 不是HTML5 环境中的预期视频源。对于来自摄像头的 RTSP 流,没有特定示例。

可能的解决方案:
我能想到的唯一解决方案是使用虚拟网络摄像头软件来输出视频流/文件,而不是显示来自设备网络摄像头的提要。

虚拟网络摄像头会像普通网络摄像头一样被检测到(通过浏览器/webRTC),但它不会显示您的脸部,而是显示预先录制的流/文件。如果您涉及 FFmpeg,您可以将 MP4 文件替换为您的 RTSP 直播。

在 Twilio / HTML5 代码方面,您只需选择“虚拟摄像头”,就像真正的网络摄像头一样,现在您可以像发送网络摄像头一样发送 RTSP 提要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2015-06-29
    相关资源
    最近更新 更多