Управляем чем угодно откуда угодно

Рулилка на WebRTC

Обсуждение клиентского ПО для доступа к виртурилке, управления и мониторинга

Re: Рулилка на WebRTC

Сообщение Footniko » 16 дек 2014, 20:17

Результаты некоторых наработок по WebRTC:



С виртурилки шлется поток HD видео, сжатое кодеком h.264 на сервер, который генерирует SDP Offer клиенту. Видео можно смотреть только браузером Firefox (пока) при включенном соответсвующем плагине. На веб-странице написан интерфейс для управления виртурилкой (html+javascript). Т.к. у меня старый андроид, на котором Firefox не поддерживает h264, видео отобразил на ноуте. Задержка видео около 0,2-0,3 сек., что неплохо, учитывая то, что все это дело h264 в браузерах еще не стабильное и большую часть с этой задержки вносит сам плагин h264 для Firefox.
Никаких проблем с NAT'ом нет. Никакого 3G, 4G, - обычный wifi-свисток. Виртурилка при включении стучится к веб серверу, о том, что она готова. Можно управлять откуда угодно (с интернета, естественно). Также с браузера можно отдавать поток с микрофона клиента на саму виртурилку, которая уже не захлебывается, при его приеме (как было с использованием RTMP).
Стоит еще сказать, что все експерименты делаются на последней прошивке с разогнанной частотой процессора. Сам h264 плагин работает не очень стабильно. Заметил, что в темноте начинаются тормоза видео, хотя при штатной частоте процессора такого вроде небыло, но при штатной частоте задержка чуть больше.

Чего еще не хватает, так это стриминга звука с микофона виртурилки на тот же WebRTC. WebRTC поддерживает два аудио кодека: opus и G.711. В спецификации к процессору DM365 (который стоит на v2r) написано, что он может жать звук кодеком G.711. В gstreamer за это отвечает элемент alawenc, который должен входить в состав gst-plugins-good. Но на виртурилке его почему-то нет. Прошу помощи в решении этого вопроса.
Footniko
 
Сообщения: 28
Зарегистрирован: 15 июл 2014, 14:12

Re: Рулилка на WebRTC

Сообщение eagafonov » 16 дек 2014, 22:45

*thumbup*

> С виртурилки шлется поток HD видео, сжатое кодеком h.264 на сервер, который генерирует SDP Offer клиенту

Я правильно понял, что на виртурилке нет WebRTC ендпоинта и RTP генерится промежуточным сервером?
Аватара пользователя
eagafonov
 
Сообщения: 175
Зарегистрирован: 18 сен 2013, 23:39
Откуда: Нижненовгородск

Re: Рулилка на WebRTC

Сообщение Footniko » 16 дек 2014, 23:42

eagafonov писал(а):*thumbup*

> С виртурилки шлется поток HD видео, сжатое кодеком h.264 на сервер, который генерирует SDP Offer клиенту

Я правильно понял, что на виртурилке нет WebRTC ендпоинта и RTP генерится промежуточным сервером?

Да, все верно. Виртурилка шлет rtp поток обычной цепочкой из gstreamer'а на небольшой медиа сервер, который является "прокладкой" между виртурилкой и браузером и генерит необходимый SDP для браузера. То есть, как-будто поток идет с этого сервера и браузер уже проводит манипуляции с этим сервером, как с WebRTC клиентом, а не с самой виртурилкой. Пока большой минус такого спряжения - нельзя отследить разрыв видео с виртурилки, дабы избежать возможных негативных последствий.
Footniko
 
Сообщения: 28
Зарегистрирован: 15 июл 2014, 14:12

Re: Рулилка на WebRTC

Сообщение Gol » 17 дек 2014, 00:33

Footniko писал(а):Да, все верно. Виртурилка шлет rtp поток обычной цепочкой из gstreamer'а на небольшой медиа сервер, который является "прокладкой" между виртурилкой и браузером и генерит необходимый SDP для браузера. То есть, как-будто поток идет с этого сервера и браузер уже проводит манипуляции с этим сервером, как с WebRTC клиентом, а не с самой виртурилкой. Пока большой минус такого спряжения - нельзя отследить разрыв видео с виртурилки, дабы избежать возможных негативных последствий.

