diff --git a/br-ext-chip-goke/Config.in b/br-ext-chip-goke/Config.in index f8047bca..274514da 100644 --- a/br-ext-chip-goke/Config.in +++ b/br-ext-chip-goke/Config.in @@ -34,6 +34,7 @@ source "$BR2_EXTERNAL_GOKE_PATH/package/mbedtls-openipc/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/microbe-web/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/motors/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/mt7601u-ap-openipc/Config.in" +source "$BR2_EXTERNAL_GOKE_PATH/package/nabto/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/node-exporter/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/opus-openipc/Config.in" source "$BR2_EXTERNAL_GOKE_PATH/package/quirc-openipc/Config.in" diff --git a/br-ext-chip-goke/configs/gk7205v200_ultimate_defconfig b/br-ext-chip-goke/configs/gk7205v200_ultimate_defconfig index c9aff973..3bf2c3a1 100644 --- a/br-ext-chip-goke/configs/gk7205v200_ultimate_defconfig +++ b/br-ext-chip-goke/configs/gk7205v200_ultimate_defconfig @@ -111,6 +111,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-goke/configs/gk7205v300_ultimate_defconfig b/br-ext-chip-goke/configs/gk7205v300_ultimate_defconfig index 71645379..13f5db4e 100644 --- a/br-ext-chip-goke/configs/gk7205v300_ultimate_defconfig +++ b/br-ext-chip-goke/configs/gk7205v300_ultimate_defconfig @@ -111,6 +111,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-goke/package/nabto b/br-ext-chip-goke/package/nabto new file mode 120000 index 00000000..8677c2db --- /dev/null +++ b/br-ext-chip-goke/package/nabto @@ -0,0 +1 @@ +../../general/package/nabto \ No newline at end of file diff --git a/br-ext-chip-hisilicon/Config.in b/br-ext-chip-hisilicon/Config.in index adb27c00..022b7da3 100644 --- a/br-ext-chip-hisilicon/Config.in +++ b/br-ext-chip-hisilicon/Config.in @@ -45,6 +45,7 @@ source "$BR2_EXTERNAL_HISILICON_PATH/package/microbe-web/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/mini/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/motors/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/mt7601u-ap-openipc/Config.in" +source "$BR2_EXTERNAL_HISILICON_PATH/package/nabto/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/node-exporter/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/opus-openipc/Config.in" source "$BR2_EXTERNAL_HISILICON_PATH/package/quirc-openipc/Config.in" diff --git a/br-ext-chip-hisilicon/configs/hi3516av100_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516av100_ultimate_defconfig index f4bd91a9..8e88404d 100644 --- a/br-ext-chip-hisilicon/configs/hi3516av100_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516av100_ultimate_defconfig @@ -115,6 +115,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516av200_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516av200_ultimate_defconfig index fbb5cee0..c98928c6 100644 --- a/br-ext-chip-hisilicon/configs/hi3516av200_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516av200_ultimate_defconfig @@ -116,6 +116,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516cv300_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516cv300_ultimate_defconfig index 045c5255..fcee35f6 100644 --- a/br-ext-chip-hisilicon/configs/hi3516cv300_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516cv300_ultimate_defconfig @@ -114,6 +114,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516dv100_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516dv100_ultimate_defconfig index d21b8ef8..17e047d4 100644 --- a/br-ext-chip-hisilicon/configs/hi3516dv100_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516dv100_ultimate_defconfig @@ -115,6 +115,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516ev200_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev200_ultimate_defconfig index 9c7cc947..14a7494f 100644 --- a/br-ext-chip-hisilicon/configs/hi3516ev200_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516ev200_ultimate_defconfig @@ -116,6 +116,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_defconfig index a7ec811d..8434af02 100644 --- a/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_defconfig @@ -118,6 +118,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_defconfig index 42f2a13b..88dfcf06 100644 --- a/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_defconfig @@ -116,6 +116,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/configs/hi3518ev300_ultimate_defconfig b/br-ext-chip-hisilicon/configs/hi3518ev300_ultimate_defconfig index 36352653..d286e11b 100644 --- a/br-ext-chip-hisilicon/configs/hi3518ev300_ultimate_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3518ev300_ultimate_defconfig @@ -119,6 +119,9 @@ BR2_PACKAGE_MOSQUITTO=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-hisilicon/package/nabto b/br-ext-chip-hisilicon/package/nabto new file mode 120000 index 00000000..8677c2db --- /dev/null +++ b/br-ext-chip-hisilicon/package/nabto @@ -0,0 +1 @@ +../../general/package/nabto \ No newline at end of file diff --git a/br-ext-chip-ingenic/Config.in b/br-ext-chip-ingenic/Config.in index a87077aa..53e50127 100644 --- a/br-ext-chip-ingenic/Config.in +++ b/br-ext-chip-ingenic/Config.in @@ -28,6 +28,7 @@ source "$BR2_EXTERNAL_INGENIC_PATH/package/mbedtls-openipc/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/microbe-web/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/microsnander/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/motors/Config.in" +source "$BR2_EXTERNAL_INGENIC_PATH/package/nabto/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/node-exporter/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/opus-openipc/Config.in" source "$BR2_EXTERNAL_INGENIC_PATH/package/quirc-openipc/Config.in" diff --git a/br-ext-chip-ingenic/configs/t31_ultimate_defconfig b/br-ext-chip-ingenic/configs/t31_ultimate_defconfig index 691572b1..65b30462 100644 --- a/br-ext-chip-ingenic/configs/t31_ultimate_defconfig +++ b/br-ext-chip-ingenic/configs/t31_ultimate_defconfig @@ -106,6 +106,9 @@ BR2_PACKAGE_WIREGUARD_TOOLS=y # ZEROTIER BR2_PACKAGE_ZEROTIER_ONE=y +# NABTO +BR2_PACKAGE_NABTO is not set + # DEBUG BR2_PACKAGE_HOST_GDB=y BR2_PACKAGE_GDB=y diff --git a/br-ext-chip-ingenic/package/nabto b/br-ext-chip-ingenic/package/nabto new file mode 120000 index 00000000..8677c2db --- /dev/null +++ b/br-ext-chip-ingenic/package/nabto @@ -0,0 +1 @@ +../../general/package/nabto \ No newline at end of file diff --git a/general/package/nabto/Config.in b/general/package/nabto/Config.in new file mode 100644 index 00000000..c3974d19 --- /dev/null +++ b/general/package/nabto/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NABTO + bool "nabto embedded sdk" + help + 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. + + https://github.com/nabto/nabto-embedded-sdk diff --git a/general/package/nabto/nabto.mk b/general/package/nabto/nabto.mk new file mode 100644 index 00000000..ecbbc41c --- /dev/null +++ b/general/package/nabto/nabto.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# nabto embedded sdk +# +################################################################################ + +NABTO_VERSION = 5.12.0 +NABTO_SOURCE = nabto-embedded-sdk.zip +NABTO_SITE = https://github.com/nabto/nabto-embedded-sdk/releases/download/v$(NABTO_VERSION) + +define NABTO_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(NABTO_DL_DIR)/$(NABTO_SOURCE) + mv $(@D)/nabto-embedded-sdk/* $(@D)/ + rm -rf $(@D)/nabto-embedded-sdk +endef + +NABTO_CONF_OPTS += \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DDEVICE_BUILD_TESTS=OFF \ + -DDEVICE_BUILD_EXAMPLES=OFF + +define NABTO_REMOVE_EXTRA + rm -f $(TARGET_DIR)/usr/lib/libnabto_device.so +endef + +NABTO_POST_INSTALL_TARGET_HOOKS += NABTO_REMOVE_EXTRA + +$(eval $(cmake-package)) diff --git a/general/package/nabto/readme.md b/general/package/nabto/readme.md new file mode 100644 index 00000000..0def1ccc --- /dev/null +++ b/general/package/nabto/readme.md @@ -0,0 +1,112 @@ +[Nabto Edge Embedded SDK](https://github.com/nabto/nabto-embedded-sdk) + +Пакет включает сборку tcp_tunnel_device из sdk. В примере показано как можно получить доступ к rtsp потоку из любой точки мира посредством платформы [Nabto](https://www.nabto.com/). + + +###### Регистрация + +Для настройки камеры понадобится регистрация в облаке [Nabto Cloud Console](https://console.cloud.nabto.com) и получение `Product-ID` (pr-xxxxxxxx) и `Deviсe-ID` (de-xxxxxxxx) для каждого подключаемого устройства, `fingerprint` для завершения будет получен только после настройки камеры. + +###### Настройка камеры + +Запустить в консоли `tcp_tunnel_device` с ключом `--demo-init` и ввести данные (pr-xxxxxxxx & de-xxxxxxxx) полученные при регистрации в облаке [Nabto Cloud Console](https://console.cloud.nabto.com) и создании устройства. + +Далее выбрать проксируемый сервис, в данном случае `rtsp` и указать endpoint `/stream=0`: + +``` +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=0 +``` + +По окончании будет выдан `fingerprint`, который необходимо сохранить в настройках устройства в облаке. + +###### Запуск +``` +tcp_tunnel_device +``` +убедиться что подключение прошло успешно (пример): + +``` +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 +``` + +###### Получение потока + +В примере будем забирать поток на linux машине, но в релизах на [github](https://github.com/nabto/nabto-client-edge-tunnel) есть версия клиента под windows. + +Клонируем и собираем клиента (качаем из релизов). + +Есть 2 способа "спаривания" - `Local Open` и `Password Open`. Первый режим позволяет легко найти и привязать устройство, если оно находится в одной локальной сети, второй вариант если устройство удаленное. +В качестве универсального примера используем вариант с удаленным устройством. + +Запускаем `edge_tunnel_client` с ключом `--pair-string` и строкой с необходимыми учетными данными устройства `p=pr-ydk3xhyn,d=de-orruyc4n,pwd=X9NphkArpzLU,sct=9jLgbUb4FWhe`. +Строка в готовом виде присутствует в выводе подключенной к облаку камеры, потому просто копируем ее из предыдущего шага настройки камеры и выбираем `(0) Open Password`, при запросе username укажем `admin`: + +``` +$./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 + +``` +Настройка завершена. Запускаем клиент и проверяем список предоставляемых камерой сервисов: + +``` +$ ./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 потоку. Подключаемся: + +``` +./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` будет доступен rtsp поток, используем ffplay обязательно выбрав транспорт tcp: + +``` +ffplay -rtsp_transport tcp rtsp://127.0.0.1:44391/stream=0 +``` + +Более подробно о возможностях платформы и настройках в официальной [документации](https://docs.nabto.com/developer/guides.html) +