在花了数周的时间搜索论坛并尝试不同的方法后,我没有找到解决我非常具体的问题的方法。我很感谢你可能提供的每一个提示。
我购买了一台 Kodak Pixpro 360 相机,它通过 wifi 提供取景器功能(即实时视频流)。现在我正在尝试将这个摄像头用作可以从任何地方(不仅仅是本地网络)访问的监控摄像头。一个 ODROID 将通过 wifi 连接到相机,并使用第二个 wifi 加密狗连接到 LAN。传入的视频流应实时转发给客户端(一次只有一个)。然后在用 Unity3d 编写的应用程序中查看接收到的 360 度内容。
到目前为止,我已经设法获取了 cam 的 MJPEG 流并将其作为 JPEG 提供,而不是使用 NodeJS 服务器。然后通过该WWW.LoadImageIntoTexture
方法渲染 JPEG。正如您可能想象的那样,每帧的 GET 请求非常慢,大约每秒 0.5 帧。
我的一位同事向我指出 WebRTC 和 Janus 网关是一种更优雅的解决方案。这个简单的对等聊天使用 SocketIO,并且与我的网络摄像头配合得很好,但我不知道如何更改此代码以使用来自 PIXPRO 而不是我的本地设备的视频流。渲染内容也应该很有趣,因为您需要一个用于 WebRTC 的浏览器,而我不确定其中有多少可以嵌入到 Unity3d 中。
不幸的是,相机本身无法连接到 LAN,而是充当 wifi 接入点。这使得我为 ip cams 找到的所有解决方案都过时了。
我发现了一个类似的项目,它设法通过 Janus 和 WebRTC 转发他们的视频流,但我不确定是否以及如何应用他们的方法。 https://babyis60.wordpress.com/2015/02/04/the-jumping-janus/
更新
好的,我自己设法缩小了我的问题范围。PIXPRO 没有 RTP 支持,所以我坚持使用 JPEG 流。现在我正在尝试加速 paparazzo.js 实现,该实现读取相机的 TCP 响应并通过搜索帧之间的边界返回 JPEG。然后通过 http 响应提供这些 JPEG。我想通过使用 SocketIO 将这些帧推送到客户端并在那里呈现它们来加速这个过程。奇怪的是,数据在服务端似乎很好(当我通过 导出它时,我得到了一个有效的 JPEG 图像fs.writeFileSync('testimage.jpg', buffer, 'binary');
,但是在我通过 发送图像后,我无法让它在客户端工作io.sockets.emit("stream",{image: image});
。当我尝试通过在浏览器中显示此图像$("#video").attr("src", "data:image/jpeg;," + data.image);
,图像没有被正确解析。检查器显示视频源已更新,但只有一个二进制字符串。