Блин, я на заре ковыряний с виртурилкой делал стриминг как раз на промежуточный медиа-сервер где гстример перепаковывал (без перекодирования, само собой) в rtmp и отправлял в nginx-rtmp. Но отмёл этот вариант т.к. требуется промежуточный сервер. Получается, с WebRTC всё аналогично? Тогда таки остаюсь только на нативных приложениях с сырым RTP :-)
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Рулилка на WebRTC

Сообщение Gol » 17 дек 2014, 00:43

Footniko писал(а):Виртурилка при включении стучится к веб серверу, о том, что она готова. Можно управлять откуда угодно (с интернета, естественно).

А авторизация, идентификация потоков как происходит? На один сервер же можно с кучи виртурилок стримить. Как определяется где нужный поток? Опять же, откуда клиент получает поток, получается что с сервера? Тогда, если виртурилок стримящих куча, сервак должен принимать все потоки и отсылать клиенту, т.е. получается двойной лаг (от виртурилки до сервера, от сервера до клиента). А при сыром RTP напрямую, пир-ту-пир, а сервер только для координации.

Короче, тема интересная, но пока для масштабного применения, имхо, не подходит, только для одиночных экспериментов. А вот если как-то умудриться напрямую с виртурилки в браузер - тогда ништяг.
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Рулилка на WebRTC

Сообщение Footniko » 17 дек 2014, 01:18

Gol писал(а):Блин, я на заре ковыряний с виртурилкой делал стриминг как раз на промежуточный медиа-сервер где гстример перепаковывал (без перекодирования, само собой) в rtmp и отправлял в nginx-rtmp. Но отмёл этот вариант т.к. требуется промежуточный сервер. Получается, с WebRTC всё аналогично? Тогда таки остаюсь только на нативных приложениях с сырым RTP :-)

Есть вариант еще попробовать нативный webrtc на виртурилку кросскомпильнуть. Но там библиотек разных тьма, зависимостей и под arm5 пока этого не удалось никому сделать + оно там нестабильное все, допиливается разработчиками каждый день. Несколько недель моих мучений, кросскомпиляций, пыток не принесли желанного результата и я забил на это дело:( Возможно в будущем удастся это сделать

Gol писал(а):А авторизация, идентификация потоков как происходит? На один сервер же можно с кучи виртурилок стримить. Как определяется где нужный поток? Опять же, откуда клиент получает поток, получается что с сервера? Тогда, если виртурилок стримящих куча, сервак должен принимать все потоки и отсылать клиенту, т.е. получается двойной лаг (от виртурилки до сервера, от сервера до клиента). А при сыром RTP напрямую, пир-ту-пир, а сервер только для координации.


Идентификацией занимается сервер. Сервер тут, по сути, тоже для координации. Он всего лишь ретранслирует RTP поток и генерит нужные SDP подписи для спряжения с браузером по WebRTC. Никаких преобразований и т.п. он не производит. Это тоже самое, что если бы это происходило на виртурилке. Только у виртурилки нет таких возможностей.

Gol писал(а):Короче, тема интересная, но пока для масштабного применения, имхо, не подходит, только для одиночных экспериментов.

Да, для меня тема веба очень интересна. Все-таки веб - гораздо шире и перспективнее (особенно учитывая его динамику роста), чем нативные приложения. Но проблем пока много. Вот я и хочу сделать из этого более-менее стабильное решение. Есть несколько идей, глядишь стартап какой-нибудь получится :D
Footniko
 
Сообщения: 28
Зарегистрирован: 15 июл 2014, 14:12

Re: Рулилка на WebRTC

Сообщение realizator » 17 дек 2014, 22:39

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


В свежей прошивке камера работает в YUV а не в RAW, и настройки регистров другие. Похоже что сейчас при слабом освещении камера переходит в режим долгой выдержки и сама снижает FPS чтобы вытянуть яркость.
Аватара пользователя
realizator
virt2real team
 
Сообщения: 641
Зарегистрирован: 17 фев 2012, 23:18

Пред.

Вернуться в Софт на управляющих устройствах (iOS, Android, Win/Mac/Linux)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2