Перейти до основного вмісту

Порти та мережева поведінка.

Insight використовує кілька портів під час нормальної роботи. Порти за замовчуванням — це порти, які використовуються всередині контейнера SDK або на безпосередньо встановленому DevKit. У середовищі розробки Neat, SDK публікує ці служби на портах хоста. Якщо порт хоста за замовчуванням вже використовується, sima-cli може виділити інший доступний порт хоста.

 Шляхи портів і мережі Insight між клієнтським браузером, Modalix, DevKit, хост-машиною SDK і контейнером SDK.

Назва відображення портів.Порт або діапазон за замовчуванням.ПротоколМета
mainUI9900HTTPS/TCPОсновне Insight веб-інтерфейс, HTTP API та джерела потокового відео HTTP MJPEG.
videoUI8081HTTPS/TCPІнтерфейс користувача для перегляду відео WebRTC.
rtsp.tcp8554RTSP/TCPRTSP джерела потокового відео, створені на основі завантажених медіафайлів.
videoUDP9000-9079UDPЗавантаження відео для каналів перегляду 0-79 RTP.
metadataUDP9100-9179UDPМетадані JSON для каналів перегляду 0-79.
webRTC40000-40199UDPWebRTC передавання медіаданих і метаданих через канал DataChannel від віртуальної функції до браузера.
webrtcWhip8889HTTPS/TCPПублікація вебкамери браузера в MediaMTX через WHIP із повторною публікацією як джерела RTSP.
webrtcWhipIce8189UDPМедіа ICE для публікації вебкамери браузера. Сигналізація використовує webrtcWhip; саме відео надходить сюди, тож обидва порти мають бути доступними.
webSSH8022HTTPS/TCPЯкщо можливо, під’єднайте веббраузер до парного DevKit.

Insight також запускає API керування mediamtx на 127.0.0.1:9901 (TCP). Він доступний лише через петлевий інтерфейс, захищений паролем, який генерується під час кожного запуску, і використовується лише самим Insight для підтвердження джерел вебкамер, виявлення зовнішніх відправників і налаштування підтягнутих потоків, тому не потребує відображення портів. Як і інші порти mediamtx, під час запуску він звільняється, якщо його займає інший процес.

Знайдіть актуальну схему розташування портів SDK.​

У SDK не слід вважати, що порти хоста за замовчуванням доступні. Виконайте команду:

neat --json

Результат містить insight.webUiUrl та масив exposedPorts:

{
"exposedPorts": [
{"hostPortEnd": null, "hostPortStart": 9900, "name": "mainUI", "protocol": "tcp"},
{"hostPortEnd": 9179, "hostPortStart": 9100, "name": "metadataUDP", "protocol": "udp"},
{"hostPortEnd": null, "hostPortStart": 8554, "name": "rtsp.tcp", "protocol": "tcp"},
{"hostPortEnd": 9079, "hostPortStart": 9000, "name": "videoUDP", "protocol": "udp"},
{"hostPortEnd": null, "hostPortStart": 8081, "name": "videoUI", "protocol": "tcp"},
{"hostPortEnd": 40199, "hostPortStart": 40000, "name": "webRTC", "protocol": "udp"},
{"hostPortEnd": null, "hostPortStart": 8889, "name": "webrtcWhip", "protocol": "tcp"},
{"hostPortEnd": null, "hostPortStart": 8189, "name": "webrtcWhipIce", "protocol": "udp"},
{"hostPortEnd": null, "hostPortStart": 8022, "name": "webSSH", "protocol": "tcp"}
],
"insight": {
"serviceState": "Running",
"venv": "/opt/neat-insight/venv",
"webUiUrl": "https://10.0.0.210:9900"
}
}

Якщо порт хоста було перепризначено, значення hostPortStart вказує на порт, який повинні використовувати зовнішні клієнти. hostPortEnd використовується для діапазонів портів, таких як відео, метадані та WebRTC.

Відображення каналів.​

Відеопрогравач використовує парні відео- та метадані-порти. Для каналу N:

video: UDP 9000 + N
metadata: UDP 9100 + N

Наприклад:

Канал для глядачів.ВідеопортПорт метаданих.
090009100
190019101
290029102

Забезпечте узгодженість номера каналу між відео- та метаданими. Якщо ваша програма надсилає відео на канал 3, надсилайте відповідні метадані до порту метаданих для каналу 3.

Відеопорт приймає RTP H.264 (тип корисного навантаження 96), H.265 (98) або JPEG (26, RFC 2435 у тому вигляді, як його надсилає GStreamer rtpjpegpay). Кожен RTP-пакет має бути не більшим за 4096 байтів; для JPEG установіть rtpjpegpay mtu= не більше 4096. Кадри JPEG надходять до браузера тим самим з’єднанням WebRTC, що й метадані, тому додатковий порт не потрібен.

Відображення портів SDK.​

У середовищі розробки Neat порти можуть бути перепризначені контейнером SDK. Insight зчитує конфігурацію відображення портів SDK, коли вона доступна, щоб посилання в інтерфейсі користувача вказували на порт хоста, до якого можна отримати доступ через браузер.

Це особливо важливо для переглядача відео. Внутрішній порт переглядача за замовчуванням — 8081, але порт, який відображається в браузері, може бути іншим, коли SDK відображає videoUI на інший порт хоста.

Використовуйте розділ «Системна інформація» в інтерфейсі користувача Insight, щоб перевірити фактичні відкриті порти, перш ніж припускати, що URL-адреса вказана неправильно.

Необов’язкова конфігурація для браузера​

