0

我在 IP CAM 中使用 UV4L 来创建虚拟视频驱动程序 /dev/video1。我能够进入具有 JITSI、WEBRTC、JANUS 等多个应用程序的 UV4L 流媒体服务器的 API。当我尝试在本地连接 (LAN) 上(即在我的本地服务器上)流式传输到 Janus 视频室时,我注意到了在终端中获取此消息

“[6889886769210913] 创建 ICE 代理(ICE 完整模式,受控)
[6889886769210913] DTLS 握手已完成
WebRTC 媒体现已可用”

但是没有媒体/视频流出现。我在编译 Janus 时启用了数据通道,并且我还使用我的 UV4L 流媒体服务器进行了 webrtc 测试,效果很好。但是关于 Janus 的消息以及为什么流在 Chrome 或 Firefox 中都没有出现是我需要帮助的。

编辑更新以回答评论:

两者之间的联系是 uv4l 将我的 IP cam 渲染为虚拟设备驱动程序,我正在使用 mjpeg 驱动程序模块。然后,我可以在加载 uv4l 驱动程序时将不同的选项传递给它,例如我使用来自 IP Cam 的 h264 配置文件流,我也将其更改为 mjpeg 流。有趣的是,使用 h264 流,我可以在创建的虚拟驱动程序上运行 webrtc 流测试,甚至在 Janus 上查看调试文件,一切似乎都按预期的方式工作,挂断后我得到正确的日志,例如

{
   "janus": "hangup",
   "session_id": 8829409609870864,
   "sender": 5037748733677649,
   "reason": "RTCP BYE"
}

当成功的 Webrtc 流测试显示在网络上时,我的提要通过 Wireshark 正确跟踪,我的数据包标头和提要如下所示:

[5037748733677649]  Got an RTCP packet (bundled stream)!
[Tue Sep 26 14:28:25 2017] [5037748733677649] Incoming RTCP, bundling: this is video (remote SSRC: video=2524945001, audio=65486109, got 2524945001)
[Tue Sep 26 14:28:25 2017]    Parsing compound packet (total of 56 bytes)
[Tue Sep 26 14:28:25 2017]      #1 SR (200)
[Tue Sep 26 14:28:25 2017]        RTCP PT 200, length: 28 bytes
[Tue Sep 26 14:28:25 2017]      #2 SDES (202)
[Tue Sep 26 14:28:25 2017]        RTCP PT 202, length: 28 bytes
[Tue Sep 26 14:28:25 2017]   End of compound packet
[Tue Sep 26 14:28:25 2017] [5037748733677649]  Got an RTCP packet (bundled stream)!
[Tue Sep 26 14:28:25 2017] [5037748733677649] Incoming RTCP, bundling: this is audio (remote SSRC: video=2524945001, audio=65486109, got 65486109)
[Tue Sep 26 14:28:25 2017]    Parsing compound packet (total of 56 bytes)
[Tue Sep 26 14:28:25 2017]      #1 SR (200)
[Tue Sep 26 14:28:25 2017]        RTCP PT 200, length: 28 bytes
[Tue Sep 26 14:28:25 2017]      #2 SDES (202)
[Tue Sep 26 14:28:25 2017]        RTCP PT 202, length: 28 bytes
[Tue Sep 26 14:28:25 2017]   End of compound packet

我在想我没有流的原因是因为我没有在浏览器上的加密层上测试它,即没有使用 HTTPS 而不是 HTTP,或者我的主机 Windows 机器阻止了我的来宾 Linux webrtc 流。这些是我倾向于调查的领域,我也尝试使用本地主机,同样的结果没有显示流,由于隐私限制,我在我的 VM 上创建自签名证书是一个复杂的策略问题。我会看得更远,如果我找不到其他选择,我会在独立机器上创建一个自签名许可证来测试它。您认为 ssl 问题可能是原因吗?更新:与 ssl 相同。

4

1 回答 1

0

以防万一有人想尝试这个实现,在本地服务器上配置所描述的设置时,需要考虑的事情很少,最重要的是能够为前端 Web 服务器(Apache或 nginx)并配置 HTML 脚本,如果您选择使用 Janus 的演示(即 streaming.html、text-room、Video-room 等),同样重要的是要注意,如果您没有为 UV4L 安装渲染器, UV4L 的网页演示仅发布流,但您必须创建一个画布来查看流或使用 Web 浏览器(在我的实例中为 google-chrome 或 chromium)上的可用演示室之一,如上所述。

于 2017-09-27T14:22:59.793 回答