- 嵌入式
- 智能硬件
- 物联网
【免费下载链接】firmware
Alternative IP Camera firmware from an open community
导读
本文以 OpenIPC 社区固件仓库中general/package/nabto包的官方集成指南为主体,讲解如何在 OpenIPC 相机上启用 Nabto Edge 嵌入式 SDK 的tcp_tunnel_device组件,实现"不依赖公网 IP、无需端口映射,从世界任意位置直接拉取相机 RTSP 流"。读完本文,你将掌握 Nabto Cloud Console 的设备注册流程、tcp_tunnel_device --demo-init的交互式配置方法、edge_tunnel_client的配对与取流操作,并理解该包在 OpenIPC 构建系统中针对嵌入式场景所做的裁剪与调优。
1. 这个包解决什么问题
Nabto Edge 平台的核心思想是设备直连(P2P):客户端与设备之间的数据不经过中转服务器间接转发,而是由平台(Basestation)协助双方完成 NAT 穿透后直接通信。这一点在 包配置文件 中描述得很清楚:
The Nabto Edge platform makes it possible to communicate directly between two entities: Instead of interacting indirectly with a device through a cloud service, the platform makes it simple to communicate directly with the actual device to invoke services or transfer data - also through firewalls.
本包(general/package/nabto)从 Nabto Edge 嵌入式 SDK 中选取了tcp_tunnel_device组件,官方 readme 给出的典型场景正是:在 OpenIPC 相机上运行隧道设备程序,让身处世界任意位置的客户端通过 Nabto 平台访问相机的 RTSP 流。
从构建脚本(general/package/nabto/nabto.mk)可以看到该包的工程定位:
- 版本锁定为
NABTO_VERSION = 5.13.0,源码来自上游 SDK 的 release 压缩包; - 运行时依赖仅两个 OpenIPC 自维护的库:
libevent-openipc与mbedtls-openipc; - 以
Release模式静态编译(BUILD_SHARED_LIBS=OFF),最终只向目标系统/usr/bin安装一个可执行文件tcp_tunnel_device,非常适合资源受限的 IPC 环境。
2. 前置准备:注册产品与设备
在给相机做任何配置之前,需要先在Nabto Cloud Console(https://console.cloud.nabto.com)完成注册,获取两个关键标识:
| 标识 | 格式示例 | 作用 |
|---|---|---|
Product-ID | pr-xxxxxxxx | 标识你创建的产品(产品级) |
Device-ID | de-xxxxxxxx | 标识某个具体设备(设备级) |
注意:用于完成配对的fingerprint(设备指纹)只有在相机端完成配置之后才会生成,因此顺序必须是"先在云端注册拿到 pr/de 两串 ID,再回到相机上配置,最后把生成的 fingerprint 回填到云端设备设置里"。
若读者希望了解云端一侧的设备管理细节,可查阅 Nabto 官方开发者文档中的 Guides(原 readme 末尾给出的指引)。本仓库不涉及云端控制台的实现代码。
3. 相机端配置:tcp_tunnel_device --demo-init
登录 OpenIPC 相机的 shell(示例中主机名为openipc-t31,即君正 T31 平台),启动带--demo-init参数的初始化流程:
root@openipc-t31:# tcp_tunnel_device --demo-init No device configuration found. Creating configuration: /home/user/.nabto/edge/config/device.json. The device configuration requires a Product ID and a Device ID, created in the Nabto Cloud Console. Product Id: pr-ydk3xhyn Device Id: de-orruyc4n Demo initialization will make a simple IAM setup, be aware that this is not what you want in production. 'Local Open Pairing' and 'Password Open Pairing' are enabled. Newly paired users get the 'Administrator' role. Next step is to add TCP tunnel services. What type of service do you want to add? [0]: continue [1]: ssh [2]: http [3]: rtsp Enter a valid number (default: 1) [0-3]: 3 Enter the port of your RTSP server (default: 8554) [0-65535]: 554 Enter your RTSP endpoint (default: /video): /stream=0 Added rtsp service on localhost port 554 with metadata rtsp-path => /stream=03.1 交互步骤逐项解读
- 输入产品与设备 ID:把云端注册得到的
pr-ydk3xhyn、de-orruyc4n依次输入。程序会在首次运行时自动创建配置目录与device.json。 - IAM 安全提示:
--demo-init会启用Local Open Pairing和Password Open Pairing两种配对方式,新配对的用户直接获得Administrator角色——这是演示用途的简易 IAM 配置,不推荐直接用于生产环境(原 readme 对此有明确警告)。 - 添加隧道服务:选择
3(rtsp),随后指定:- RTSP 服务端口:填写本地 RTSP 服务器的端口(示例为
554); - RTSP endpoint:填写流路径,示例为
/stream=0(这是 OpenIPC 常见的子码流路径)。
- RTSP 服务端口:填写本地 RTSP 服务器的端口(示例为
完成服务添加后,程序会输出Added rtsp service on localhost port 554 with metadata rtsp-path => /stream=0,表明隧道服务已在127.0.0.1:554上就位,并且把rtsp-path作为元数据与该项服务绑定。
3.2 获取并保存 fingerprint
初始化结束时,程序会打印设备的 Fingerprint(SHA256 格式的十六进制串),必须把它保存到云端对应设备的设置中,否则设备将不被允许接入 Basestation:
The configuration and state has been initialized The Fingerprint must be configured for this device in the Nabto Cloud Console before it will be allowed to attach to the Basestation. If you want to reuse an already configured fingerprint, you can copy the corresponding private key to /home/user/.nabto/edge/keys/device.key The device Fingerprint is: 3de2ec6ded2cc975bf87ed63b2303e02b8051fb7359b19a3d950ed0158bb3813同时注意输出里给出的一个复用技巧:如果希望复用已配置过的指纹,可以把对应的私钥拷贝到~/.nabto/edge/keys/device.key。
4. 启动隧道设备并确认连接
配置完成后,直接以普通模式启动:
tcp_tunnel_device成功连接到 Basestation 时,输出类似:
root@openipc-t31:# tcp_tunnel_device ######## Nabto TCP Tunnel Device ######## # Product ID: pr-ydk3xhyn # Device ID: de-orruyc4n # Fingerprint: 3de2ec6ded2cc975bf87ed63b2303e02b8051fb7359b19a3d950ed0158bb3813 # Version: 0.0.0-branch.heads/master.commits.1910+a49d27fc.dirty # Local UDP Port: 5592 # Friendly Name: "Tcp Tunnel" # # The device offers Local Open Pairing # # The device has Password Open Pairing enabled # Open Pairing Password: X9NphkArpzLU # Open Pairing SCT: 9jLgbUb4FWhe # Open Pairing String: p=pr-ydk3xhyn,d=de-orruyc4n,pwd=X9NphkArpzLU,sct=9jLgbUb4FWhe # ######## Configured TCP Services ######## # Id Type Host Port # rtsp rtsp 127.0.0.1 554 ######## Attached to the basestation这段输出是后续所有操作的关键信息源,请留意其中三处:
Local UDP Port: 5592:Nabto 设备侧 UDP 通信端口;Open Pairing String:形如p=pr-...,d=de-...,pwd=...,sct=...的一整串配对凭证,客户端远程配对时要直接复制它;Attached to the basestation:一行即表明设备已成功附着到 Nabto 平台,NAT 穿透通道已就绪。
4.1 源码中的嵌入式调优
有意思的是,OpenIPC 对本包的上游代码做了嵌入式适配,两处补丁直接改变了上面的运行行为:
- 0000-set-shared-libraries.patch 把配置目录从依赖
$HOME的~/.nabto改为固定路径/etc/nabto(宏定义由.nabto改为nabto、目录环境变量由读取HOME改为硬编码/etc)。嵌入式系统没有标准的 home 目录,这一改动保证了配置落盘位置的确定性; - 0010-openipc-tuning.patch 针对 OpenIPC 的 RTSP 场景做了两处默认值调整:应用显示名从
"Tcp Tunnel"改为"P2P Cloud",RTSP 交互式提示中的默认端口从8554改为554、默认 endpoint 从/video改为/stream=0——这正是上面--demo-init示例中"默认值"与上游 SDK 不同的原因。
5. 客户端侧:构建edge_tunnel_client并远程取流
相机端就绪后,在任意一台能上网的 Linux 机器(官方发布中另有 Windows 版本客户端)上构建 Nabto 客户端edge_tunnel_client(来自上游 nabto-client-edge-tunnel 项目的 release 产物),随后完成配对与取流。
5.1 两种配对模式
Nabto 提供两种配对方式:
Local Open(本地开放配对):设备与客户端处于同一局域网时使用,查找与绑定最简便;Password Open(密码开放配对):设备在远端(跨公网/NAT)时的配对方式。
readme 以远程设备这一通用场景为例,采用Password Open。
5.2 通过--pair-string完成首次配对
配对凭证串可以直接从第 4 节相机端的输出中整体复制。执行:
$./edge_tunnel_client --pair-string p=pr-ydk3xhyn,d=de-orruyc4n,pwd=X9NphkArpzLU,sct=9jLgbUb4FWhe Connected to device ProductId: pr-ydk3xhyn DeviceId: de-orruyc4n Several pairing modes exists choose one of the following. [0]: Password Open [1]: Local Open Choose a pairing mode: 0 Open Password Pairing requires a username. The username is a name you choose for the new user, the username has to be unique among the registered users on the device. New Username: admin The device [0] pr-ydk3xhyn.de-orruyc4n has been set into the bookmarks as index 0要点:
- 选择
0(Password Open); - 输入自定义用户名(示例
admin),该用户名在设备已注册用户中必须唯一; - 配对成功后,设备以索引
[0]存入客户端书签(bookmarks),后续命令用0引用该设备。
5.3 查看相机提供的服务
$ ./edge_tunnel_client --services Connected to the device [0] pr-ydk3xhyn.de-orruyc4n Available services ... Service: rtsp Type: rtsp Host: 127.0.0.1 Port: 554本例中相机只暴露了一个rtsp隧道服务。
5.4 建立隧道并播放
请求打开该服务对应的隧道:
./edge_tunnel_client --service rtsp Connected to the device [0] pr-ydk3xhyn.de-orruyc4n TCP Tunnel opened for the service rtsp listening on the local port 44391客户端在本机127.0.0.1:44391上开出一个监听端口,任何发往该端口的数据都会被隧道送到相机内网的127.0.0.1:554。随后即可用 ffplay 播放,务必指定 TCP 传输方式:
ffplay -rtsp_transport tcp rtsp://127.0.0.1:44391/stream=0注意流路径要使用第 3 节配置时填写的 endpoint/stream=0。至此,一个"相机在 NAT 内、客户端在全球任意网络"的 RTSP 直连链路即告打通。
6. 配套机制:局域网内的 mDNS 服务广播
为了让同一局域网中的客户端能"更容易地找到设备"(对应Local Open配对模式),OpenIPC 还为主包配套了 mDNS 广播描述文件 general/package/mdnsd-openipc/files/nabto.service:
type _nabto._udp port 5592 txt productid=device txt deviceid=device txt fn=Cloud- 服务类型为
_nabto._udp,端口5592——正好与第 4 节设备启动输出中的Local UDP Port: 5592一一对应,说明本地发现与 Nabto 实际通信端口是同一端口; txt productid/txt deviceid广播产品与设备标识,客户端在局域网内可据此识别具体设备;txt fn=Cloud是友好名称(friendly name),与补丁中把应用名改为P2P Cloud的意图一致。
7. 小结与生产化提示
| 阶段 | 关键动作 | 产物/凭证 |
|---|---|---|
| 云端注册 | Nabto Cloud Console 创建产品与设备 | pr-xxxxxxxx、de-xxxxxxxx |
| 相机配置 | tcp_tunnel_device --demo-init录入 ID、添加 rtsp 服务 | fingerprint、配置目录/etc/nabto |
| 云端回填 | 把 fingerprint 写入设备设置 | 设备获准接入 Basestation |
| 相机运行 | tcp_tunnel_device | 输出Open Pairing String与端口 5592 |
| 客户端配对 | edge_tunnel_client --pair-string ... | 设备进入书签索引 0 |
| 客户端取流 | --services查看、--service rtsp建隧道 | 本地端口如 44391 → 相机 127.0.0.1:554 |
| 播放验证 | ffplay -rtsp_transport tcp ... | 远端 RTSP 画面 |
需要特别提醒的两点:
--demo-init的 IAM 是演示配置:默认让新配对用户获得Administrator角色,生产环境务必按 Nabto 官方文档配置更严格的 IAM 规则与角色权限;- 构建与运行范围以本仓库为准:本包固定使用 SDK 5.13.0 版本、静态链接 OpenIPC 自维护的 libevent/mbedTLS,并把配置目录固定在
/etc/nabto,这些行为由 nabto.mk 与两个补丁文件(0000-set-shared-libraries.patch、0010-openipc-tuning.patch)定义,与上游 SDK 的默认行为并不完全一致,排查问题时请以本仓库的实际输出为准。
进一步了解 Nabto 平台的完整功能与配置项,可参考官方开发者文档(原 readme 末尾链接)。本仓库内的 包说明 即本文核心操作的原始出处,配置入口则在 Config.in(菜单项BR2_PACKAGE_NABTO)。
- 嵌入式
- 智能硬件
- 物联网
【免费下载链接】firmware
Alternative IP Camera firmware from an open community
相关推荐
颠覆性P2P直连技术:零成本穿透NAT实现主机互联
颠覆性P2P直连技术:零成本穿透NAT实现主机互联 在传统远程连接方案屡屡受挫的今天,一种革命性的P2P直连技术正悄然改变着网络通信的格局。通过创新的NAT穿透
网络通信【零成本直连革命】3分钟上手GoodLink:让任意两台主机穿透NAT直连的开源神器
【零成本直连革命】3分钟上手GoodLink:让任意两台主机穿透NAT直连的开源神器 痛点直击:你还在为这些问题抓狂吗? 远程办公时,Windows自带远程桌面
网络通信tunnelto终极指南:一键穿透内网实现全球访问
tunnelto终极指南:一键穿透内网实现全球访问 在现代开发工作流中,将本地服务快速分享给远程团队成员或客户已成为刚需。tunnelto作为一款高性能的内网穿
网络CLI后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考