У хостингових середовищах адресу, яку використовує спарений DevKit, можна відокремити від адреси, що оголошується зовнішньому браузеру. Під час запуску Insight читає два необов’язкові файли:

ФайлПризначення
/home/docker/.insight-config/browser-ice-addressОдна доступна браузеру IPv4-адреса, яку оголошують і переглядач vf, і кінцева точка WHIP MediaMTX.
/home/docker/.insight-config/launch-urlОдна довірена абсолютна URL-адреса запуску HTTP або HTTPS. Insight використовує її джерело для створення URL-адрес переглядача, WHIP і HTTP MJPEG.

Якщо browser-ice-address відсутній, Insight зберігає наявну поведінку CONTAINER_HOST_IP. Якщо launch-url відсутній, згенеровані URL-адреси браузера й надалі використовують хост запиту та карту портів SDK. Отже, ці файли незалежно вмикають поведінку для хостингового середовища й не змінюють звичайні локальні інсталяції або інсталяції DevKit.

browser-ice-address перевіряється до запуску vf або MediaMTX. Порожня чи неправильно сформована адреса браузера не дозволяє Insight перейти в стан готовності замість того, щоб непомітно оголошувати недоступну адресу. launch-url має рекомендаційний характер: Insight приймає повну URL-адресу з ASCII-іменем хоста, зокрема зі шляхом, запитом або фрагментом, і використовує лише її джерело HTTP(S). Неприпустима URL-адреса запуску записується в журнал як попередження, а формування URL-адрес за хостом запиту й картою портів залишається без змін. Замініть файли атомарно, виконайте insight-admin restart і перевірте /api/health, щоб підтвердити, що новий процес застосував адресу та загальнодоступне джерело.

Адресу ICE браузера не обов’язково призначати локальному мережевому інтерфейсу. Загальнодоступні хмарні IPv4-адреси зазвичай досягають хоста через NAT 1:1. UDP-порти WebRTC і webrtcWhipIce усе одно мають бути опубліковані й дозволені навколишньою мережевою політикою.

Налаштуйте програми, використовуючи карту портів.​

Використовуйте розташування застосунку, щоб визначити, чи використовувати стандартні порти контейнера, чи порти, відкриті хостом SDK.

Місце розташування застосунку.RTSP вхідні дані від InsightВиведення відео/метаданих у Insight.
Всередині контейнера SDK.rtsp://127.0.0.1:8554/srcN127.0.0.1:9000 + channel та 127.0.0.1:9100 + channel
На DevKit або на іншому зовнішньому пристрої.rtsp://<sdk-host-ip>:<rtsp.tcp hostPortStart>/srcN<sdk-host-ip>:<videoUDP hostPortStart + channel> та <sdk-host-ip>:<metadataUDP hostPortStart + channel>

HTTP-джерела MJPEG використовують основний порт UI/API Insight. У SDK використовуйте основний порт хоста mainUI з neat --json для цих URL-адрес.

Наприклад, якщо neat --json повідомляє:

{"name": "rtsp.tcp", "hostPortStart": 18554, "protocol": "tcp"}
{"name": "videoUDP", "hostPortStart": 19000, "hostPortEnd": 19079, "protocol": "udp"}
{"name": "metadataUDP", "hostPortStart": 19100, "hostPortEnd": 19179, "protocol": "udp"}

Після цього застосунок, розроблений за допомогою DevKit, має використовувати:

RTSP source src1: rtsp://<sdk-host-ip>:18554/src1
video channel 0: <sdk-host-ip>:19000
metadata channel 0: <sdk-host-ip>:19100
video channel 3: <sdk-host-ip>:19003
metadata channel 3: <sdk-host-ip>:19103

Якщо застосунок і Insight працюють в одному контейнері SDK, використовуйте стандартні локальні порти.

Пряме підключення до SDK і спільний проксі​

Файл /home/docker/.insight-config/url-routing явно визначає маршрутизацію URL. Запишіть один рядок зі значенням direct або proxy та перезапустіть Insight після зміни. Порожнє або недопустиме значення спричиняє помилку запуску. Якщо файлу немає, використовується proxy, щоб зберегти поведінку наявних хостингових середовищ.

У режимі proxy файл launch-url задає спільне джерело для URL переглядача, WHIP і HTTP MJPEG незалежно від номера порту. Проксі має передавати відповідні шляхи до належних служб. У режимі direct засоби запуску SDK й далі можуть використовувати launch-url, але Insight не використовує його як публічне джерело. Згенеровані URL використовують ім’я хоста із запиту та налаштований порт кожної служби. Переглядач використовує порт videoUI з карти портів SDK, а за його відсутності — 8081. Налаштування ICE-адреси браузера не залежить від цього параметра.

Для локального SDK з перевизначеною URL запуску, наприклад https://127.0.0.1:9900/, задайте direct у файлі url-routing. Якщо перевизначення не потрібне, можна видалити launch-url. Виконайте insight-admin restart і перевірте /api/health: для прямої маршрутизації буде показано network.public_origin: null. Джерело проксі не змінюється, навіть якщо його порт збігається з портом mainUI SDK.

Пов’язані інструменти​

  • Neat Середовище розробки надає контейнеризоване середовище для збірки та запуску, в якому розміщено Insight.
  • Neat Library містить програмні інтерфейси (API), які використовуються для розробки та запуску обчислювальних завдань, пов’язаних із комп’ютерним зором.
  • sima-cli встановлює та оновлює пакети Insight та інші артефакти Neat.
  • Компілятор моделей і LLiMa створюють артефакти моделей, які ви можете переглядати в робочому просторі та перевіряти за допомогою програм, що працюють разом із Insight.