Camera extensions proxy что это
Перейти к содержимому

Camera extensions proxy что это

  • автор:

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

A Windows Service which acts as a «smart» proxy for IP network cameras. Uses the .NET framework and parts of the VLC media player libraries.

License

bp2008/cameraproxy

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Camera Proxy

Camera Proxy is a Windows Service which acts as a «smart» proxy for IP network cameras. Uses the .NET framework and parts of the VLC media player libraries.

The service runs a simple embedded HTTP(S) server and is compatible with practically any browser.

Camera Proxy

Who is it for?

The service is for programmers and very computer literate people who want:

  • a single point of access to view all their network cameras either locally or via the internet
  • to provide live webcam views to others on the internet without giving them direct access to any cameras. Many IP network cameras have serious security flaws and should not be publicly accessible.
  • to reduce the network and CPU load of a camera that has multiple simultaneous viewers (the proxy service only creates one user’s worth of load on the camera)

A readme file is included in the source and binary distributions to aid in initial setup, but most setup is done through the web interface.

What cameras does it support?

  • Most cameras that can provide jpeg still images or an mjpeg stream via HTTP are supported natively and very efficiently. Http authentication is supported.
  • Using the vlc_transcode camera type, you can add virtually any camera to the system as long as it is viewable in VLC media player. This option uses much more CPU and memory, however. It is best to use jpeg or mjpeg based inputs whenever possible.
  • Experimental support for proxying full rtsp / h264 streams using live555 and the VLC web plugin. Results may vary.

What PTZ cameras can it control?

  • Nearly any PTZ camera can be controlled by using Custom PTZ Profiles.
  • A small handful of PTZ cameras have PTZ support already built in.

Can I password protect the service?

Yes. A simple (and optional) authentication scheme is in place. Cameras have a permission level from 0 to 100 and so do user accounts. If the user’s permission level is less than the camera’s permission level, the user cannot view the camera.

What else can it do?

  • The base functionality (not including h264 / rtsp options) now works under Linux with the Mono framework.
  • The service can re-encode imagery on-the-fly to JPG, PNG, and even WebP formats at any size and quality you specify in the URL. Note that re-encoding images requires quite a lot of CPU time. Here is a Guide to Image URLs.

Why?

Most software NVRs can do everything this does and a lot more. The difference is this is free and open source. It is also very efficient with CPU and memory if your cameras support jpg or mjpg transmission via HTTP, as almost no image processing will be required.

How to Use

Then, please see the Setup Guide

How to Build

If you want to build from source, use Visual Studio 2017. You’ll also need my BPUtil library on your PC.

About

A Windows Service which acts as a «smart» proxy for IP network cameras. Uses the .NET framework and parts of the VLC media player libraries.

Camera extensions proxy что это

lvl.4

United Kingdom

My iMac does not recognise these files natively. If I rename the extension to MP4 then it can play them. I personally would prefer not to have them. Is it possible to turn them off ? Thank You

djiuser_iQCPZ4MmXS28 Offline
djiuser_iQCPZ4MmXS28

lvl.3

It would be nicer for them to be stored in another folder — I like to connect the camera directly to my mac, so it means it’s annoying to preview them

djiuser_QJG6X5IprVcl Offline
djiuser_QJG6X5IprVcl

New

This is a low resolution file generated simultaneously when recording. The new feature trimmed download via DJI MIMO app will take use of them.

fansfe82067d Online
fansfe82067d

Captain

If the directory is ordered by file type they are easier to ignore. But an option not to have them would seem to be a good idea.

DJI-ytao Offline

DJI R&D Squad

Flight distance : 1209413 ft

djiuser_QJG6X5IprVcl Posted at 2-6 10:39
Hi !
Did you know if we can use this file as Proxy for Premiere Pro ?

you can use the file as a proxy.

gringa Offline

Second Officer

Flight distance : 628980 ft

That’s useful information thanks

Partorg Offline

lvl.2

Flight distance : 206952 ft

This is a low resolution file generated simultaneously when recording. The new feature trimmed download via DJI MIMO app will take use of them.

northaal Offline

lvl.4

United Kingdom

Hi Partorg
Other people have asked this in other posts. It is not possible at the moment. It has been requested in a future update.
I wonder if there is anyone on this forum that actually uses these files?

djiuser_zsYNS7FOohWz Offline
djiuser_zsYNS7FOohWz

New

United Arab Emirates

