我在 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 相同。