小编050*_*ias的帖子

使用 NODE.JS 和 html5 的低延迟(50 毫秒)视频流

客观的:

我正在构建一个 FPV 机器人,我想通过本地 Wi-Fi 连接使用网络浏览器来控制它。

我正在使用带有 Raspbian Stretch 的 raspberry pi 3B+。我建立了自己的电机控制和功率调节器帽子。

经过大量研究测试,我决定使用 node.JS 作为 http 服务器和 socket.io 来提供与我的机器人的低延迟双向通信。该堆栈实现了大约 7 毫秒的延迟。

机器人图片

问题:

我需要将低延迟视频从连接到 RPI 的 USB 摄像头传输到浏览器。我的目标是在 10FPS 下达到至少 640x480 的分辨率,延迟为 50 毫秒或更好。我很高兴牺牲视觉忠诚度来从我的机器人那里获得更快的响应。

如果可能的话,我想在 UDP 中进行流式传输以提高流的可靠性。

如果可能,我想流式传输现代网络浏览器可以本地解码的视频。我想使用 H264 编解码器和 HTML5 视频标签。如果没有其他选择,我可以回退使用 javascript 播放器。

我试过的:

我进行了广泛的研究并尝试了许多工具。

其中,我尝试了 VLC、mjpg 流光、gstreamer 和 raspivid。有几次我进入了网络浏览器可以查看的流,但充其量我在 320x240 时得到了 700 毫秒的延迟。离我的目标很远很远。

目前我正在研究 WebRTC 解决方案。

题:

我想对 NODE.JS 包或其他解决方案提出建议,以提供 UDP H264 视频流,该视频流可由 HTML5 视频标签解码,目标延迟为 50 毫秒。

谢谢

更新:

感谢您的回答!我会不断更新这个问题,一旦解决,我会发布解决方案。

推单个框架

我尝试了一种不同的方法,通过 websocket 推送单个 200KB 640x480 jpg …

html video-streaming low-latency node.js raspberry-pi3

11
推荐指数
2
解决办法
1万
查看次数

如何将 C++ 类返回给 NODE.JS

设置:
我有一个 NODE.JS 应用程序,它必须以低延迟执行一些计算
我决定使用 N-API 和 node-gyp 将本机 C++ 模块包含到 NODE.JS 应用程序中

当前状态:
我到了工具链工作的地步,我可以将 C++ 源代码编译成二进制文件,在 NODE.JS 应用程序中包含二进制模块,NODE.JS 应用程序执行
我可以使用标准 NODE.JS 调用 C++ 方法来自 NODE.JS 的类型和方法可以在执行完成后将标准的 NODE.JS 类型返回给 NODE.JS

问题:
我不知道如何将自定义类型/对象从 C++
返回到 NODE.JS目前我想基本上返回一个具有多种类型的结构,以便将复杂解析的结果返回到 NODE.JS 中单个 NODE.JS 调用

最少的代码输出:
我做了一个最少的实现来演示我想做的事情。如果你评论#define ENABLE_RETURN_CLASS代码只使用标准的 NODE.JS 类型并且一切正常。在输出图像下方,显示工具链和执行按预期工作:
浮动工程

如果离开#define ENABLE_RETURN_CLASS,代码将无法编译。据我所知,它不明白如何从 C++ 对象转换为 NODE.JS 对象。这是错误: 在此处输入图片说明

最少代码:
初始化 NODE.JS 应用程序

npm init
npm install node-gyp --save-dev
npm install node-addon-api
Run Code Online (Sandbox Code Playgroud)

将 C++ 二进制文件编译为 NODE.JS 模块

npm run build
Run Code Online (Sandbox Code Playgroud)

启动 NODE.JS 应用程序

node main.js …
Run Code Online (Sandbox Code Playgroud)

c++ node.js node-gyp n-api

7
推荐指数
1
解决办法
2045
查看次数

GD32VF103龙眼纳米中断不工作

简介:
我买了一块配备GD32VF103 Risc-V MCU的Longan Nano评估板。
我可以运行视频播放器演示,并使用 VS Code、PlatformIO 和 DFU 工具编译和加载工作代码。下面是电路板和演示运行的视频。
在此输入图像描述
https://www.youtube.com/watch?v=84_PzcNiJb4

我想做的
就是为机器人比赛建造一个机器人作为一种爱好。我使用 Microchip 4809 8 位 MCU 作为电机控制器,但在以 2KHz 运行 PID 控制器时达到了 MCU 的极限,而且我还没有添加电流环路。我想升级电机控制器,我决定选择 Longan Nano,因为它有 LCD 屏幕、优越的 CPU 马力以及学习 Risc-V。
https://www.youtube.com/watch?v=1dQMktoiuLg

问题
我可以在轮询中很好地运行 Longan Nano 的外围设备。我真的很努力地想让中断起作用,但没有成功。我尝试读取轮询中断标志,它们就是这样工作的,所以我认为这要么是 ISR 处理程序链接到 Start.s 中的中断向量表的链接器问题,要么是 ECLIC 的配置问题。

这是一个正确运行的轮询示例。红色 LED 以 2Hz 的频率闪烁,按下启动按钮将切换蓝色 LED。

#include <gd32vf103.h>

void init()
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOC);

    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_1);
    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2);
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_13);

    gpio_bit_set(GPIOC,GPIO_PIN_13);
    gpio_bit_set(GPIOA,GPIO_PIN_1);
    gpio_bit_set(GPIOA,GPIO_PIN_2);

    rcu_periph_clock_enable(RCU_AF);
    
    eclic_init(ECLIC_NUM_INTERRUPTS);
    
    eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
    eclic_irq_enable(EXTI5_9_IRQn, 1, 1);

    exti_deinit(); …
Run Code Online (Sandbox Code Playgroud)

c++ microcontroller interrupt interrupt-handling riscv

6
推荐指数
1
解决办法
872
查看次数