Does someone use this files? I’m afraid of not using this files in the edition of my videos and the quality won’t be good. I try to change to .mp4 and it reproduce but it seems the same video as original so I’m really confuse if I have to use this file in a part of the edition or what it is used for.

ChazWinter Offline
ChazWinter

lvl.2

Flight distance : 15262 ft
United States

After filming a scene with my band, we watched the takes on my phone with the camera disconnected, so I’m guessing these low res files were the ones I was able to watch on my phone.

ChazWinter Offline
ChazWinter

lvl.2

Flight distance : 15262 ft
United States

This . is still annoying. I took a break from making videos until yesterday, forgot what the LRF files were, looked it up, and now I’m annoyed again!

Astmens Offline

lvl.1

I would also love to request the removal of LRF files or at least an option to disable them!
They are cluttering up the SD card and slow down writing speeds as there are 2 files written at the same time. caucing problems with the memory card.
Does anyone know how to raise this issue?

utkin Offline

Second Officer

Flight distance : 237733 ft
alex_markov Offline
alex_markov

Captain

Flight distance : 37316657 ft

Why oh why we need to tackle those files? Please remove them or at least give an option not to save them on card

element33 Offline

lvl.3

This is not a professional camera. It is not able to shoot in RAW format or in log profiles. However, some users do use lrf files on post editing.
I think it would be correct to make an option in the settings to disable LRF.

djiuser_QVEA6eXSN4DN Offline
djiuser_QVEA6eXSN4DN

lvl.2

Flight distance : 1257762 ft

element33 Posted at 12-11 02:34
This is not a professional camera. It is not able to shoot in RAW format or in log profiles. However, some users do use lrf files on post editing.
I think it would be correct to make an option in the settings to disable LRF.

These files occured after the latest release 16th of Dec.
I am sure, that was a mistake on a DJI’s programmer. These file I have on my FlyAPP as a low resolution preview. I check on my device, what I load down from SD fianlly.

Ranta62 Offline

lvl.1

United Kingdom

DJI — please can you add a new setting to allow users to turn this off.

How long does it take to code a simple thing like this?.

We all bought the upgraded Pocket 2 after owning OmniPocket and this is how you reward customers — Ignoring the customer base

RagingLoon Offline
RagingLoon

lvl.1

Flight distance : 237073 ft
United States

Yes an option to disable would be great it’s a waste of space and clock cycles.

springflake Offline
springflake

lvl.3

Flight distance : 35404 ft

Please make a option to enable/disable. I dont need that files and storage is getting wasted on my vacation with that files.

djiuser_lInMkWArbUXt Offline
djiuser_lInMkWArbUXt

lvl.1

Die LFR-Datei ist eine SD-Version vom Original-Clip. Nimmt unnötigen Platz weg und nervt und ist auch bei der Aktion 2

TilleTeamM Offline
TilleTeamM

lvl.1

Flight distance : 1769117 ft

+1 for removing this feature. The LFR-file is indeed an mp4 720P file. You can play it back with VLC player or Windows Mediaplayer.
/Tille,

Greg_Toronto Offline
Greg_Toronto

lvl.2

an easier way in windows command mode (just like DOS back in the mid 80s to late 90s, before Windows and iOS):
d:
cd dcim\100media
del *.LFR

Taishakuten Offline
Taishakuten

lvl.2

Flight distance : 441795 ft

registrando con la pocket 2 video in 2.7k a 50 fps il bitrate sfiora gli 82 m/s la memorycard extreme pro mi da come velocità scrittura 89 mb/s in alcune riprese probabilmente dei picchi di informazioni fanno salire il bitrate in scrittura e il video scatta. Tutta colpa di questi file lrf? Possibile che non si possano disattivare? Assurdo anche perchè le micro sd proposte in vendita nello store da abbinare alla pocket 2 sono le sandisk extreme che hanno una velocità di scrittura ancora inferiore.

fans0c6c1ced Offline
fans0c6c1ced

lvl.2

United States

Astmens Posted at 2021-7-28 02:35
I would also love to request the removal of LRF files or at least an option to disable them!
They are cluttering up the SD card and slow down writing speeds as there are 2 files written at the same time. caucing problems with the memory card.
Does anyone know how to raise this issue?

Perhaps also causing more temperature rise, waste precious battery life and card space.

djuser5 Offline

lvl.1

United States

when this will be fixed?
answer me asap or else i am returning camera!

schlutz Offline

lvl.2

djuser5 Posted at 9-3 18:43
when this will be fixed?
answer me asap or else i am returning camera!

shawn00m Offline

lvl.2

