Как заставить html5 проигрывать rtsp видеопоток без траты денег (вторая бомба)

JavaScript

предисловие

Книга является продолжением предыдущего урока.В последнем уроке мы реализовали использование FFmpeg для перекодирования rtsp в rtmp, распространения его с помощью nginx и воспроизведения видео на странице. Но у rtmp есть и недостатки, такие как:

  • Видеопоток RTMP может быть воспроизведен только на основе Flash, поэтому ваш компьютер должен установить вспышку, но текущие основные браузеры планируют больше не поддерживать вспышку
  • Воспроизведение видеопотока rtmp по-прежнему имеет задержку в 2-3 секунды, что не идеально для системы сигнализации в реальном времени.

Затем этот учебник создаст полную видеосистему и, кстати, оптимизирует эти две проблемы.

адрес проекта

GitHub.com/Джек летать л/нет…

Требования к проекту

  • Многоплатформенное воспроизведение видео IPC в реальном времени
  • Воспроизведение истории видео
  • PTZ-управление
  • Опрос задач транскодирования для предотвращения отключения видео
  • Node.js реализует взаимодействие интерфейса

Технологическая архитектура

В прошлом выпуске я уже рассказывал о том, как через скрипты создавать команды транскодирования FFmpeg, это решение всё та же рутина, но не распространяется через nginx через rtmp. После транскодирования через узел создается соединение через веб-сокет, клиент подключается, и видео отображается динамически.

стек навыков

внешний интерфейс:

  • jsmpeg.js (подключить wbesocket, отрисовать видеоизображение)

Сервер (узел):

  • экспресс (статический сервис, обработка интерфейса)
  • body-parser (интерфейс обработки для получения данных)
  • node-rtsp-stream-jsmpeg (выдает команды FFmpeg для создания сервера веб-сокетов)
  • child_process (команда запуска сценария оболочки)

разное:

  • FFmpeg (транскодирование видеопотока)
  • pm2 (демон процесса узла)
  • Программа управления PTZ (через вторичную разработку sdk, предоставленную производителем видео, вызывается через ajax)

Сервер

  • Создайте статический сервер с Node.js

  • Получение параметров и обработка междоменных данных

  • корпус пост-интерфейса

  • Node.js вызывает сценарий оболочки (child_process)

  • Начните транскодирование, чтобы создать сервер веб-сайта

  • Регулярно убивайте процесс FFmpeg, перезапускайте вебсокет, чтобы видео не отключалось

клиент

Используйте jsmpeg.js, чтобы указать адрес веб-сокета и dom, чтобы играть счастливо!

демон процесса pm2

  • узел установки Linux и npm
  • npm install pm2 -g
  • pm2 start xx.js (старт)
  • pm2 стоп xx.js (стоп)
  • список pm2 (список услуг)
  • Журнал pm2 (вывод журнала)
  • pm2 monit (мониторинг службы)

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

Взгляните на эффект

Суммировать

На данный момент мы реализовали простую видеоплатформу с полным стеком узлов, преимуществами которой являются:

  • В то же время предварительно просматривайте видео IPC и видео от Hikvision, Dahua и т. д., которые могут создавать потоки rtsp.
  • Не нужно устанавливать никаких плагинов
  • Не использует вспышку для воспроизведения видео
  • Задержка видео уменьшена до 1 с

Конечно, есть и некоторые известные проблемы:

  • При перекодировании основного потока потребление производительности огромно (загрузка каждого логического процессора достигает примерно 120, поэтому попробуйте использовать подпоток для перекодирования, а потребление производительности составляет около 20)
  • Транскодирование исторического видеопотока поддерживает только Hikvision (некоторые nvr не поддерживают исторический видеовыход rtsp)
  • Частое переключение интерфейсного подключения jsmpeg к веб-сокету вызовет переполнение памяти, и после обновления оно будет отображаться нормально.
  • Видео без звука

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