在 NodeJS 中从硬件捕获音频/视频,并将其传送到前端

问题描述 投票:0回答:1

我正在设备上运行 NodeJS/express 服务器(我有 BeagleBone 和 Raspberry Pi)。该软件还需要直接访问摄像头/麦克风硬件,并将这些音频/视频流发送到连接的客户端。我现在不关心视频/音频如何到达客户端,只是它到达那里可以被解码和播放。本例中的客户端是 React Native 移动应用程序。

我想花点时间提一下,这个“设备代码”不在浏览器中运行。这是 NodeJS/服务器端代码。出于所有意图和目的,请将此视为“安全”摄像头设备。它坐在某个地方并广播它所看到和听到的内容。

我该怎么办:

a) 在 NodeJS 中访问视频和音频流

b) 将这些流转换为网络浏览器可以播放的某种格式?

c) 在 React Native 中解码给定的视频/音频?

d) 在 React (web) 中解码视频/音频?

工作代码示例将非常感激,而不是当事情没有按预期工作时导致我陷入死胡同的解释。

上个月我一直在谷歌上搜索这个问题,但找不到答案。甚至找不到其他人做同样类型的项目。任何帮助表示赞赏。谢谢

node.js video camera streaming hardware
1个回答
0
投票

我相信您(直到现在)还没有收到这个问题的答案的原因是您想要的应用程序在大多数 Node.JS 开发人员的通用领域之外运行。

这并不是说不能做到。虽然对于专业领域的高级编码人员来说并非不可能,但大多数开发人员都会为 Node.JS 配备中间件,作为操作系统和/或本机软件的中间件。

我可以为您的方法提出以下建议:

操作系统:Linux

为什么? Linux 将大多数输入(音频、网络摄像头等)视为“像文件一样”,这可能在下一步中派上用场。

安装FFMPEG:它是开源的,非常适合大多数音/视频转换和压缩、编码和解码任务。

由于输入与 Linux 中的文件类似,因此这种协同作用与 FFMPEG 中所需的“输入文件”非常好。

NPM 和 github 上有几个节点库/模块,它们可以充当中间件并让您完全控制 FFMPEG。与网络服务器和文件系统的其他中间件相结合,您应该可以找到可行的解决方案。

我不是反应用户。无论是否由框架提供 - 您都需要一个播放器模块/库来为前端带来 h264 等支持。浏览器本身仅支持 MJPEG 视频(仅压缩图像 - 没有编解码器在一组帧上实现压缩,并引用相邻帧或帧预测)。

另一方面,当计算能力成为瓶颈但有充足的带宽可用和/或低分辨率可以接受时,MJPEG 也可以成为客户端的处理(!)资源高效选择和轻量级。

无论您的后端或前端需要 h264,还是需要 MJPEG - FFMPEG 都可以非常有效地解码。与具有大量功能和令人印象深刻的 GUI 的流行替代品相比,我还发现它相当“不臃肿”。

这并不是一个完整的指南,而是指向一个实际可行的方向。我希望它有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.