Flight distance : 142425 ft
United States

Today was the first time I flew my Avata while being connected to the DJI Fly App on my phone. Every other time I’ve flown it I wasn’t connected to my phone or the app. Coincidentally, this is the first time I have seen these LRF files. Are these only generated while using the DJI Fly App? Do I have to connect to the app every time I fly?

Ryan70 Offline

lvl.2

United States

Greg_Toronto Posted at 7-1 20:24
I find them annoying but the work around is simple:
1. if you are using windows you can sort the directory (folder) by file type.
2. select the LFR files and hit «del» or «delete» on your keyboard.

Agreed, people just can’t seem to think outside of the box. I personally like options even though I have the latest and greatest. It’s as simple as you say, simply delete them with a command or sort them and delete them. Takes seconds.

Sure, having the ability to turn LFRs off might help, but it doesn’t really effect read/write speeds if you have the appropriate SD card.

Why is the IP camera showing Network Abnormal on my NVR camera management screen?

Why is the IP camera showing Network Abnormal on my NVR camera management screen?

Answer:

The status or error when checking IP cameras on the nvr «Network Abnormal» is caused when the recorder is unable to connect to the device’s IP address. The primary causes of this error are when the device has a different IP then the recorder is looking for and/or the devices IP address is correct but it is connected This will be primarily caused when the device is added manually to the recorder. To fix the issue connect a PC to the same network as the device with the incorrect error and run the SADP tool to determine the IP address of the device. Either modify the devices IP to match the recorder or modify the Ip on the recorder to match the device. For the second issue either connect the device to the appropriate network connection such as moving the ether net cable from the local network to a camera poe port or modify the device’s IP to be on the same scheme as the recorder’s.

Did you find it helpful? Yes No

Выжимаем все соки из WebRTC для стриминга камер на примере go2rtc

Go2rtc — это open source приложение для стриминга видео в реальном времени. Оно весит всего 5 мегабайт, не имеет внешних зависимостей и работает на всех популярных ОС. Поддерживает технологии ​​RTSP, RTMP, DVRIP, HTTP-FLV, WebRTC, MSE, HLS, MJPEG, HomeKit и многие другие. Последний релиз получился настолько масштабным, что все нововведения пришлось оформлять в статью на Хабре.

Введение

Моё знакомство с технологией WebRTC началось в далёком 2020 году с серии стриминговых проектов Андрея @deepch — RTSPtoWebRTC, RTSPtoWSMP4f, RTSPtoWeb.

В апреле 2022-го я начал собирать все идеи для развития в собственном проекте go2rtc, первая альфа-версия вышла в последние дни лета, а первый релиз вышел в конце января 2023-го.

Концепция проекта вышла настолько удачной, что разработчики различных open source проектов начали встраивать go2rtc в свои решения там, где требовался стриминг с камер.

В версии 1.2.0 от февраля 2023-го go2rtc поддерживал передачу потокового видео с камер в браузер в формате WebRTC с задержкой менее 0.5 секунды.

Поддерживались и дополнительные особенности.

1. Синхронное и асинхронное WebRTC-подключение

Сам по себе процесс подключения по технологии WebRTC выглядит очень просто: один из клиентов отправляет offer (пожелания о подключении), второй возвращает ему answer (согласие о подключении). В offer и answer находятся media-элементы с типом (video, audio), направлением (recvonly, sendonly, sendrecv) и перечнем кодеков (H264, VP8, OPUS, PCMA и т.д.).

Например, если браузер хочет только принимать видео и аудио, он может создать offer с двумя media направления recvonly. По умолчанию туда подадут все кодеки, которые браузер поддерживает для видео и аудио.

В теории answer не может быть шире offer, то есть туда нельзя добавлять новые media или новые кодеки. Но можно отказаться от ненужных медиа и неудобных кодеков.

Чтоб подключение могло установиться, участники должны обменяться IP-адресами (candidates). Это можно сделать либо внутри offer/answer (синхронное подключение), либо уже после отправки offer/answer (асинхронное подключение). В список IP-адресов должны попасть адреса всех локальных сетевых интерфейсов и внешние адреса — на случай, если второй участник находится за пределами локальной сети.

В зависимости от настроек сети на компьютере, домашнем роутере, провайдере, да и вообще в стране, поиск списка адресов может затянуться. Потому синхронное подключение будет устанавливаться очень долго. В этом случае выгодно применять асинхронное подключение. Подход также называют Trickle ICE.

