7 Способов Отображения Видео С Rtsp Ip-Камеры На Веб-Странице И 2 В Мобильном Приложении

В этой статье мы покажем 7 технологически различных способов отображения видеопотока с IP-камеры с поддержкой RTSP на веб-странице браузера.

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



Способ 1 — RTMP

Браузеры не поддерживают протокол RTMP, но его поддерживает старый добрый Flash Player, который хорошо работает, хотя и не во всех браузерах, и умеет отображать видеопоток.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

Код плеера в этом случае будет построен на Action Script 3 и будет выглядеть примерно так:

  
  
  
  
  
  
  
   

var nc:NetConnection = nc.connect(" rtmp://192.168.88.59/live",obj ); var subscribeStream:NetStream = new NetStream(nc); subscribeStream.play(" rtsp://192.168.88.5/live.sdp ");

В этом примере: rtmp://192.168.88.59/live — это адрес промежуточного сервера, который будет принимать RTSP видеопоток с камеры и конвертировать его в RTMP rtsp://192.168.88.5/live.sdp — это RTSP-адрес самой камеры.

Доступна слегка дублированная версия кода плеера на Flex и AS3. Здесь .

Это выглядит так:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 2 — RTMP с оболочкой HTML5.

Желающих программировать на Action Script 3 становится все меньше.

Для этого был придуман специальный способ с помощью HTML5-обертки, который позволяет управлять RTMP-плеером из JavaScript. В этом случае флэшка загружается на HTML-страницу только для отображения картинки и вывода звука на динамики.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



var session = Flashphoner.createSession({urlServer:" wss://192.168.88.59:8443 "}); session.createStream({name:" rtsp://192.168.88.5/live.sdp ", display:myVideo }).

play();

Полный код игрока находится Здесь .

И это выглядит так:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Метод 3 — РТМФП

Протокол RTMFP также работает внутри флеш-плеера.

Разница с RTMP заключается в том, что RTMFP работает поверх протокола UDP и поэтому больше подходит для приема широковещательных сообщений с низкой задержкой.

Код плеера на AS3 в этом случае полностью идентичен тому, который используется в RTMP; В строке протокола подключения к серверу добавляется одна буква F.

var nc:NetConnection = nc.connect(" rtmfp://192.168.88.59/live",obj ); var subscribeStream:NetStream = new NetStream(nc); subscribeStream.play(" rtsp://192.168.88.5/live.sdp ");

Для порядка приведем скриншот с RTMFP

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 4 — RTMFP с оболочкой HTML5

Этот метод идентичен пункту 2, с той разницей, что при инициализации в JavaScript мы устанавливаем протокол RTMFP для использования в базовой флешке (swf-объекте).



Var session = Flashphoner.createSession({urlServer:" wss://192.168.88.59:8443 ", flashProto:"rtmfp"}); session.createStream({name:" rtsp://192.168.88.5/live.sdp ", display:myVideo }).

play();

Изображение игрока:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 5 — WebRTC

При этом Flash вообще не используется и видеопоток воспроизводится с помощью самого браузера, без использования сторонних плагинов.

Это также работает в Android Chrome и Android Firefox — мобильных браузерах, в которых не установлен Flash. WebRTC дает самую низкую задержку — менее 0,5 секунды.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

Код плеера тот же:

var session = Flashphoner.createSession({urlServer:" wss://192.168.88.59:8443 "}); session.createStream({name:" rtsp://192.168.88.5/live.sdp ", display:myVideo }).

play();

Поддержка WebRTC определяется автоматически, и если она поддерживается, поток воспроизводится через WebRTC.

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 6 — веб-сокеты

WebRTC и Flash поддерживают не все браузеры и платформы.

Например, браузер iOS Safari не поддерживает эти технологии.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

В iOS Safari вы можете доставлять видеопоток через транспорт Websocket (TCP-соединение между браузером и сервером).

В этот туннель можно завернуть видеопоток, преобразованный из RTSP. Как только двоичные данные поступят, их можно декодировать с помощью JavaScript и отобразить в элементе Canvas HTML5. Именно это делает плеер Websocket при запуске в браузере iOS Safari, и его код снаружи выглядит так же:

var session = Flashphoner.createSession({urlServer:" wss://192.168.88.59:8443 "}); session.createStream({name:" rtsp://192.168.88.5/live.sdp ", display:myVideo }).

play();

Это чем-то похоже на подход с флешкой, когда в HTML5 есть элемент swf. В данном случае под HTML5-страницей лежит не swf-объект, а JavaScript-приложение, которое перетягивает данные через веб-сокеты, декодирует их и в несколько потоков рисует на Canvas. Вот как выглядит RTSP-поток на Canvas в браузере iOS Safari.

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Метод 7 — ЗОЖ

При конвертации RTSP в HLS видеопоток разбивается на сегменты, которые безопасно загружаются с сервера и отображаются в HLS-плеере.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

Мы используем video.js в качестве проигрывателя HLS. Код плеера можно скачать Здесь .

Как выглядит плеер:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 8 — приложение для Android, WebRTC

Приложение принимает поток с сервера через WebRTC. Задача сервера в данном случае — преобразовать RTSP в WebRTC и передать его мобильному приложению.



7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

Java-код плеера для Android находится Здесь и выглядит так:

SessionOptions sessionOptions = new SessionOptions(" wss://192.168.88.59:8443 "); Session session = Flashphoner.createSession(sessionOptions); StreamOptions streamOptions = new StreamOptions(" rtsp://192.168.88.5/live.sdp "); Stream playStream = session.createStream(streamOptions); playStream.play();

Тестовое приложение мобильного плеера можно установить с сайта Гугл игры и загрузите исходные коды приложения Здесь .

Вот как выглядит воспроизведение потока RTSP через WebRTC на планшете Asus Android:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Способ 9 — приложение для iOS, WebRTC

Приложение, как и в случае с Android, принимает поток с сервера через WebRTC.

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

Код проигрывателя Objective-C выглядит так:

FPWCSApi2SessionOptions *options = [[FPWCSApi2SessionOptions alloc] init]; options.urlServer = @" wss://192.168.88.59:8443 "; FPWCSApi2Session *session = [FPWCSApi2 createSession:options error:&error]; FPWCSApi2StreamOptions *options = [[FPWCSApi2StreamOptions alloc] init]; options.name = @" rtsp://192.168.88.5/live.sdp "; FPWCSApi2Stream *stream = [session createStream:options error:nil ]; stream play:&error;

Вы можете скачать исходный код плеера для iOS Здесь .

А из App Store вы можете установить тестовое приложение , который использует фрагменты кода, показанные выше.

Его работа с RTSP-потоком выглядит так:

7 способов отображения видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении



Результаты

Подведем итоги и объединим результаты в таблицу:
Метод отображения Приложение Задерживать
1 RTMP Там, где важно использование устаревших версий — Flash-клиент, Flex или Adobe Air середина
2 РТМП + HTML5 В браузерах IE, Edge, Mac Safari, если там установлен Flash Player середина
3 РТМФП Там, где важно использовать устаревшие версии — флэш-клиент, Flex или Adobe Air и важна низкая задержка.

низкий
4 РТМФП + HTML5 В браузерах IE, Edge, Mac Safari, если установлен Flash Player и важна низкая задержка.

низкий
5 ВебRTC В браузерах Chrome, Firefox, Opera для настольных компьютеров и мобильных браузерах для Android, где важна задержка в реальном времени.

в реальном времени
6 Вебсокет В браузерах, где нет Flash и WebRTC, но нужна средняя или низкая задержка.

середина
7 Х.

Л.

С.

Во всех браузерах.

Где промедление не имеет значения.

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

в реальном времени
9 iOS-приложение, WebRTC В нативных мобильных приложениях для iOS, где требуется задержка в реальном времени.

в реальном времени
Для тестирования мы использовали Web Call Server 5, который преобразует RTSP-поток для распространения по 9 перечисленным направлениям.



Ссылки

Веб-сервер вызовов 5 — сервер для раздачи RTSP потока Флэш-стриминг — пример swf-приложения, воспроизводящего потоки через RTMP и RTMFP. Способы 1 и 3. Источник — исходный код SWF-приложения на Flex/AS3. Игрок — пример веб-приложения, воспроизводящего RTSP-поток через RTMP, RTMFP, WebRTC, Websocket. Методы 2,4,5,6. Источник — исходный код веб-плеера.

HLS-плеер — пример веб-плеера, играющего в HLS. Способ 7. Источник — Исходный код HLS-плеера.

Android-плеер WebRTC — пример мобильного приложения, воспроизводящего поток через WebRTC. Способ 8. Источник — исходный код мобильного приложения.

iOS-плеер WebRTC — пример мобильного приложения, воспроизводящего поток WebRTC. Способ 9. Источник — исходный код мобильного приложения.

Теги: #rtsp #ip-камера #потоковая передача #живое видео #браузер #Android #iOS #webrtc #rtmp #rtmfp #websocket #hls #latency #latency #flash #Action Script 3 #objective-c #Разработка веб-сайтов #Разработка для iOS # Разработка мобильных приложений #Разработка Android

Вместе с данным постом часто просматривают: