предисловие
Книга является продолжением предыдущего урока.В последнем уроке мы реализовали использование FFmpeg для перекодирования rtsp в rtmp, распространения его с помощью nginx и воспроизведения видео на странице. Но у rtmp есть и недостатки, такие как:
- Видеопоток RTMP может быть воспроизведен только на основе Flash, поэтому ваш компьютер должен установить вспышку, но текущие основные браузеры планируют больше не поддерживать вспышку
- Воспроизведение видеопотока rtmp по-прежнему имеет задержку в 2-3 секунды, что не идеально для системы сигнализации в реальном времени.
Затем этот учебник создаст полную видеосистему и, кстати, оптимизирует эти две проблемы.
адрес проекта
Требования к проекту
- Многоплатформенное воспроизведение видео IPC в реальном времени
- Воспроизведение истории видео
- PTZ-управление
- Опрос задач транскодирования для предотвращения отключения видео
- Node.js реализует взаимодействие интерфейса
Технологическая архитектура
стек навыков
внешний интерфейс:
- 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 к веб-сокету вызовет переполнение памяти, и после обновления оно будет отображаться нормально.
- Видео без звука
Наконец, если требования проекта не требуют видео и звука, это решение все еще очень хорошо. У него очень хорошая совместимость. В принципе нет ограничений на мобильный терминал и ПК-терминал. Во-вторых, задержка также идеальна. Ведь , после перекодирования он должен быть не так хорош, как исходное видео, но его время задержки следует считать идеальным на данный момент.