Go2rtc поддерживает оба варианта и внутри своих веб-интерфейсов использует именно асинхронный. Но сторонние проекты, например стандартная интеграция Home Assistant, часто умеют только синхронный вариант.

2. Настройка внешнего доступа

Важно понимать, что технология WebRTC в первую очередь нацелена на прямое подключение (peer-to-peer) между двумя участниками соединения. Данные передаются не по HTTP-протоколу. И web/proxy-сервер вроде Nginx участвует только на момент установки соединения.

Для установки прямого подключения между клиентами из разных закрытых сетей используется технология STUN и один из публичных STUN-серверов (в открытых проектах часто используют сервер Google). Такой сервер не участвует в передаче медиаданных, а лишь помогает клиентам установить соединение.

В некоторых случаях, когда клиенты находятся за Symmetric NAT, технология STUN не сработает. Коммерческие проекты в этом случае используют TURN-сервера для проксирования медиа трафика. Бесплатных TURN-серверов нет. Поэтому обычным пользователям приходиться искать другие варианты.

Go2rtc поддерживает несколько вариантов настройки стабильного внешнего доступа:

Если у пользователя статический или динамический публичный (белый) IP-адрес, он может настроить форвардинг специального TCP-порта для передачи медиаданных и добавить свой внешний IP-адрес в качестве кандидата на подключение.

Такой кандидат будет менее приоритетный, чем стандартные UDP-кандидаты. Но если у стандартных кандидатов не удастся подключиться, TCP-кандидат подключится гарантированно.

В случае серого IP-адреса (за NAT-провайдера) можно использовать автоматический туннель сервиса Ngrok. В бесплатном варианте сервис будет постоянно выдавать случайный внешний адрес. Но go2rtc умеет его определять и автоматически добавлять в кандидаты на подключение. Опять же с меньшим приоритетом.

Если у пользователя есть собственный VPS и соответствующие навыки, он может либо поднять свой SSH-туннель и использовать его вместо Ngrok-туннеля, либо установить свой TURN-сервер.

3. Двухсторонняя аудио-связь

Одной из важных фич, которая была заложена в архитектуру проекта, была поддержка двусторонней аудиосвязи с камерой.

Сейчас всё больше камер выпускается с динамиком. Часто для этой функции компании используют свои проприетарные протоколы. Но приличные производители недавно начали добавлять обратное аудио по протоколу ONVIF backchannel.

Поскольку технология WebRTC изначально создавалась для двухсторонней аудио- и видеосвязи, поддержка backchannel была лишь вопросом времени.

Один важный момент: для доступа к микрофону современные браузеры требуют наличия HTTPS на сайте.

4. Кодек H265 в браузерах Apple Safari

Похоже, go2rtc — это первый проект в мире, который начал поддерживать этот кодек в настоящем браузере для технологии WebRTC.

Для упаковки HEVC кодека в RTP-пакеты существует стандарт RFC 7798, которым успешно пользуются разработчики современных камер. Но инженеры Apple, как обычно у них принято, проигнорировали мировые стандарты и изобрели свой велосипед.

Написав небольшой прототип по получению видео с камеры iPhone по протоколу WebRTC, я нашёл закономерность формирования пакетов, описал её в посте на GitHub и реализовал поддержку в go2rtc.

Roborock Vacuum

Сразу после выхода релиза 1.2.0 мне написал один из пользователей с предложением рассмотреть поддержку стриминга видео с пылесосов Roborock и прислал данные своего аккаунта. Это отдельная забавная история, как одни пользователи готовы поделится доступом к мобильной роботизированной камере с двухсторонней аудиосвязью, а другие замазывают локальные IP-адреса в пересылаемых логах.

Спустя сутки весь протокол Roborock был как на ладони:

  1. Для общения с умными устройствами используется обычный MQTT поверх SSL.
  2. Все логины, пароли и топики хешируются.
  3. Для каждого устройства используется один топик для передачи данных и один топик для приёма данных.
  4. Сообщения передаются в формате JSON-RPC и также шифруются ключом устройства.
  5. Для запуска видеопотока можно установить графический пин-код.
  6. Видео передается по современному WebRTC (наконец-то в Китае начинают отказываться от P2P).

Так получилось, что ранее я имел опыт со всеми этими технологиями из перечня:

  1. С шифрованием впервые столкнулся в проекте SonoffLAN. Однажды даже пришлось изучать реализацию AES-CBC на чистом python, потому что процессор Apple M1, работающий на архитектуре ARM в режиме эмуляции x86, выдаёт неправильные результаты шифрования при использовании собранных wheels-библиотек (кто бы мог подумать).
  2. С JSON-RPC и MQTT был опыт в проекте XiaomiGateway3. Довольно популярный протокол MiOT от Xiaomi передаёт сообщения как раз в формате JSON-RPC. А MQTT активно используется последние несколько лет практически во всех шлюзах, разработанных совместно с компанией Lumi.
  3. Первое знакомство с WebRTC началось ещё в 2020 году с проекта RTSP2WebRTC, а затем WebRTC Camera.

Где-то два дня ушло на реализацию Roborock API на языке Go. И ещё полдня на реализацию WebRTC-клиента.

Одним из плюсов было то, что пылесос находился за тысячи километров от меня и можно было качественно отладить удалённое подключение.

Первая проблема была в обмене ICE-кандидатами. Если перестараться с асинхронным подключением WebRTC, кандидаты начнут прилетать ещё до того, как участники инициализируют соединение. Такие кандидаты будут проигнорированы.

Вторая проблема была интереснее. В сообществе разработчиков WebRTC начали замечать, что в некоторых регионах России мифическим образом нарушается процесс установки безопасного DTLS-соединения. Забавно, что первым проблему обнародовал и починил разработчик из Китая.

WebRTC Client

Расположение пылесоса за несколько тысяч километров было как плюсом, так и минусом. Робот постоянно издавал звуковой сигнал о начале видеосвязи. А для тестирования стабильной работы таких подключений приходилось делать очень много. Плюс владелец пылесоса находился в совершенно другом часовом поясе.

В поисках удобных вариантов отладки мне в голову пришла довольно банальная идея — реализовать возможность подключения из одного go2rtc к другому go2rtc по протоколу WebRTC. Тут я решил не изобретать велосипеды и поискать готовые стандарты.

В сообществе разработчиков WebRTC подсказали варианты:

  • WHEP — стандарт для видеоплееров (потребителей медиа);
  • WHIP — стандарт для Broadcaster Software (поставщиков медиа).

К сожалению, стандарты ещё не приняты. Но популярные стриминговые проекты уже начинают их внедрять.

В итоге в go2rtc версии 1.3.0 попали функции:

  1. Возможность забирать поток с стороннего ПО по стандарту WebRTC/WHEP;
  2. Возможность принимать входящий поток с стороннего ПО по стандарту WebRTC/WHIP. Её я тестировал на OBS Studio. К сожалению, ментейнеры проекта не хотят выпускать релиз с этой функцией до принятия WHIP-стандарта. Но благодаря функции автоматической сборки релизов на GitHub уже можно скачать готовую сборку OBS Studio с поддержкой WebRTC.

WebTorrent

В процессе изучения всего вышеописанного я наткнулся на ещё одно ответвление WebRTC. Это технология WebTorrent.

Классические Torrent-трекеры помогают Torrent-клиентам обмениваться своими IP-адресами. После чего участники подключаются друг к другу напрямую для передачи полезной информации.

WebTorrent-трекер работает по той же логике. Только клиентами являются обычные браузеры. Для подключения к трекеру используется протокол WebSocket. Для подключения к другим клиентам используется протокол WebRTC, для передачи данных — RTCDataChannel.

Обмениваться файлами по этому протоколу могут только браузеры и некоторые настольные клиенты с поддержкой WebTorrent. Их ещё называют гибридными клиентами, потому что они, как правило, поддерживают BitTorrent-протокол и могут работать одновременно в обоих сетях.

Так ко мне пришла идея использовать открытые WebTorrent-трекеры для реализации функции внешнего доступа к камерам.

Для доступа к потоку требуется знать логин и пароль. Логин используется, чтоб найти именно вашу камеру среди всех торрентов на трекере. Пароль используется для шифрованного обмена информацией о подключении с сервером go2rtc. Так, чтоб даже владельцы трекера не могли получить к ней доступ.

Клиент для подключения написан в виде небольшой HTML-странички с использованием GitHub Pages. Ссылки на трансляцию выглядят примерно так:

Современные браузеры не отправляют информацию после знака якоря в ссылке, так что логин и пароль не достанутся Гитхабу.

Go2rtc версии 1.3.0 позволяет быстро создавать и удалять случайные ссылки на трансляции. Такие ссылку будут работать до момента перезагрузки go2rtc. При желании можно прописать статические потоки в конфиге вручную.

Но и это ещё не всё. Ведь в новой версии go2rtc появился WebRTC-клиент. А значит, технологию WebTorrent можно использовать не только чтобы отдать поток, но и чтобы забрать удаленный поток назад в go2rtc.

