Для организации трансляции видео с IP-видеокамеры на сайт или любой другой веб-ресурс существует много способов, например:
● использование On-Line сервисов трансляции (lideo.tv, boomstream.com и др.)
● использование коммерческих медиа-решений (Flash Media Server, Wowza Streaming Engine, Erlyvideo, Flashphoner), у каждого есть бесплатные версии с ограниченным функционалом;
● использование свободных медиа-решений (Nginx-RTMP и RED5).
Практически любая IP-камера использует протокол RTSP (Real Time Streaming Protocol — потоковый протокол реального времени, предназначенный для использования в системах, работающих с мультимедийными данными).
Но, все существующие браузеры, на сколько известно, не поддерживают RTSP, поэтому данный поток необходимо конвертировать в RTMP для браузера с помощью промежуточного сервера.
RTMP поток — чаще всего используется для трансляции видео с веб-камер и телевидения в реальном времени, иногда используется и для воспроизведения видеофайлов.
Для реализации трансляции с IP-камеры на сайт потребуется:
● подготовленный виртуальный или физический сервер с любым установленным Linux;
● Java OpenJDK;
● FFmpeg версии 3 или 4;
● Медиа-сервер RED5.
- Так как RED5 основан на Java, то установим Java OpenJDK (на примере openSUSE):
zypper install java-1_8_0-openjdk java-1_8_0-openjdk-accessibility java-1_8_0-openjdk-plugin java-1_8_0-openjdk-demo java-1_8_0-openjdk-devel java-1_8_0-openjdk-src
Проверим, доступны ли данные команды в терминале javac, jar, java
Примечание: Как выяснилось на практике, RED5 не работает с последними версиями Oracle Java JDK, поэтому лучше использовать OpenJDK.
2. Скачиваем и устанавливаем медиа-сервер RED5:
wget -P /куда/скачиваем/ —no-cookies —no-check-certificate https://github.com/Red5/red5-server/releases/download/v1.0.10-M9/red5-server-1.0.10-M9.tar.gz
cd /куда/скачали/
tar -xvzf red5-server-1.0.10-M9.tar.gz
Запуск сервера:
cd /путь/red5-server/
./red5.sh
Остановить сервер:
./red5-shutdown.sh
Проверка работоспособности, в браузере зайти на адрес http://localhost:5080
Желательно установить DEMO Apps по адресу http://localhost:5080/installer/
3. Установка и проверка FFmpeg:
zypper install ffmpeg ffmpeg-devel
Как правило, в IP-камерах есть , как минимум, два потока для трансляции: основной и альтернативный. Перед тестированием FFmpeg необходимо обратиться к документации камеры и настроить потоки (кодек, разрешение, битрейт, частота кадров), а главное — форма запроса RTSP потока с авторизацией.
К примеру, имеется камера Beward серии B27xxxx, согласно информации с сайта производителя форма запроса RTSP:
rtsp://admin:password@<IP адрес>:<порт>/av<номер_канала>_<номер_потока>
Тест FFmpeg:
ffmpeg -i «rtsp://admin:admin@192.170.5.233:554/av0_0»
Данная команда должна вывести следующее:

Также, можно записать тестовый файл .FLV
ffmpeg -rtsp_transport tcp -i rtsp://admin:admin@192.170.5.233:554/av0_0 -map 0 -c copy -f flv /tmp/test.flv
4. Преобразование RTSP в RTMP и вывод в браузер:
Когда все готово, запускаем RED5 и FFmpeg:
ffmpeg -rtsp_transport tcp -i rtsp://admin:admin@192.170.5.233:554/av0_1 -f flv -r 25 -s 960×528 -an «rtmp://localhost:1935/live/cam1» -nostdin -nostats </dev/null >/dev/null 2>&1 &
-rtsp_transport tcp — использование основного протокола для обращения к камере (TCP или UDP);
av0_1 — использование альтернативного потока в камере Beward (av0_0 — основной, av0_1 — альтернативный);
-f flv — формат видео;
-r 25 — частота кадров;
-s 960×528 — разрешение потока видео;
-nostdin -nostats </dev/null >/dev/null 2>&1 & — для запуска FFmpeg в фоновом режиме (обязательно указать).
Для воспроизведения RTMP потока в браузере необходим плеер. На данный момент существуют различные плееры основанные на технологии Flash и/или HTML5.
Один из них Flow Player. Скачать: http://a-ec.name/files/flowplayer.zip
Вставляем код плеера в веб-страницу:
<html>
<head>
<script type=»text/javascript» src=»flowplayer-3.2.13.min.js»></script>
<!— player skin —>
<link rel=»stylesheet» type=»text/css» href=»skin/minimalist.css»>
<script type=»text/javascript» src=»jquery.min.js»></script>
</head>
<body>
<DIV class=»flowplayer» data-swf=»flowplayer-3.2.17.swf»
style=»
display:block;
width:604px;
height:323px» id=»player»
></DIV>
<script>
$f(«player», «flowplayer-3.2.17.swf», {
clip: {
url: ‘rtmp://192.168.0.50:1935/live/cam1’,
live: true,
provider: ‘influxis’
},
plugins: {
influxis: {
url: ‘flowplayer.rtmp-3.2.13.swf’,
netConnectionUrl: ‘rtmp://192.168.0.50:1935/live/cam1’
}
}
});
</script>
</body>
</html>