Представьте: у вас есть IP-камера, и вы хотите показать видео с неё прямо на сайте. Казалось бы, что проще? Но тут начинается магия — браузеры не всегда понимают формат видео с камеры, трафик может улетать в космос, а сервер — превращаться в пылающий факел. В этой статье я расскажу, как решить эти проблемы, чтобы видео с камеры шло плавно, просто и без лишних затрат.


Почему видео с камеры не показывается на сайте

Суть проблемы — IP-камера выдаёт видео в формате, который браузер не всегда может воспроизвести. Например, RTSP-поток — это как секретный язык, который понимают только специальные программы, но не браузеры. Попытка просто вставить ссылку на камеру в сайт — как попытка показать картинку, нарисованную на другом языке.

Ещё одна беда — трафик. Если сервер постоянно захватывает поток с камеры, даже когда никто не смотрит, интернет-канал быстро забьётся, а счёт за трафик вырастет, как на дрожжах.


Как решить проблему с видео и трафиком

1. Правильный формат видео для браузера

Браузеры любят MP4 с кодеком H.264. Но камера отдаёт RTSP. Значит, нужен посредник — программа, которая возьмёт поток с камеры, перекодирует его и отдаст браузеру понятный MP4.

Здесь на сцену выходит FFmpeg — волшебная программа, которая умеет перекодировать видео в нужный формат и даже делать это в реальном времени.

2. Экономия трафика — видео только для зрителей

Чтобы не гонять поток, когда никто не смотрит, нужно сделать так, чтобы сервер запускал трансляцию только при подключении зрителя. Это можно реализовать с помощью скрипта на PHP, который запускает FFmpeg только по запросу браузера.

3. Поддержка разных браузеров

Google Chrome и Mozilla Firefox отлично работают с H.264 в MP4. Safari — капризный, иногда не воспроизводит фрагментированные MP4. Решение — сначала показывать простой MJPEG-поток (картинки подряд), а потом переключать на MP4, когда он загрузится.


Практический пример: как сделать трансляцию с IP-камеры на сайт

Допустим, у вас есть IP-камера с RTSP-ссылкой:

rtsp://192.168.1.10:554/stream1

Шаги

  • Установите на сервер FFmpeg и PHP.
  • Создайте PHP-скрипт, который запускает FFmpeg с параметрами:
ffmpeg -rtsp_transport tcp -i "rtsp://192.168.1.10:554/stream1" -c copy -an -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov -f mp4 pipe:
  • В PHP отправьте заголовки для видео:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Pragma: no-cache");
header('Content-Type: video/mp4');
passthru("ffmpeg ...");
  • Вставьте на сайт тег <video> с ссылкой на этот PHP-скрипт.

Что происходит

Когда зритель открывает страницу, PHP запускает FFmpeg, который берёт поток с камеры, перекодирует и отдаёт браузеру MP4. Если зрителей нет — поток не гоняется, трафик экономится.


Как избежать проблем с Safari и другими браузерами

Safari не любит фрагментированные MP4. Чтобы видео не моргало и не зависало, можно:

  • Сначала показывать поток MJPEG — это последовательность JPEG-картинок, которые поддерживаются всеми браузерами.
  • Когда MP4 загрузится, переключать видео на него.
  • Для этого в скрипте можно реализовать логику переключения.

Как получить RTSP-ссылку с камеры

Не всегда она лежит на поверхности. Вот несколько советов:

  • Используйте программу Onvif Device Manager — она покажет RTSP-ссылки камер в вашей сети.
  • Проверьте открытые порты камеры с помощью nmap — обычно RTSP работает на порту 554.
  • Если камера требует авторизацию, RTSP-ссылка будет содержать логин и пароль, например:
rtsp://user:password@192.168.1.10:554/stream1

Безопасность — не забываем про неё

Если трансляция публичная, любой может вытащить RTSP-ссылку и получить доступ к камере. Чтобы избежать этого:

  • Используйте отдельную учётную запись для RTSP с ограниченными правами.
  • Прячьте RTSP-ссылки за сервером, не давая прямого доступа.
  • Используйте VPN для связи камер и сервера.
  • В скрипте задайте секретный ключ, чтобы контролировать доступ.

Таблица сравнения форматов видео для браузеров

Формат Поддержка браузеров Плюсы Минусы
MP4 (H.264) Chrome, Firefox, Edge, Safari (частично) Высокое качество, низкий трафик Safari капризен к фрагментированным MP4
MJPEG Все браузеры Простота, совместимость Большой размер файлов, высокий трафик
WEBM Chrome, Firefox Открытый формат, хорошее качество Не поддерживается Safari
OGV Chrome, Firefox Открытый формат Низкая популярность, качество

Дополнительные советы

  • Если у вас слабый интернет-канал, ограничьте качество видео в FFmpeg, чтобы снизить трафик.
  • Используйте параметр -t в FFmpeg, чтобы ограничить длительность сессии.
  • Для NAT и роутеров используйте -rtsp_transport tcp, чтобы не пробрасывать дополнительные порты.
  • Для удобства создайте генератор ссылок на камеры, чтобы быстро вставлять их на сайт.

Итог

Вывести видео с IP-камеры на сайт — задача решаемая. Главное — понять, что браузеры не любят RTSP напрямую, а любят MP4 и другие форматы. FFmpeg — ваш лучший друг в этом деле. С помощью простого PHP-скрипта можно запускать трансляцию только при наличии зрителей, экономя трафик и ресурсы сервера.

Не бойтесь экспериментировать с форматами и настройками. Помните, что безопасность — это не просто слово, а залог спокойствия. И пусть ваши камеры радуют глаз, а сайт — посетителей!


Если хотите, могу помочь с примером скрипта или настройкой сервера — но это уже другая история. А пока — дерзайте!