Таким образом можно организовать подключение к камерам в закрытой удаленной сети. Бесплатно и безопасно.

Двухсторонний обмен

Хотя получение видео с пылесоса Roborock было написано всего за неделю, выпуск всего релиза занял немногим более месяца. Модель Roborock S7 MaxV поддерживала двустороннюю аудиосвязь. Никак нельзя было выпускать новый релиз без этой фичи.

Механизм стыковки медиапотоков внутри go2rtc является одной из самых сложных частей ядра проекта.

Когда у вас есть камера, которая только передает данные, тут нет ничего сложного. Вы просто читаете с неё пакеты в цикле и отправляете их тому, кто хочет получать эти данные. Например, браузеру. В этом случае камера является Producer (поставщиком данных), а браузер — Consumer (потребителем данных).

Но когда в камере появляется обратный канал (backchannel по терминологии ONVIF-стандарта) для передачи данных на динамик камеры, всё становится немного запутанней. Теперь браузер становится немного Producer и начинает слать данные с микрофона. А камера становится немного Consumer.

Начиная с версии 1.2.0, в go2rtc появилась функция стримить файлы и онлайн-аудио на устройства с поддержкой two way audio. При таком подключении камера вообще не будет являтся Producer, а будет лишь Consumer (потребителем).

Получается, в любой момент код, отвечающий за протоколы RTSP или WebRTC, может выступать как в роли получателя данных, так и в роли отправителя данных.

А ещё каждый из этих протоколов может быть как активным участником соединения (клиентом), так и пассивным участником соединения (сервером).

А ещё в протоколе RTSP принято указывать лишь одно направление для канала передачи медиа: только на приём — recvonly, только на передачу — sendonly. А вот в WebRTC довольно распространена передача в двух направлениях — sendrecv. Это довольно вредно для работы с камерами, потому что часто встречается, что камера передает звук в одном кодеке, а вот получает звук в другом кодеке.

В итоге при попытке отправить звук из браузера в пылесос на стыке двух подключений WebRTC внутри go2rtc я просто запутался в собственном коде. В результате чего взял паузу в пару недель и переписал ядро проекта.

Раньше за передачу медиаданных отвечал класс Track. Активный участник (producer) отдавал треки функцией GetTrack, а пассивный участник (consumer) подключал их к себе функцией AddTrack. При этом backchannel Track от активного участника не генерировал данные, а настраивался на их получение. Это очень путало и усложняло отладку в многофункциональных модулях вроде RTSP и WebRTC.

В новой версии класс Track был заменён классами Receiver (тот, кто получает данные от поставщика) и Sender (тот, кто отправляет данные потребителю). Функция GetTrack теперь стала создавать только Receiver-ов. Функция AddTrack стала принимать на вход этих Receiver-ов и подключать их к Sender-ам.

Интересный факт. Одного Receiver можно подключить к нескольким Sender. Эта функция активно используется, если у вас бюджетная камера. Они обычно не выдерживают одновременного подключения нескольких потребителей. И в этом случае go2rtc может выступать в роли прокси-балансировщика.

В случае backchannel к одному Sender можно подключить несколько Receiver. Например, если у вас есть активное подключение к камере с включенной двухсторонней связью, камера не даст выполнить второе подключение с включенным backchannel. А вот новая архитектура go2rtc позволяет обойти это ограничение.

Итоги

  • WebRTC можно использовать для стриминга видео с камер с задержкой менее 0.5 секунды.
  • WebRTC можно использовать не только в браузере, но и на серверах и на IoT-устройствах (например, пылесосах).
  • Можно как получать видео по протоколу WHEP, так и отправлять видео по протоколу WHIP.
  • Можно использовать протокол WebTorrent, чтоб расшарить WebRTC-поток, не открывая при этом публичный доступ к своему компьютеру или серверу.
  • Можно использовать протокол WebTorrent, чтоб забрать поток, находящийся в закрытой удалённой сети.
  • Можно превратить любой браузер PC или смартфона в IP-камеру (видеоняня в пару кликов).
  • WebRTC удобно использовать для two way audio связи.
  • В браузере Safari в WebRTC можно использовать кодек H265.

IoT-устройства не обязательно как-то взламывать, паять и прошивать, чтоб использовать их в своих домашних проектах. Все эти интеграции работают с оригинальной заводской прошивкой устройств: Sonoff, Xiaomi, Яндекс, TP-Link, Roborock.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *