Здравствуйте.
Прошу помочь с поиском решения или разобраться с его возможными вариантами.
Итак, есть некое устройство с камерами, которое подключается (tcp) к backend-серверу (node.js). Устройство может передавать видео-поток (raw h264), выглядит это примерно так:
- устройство получило команду от сервера (допустим, "start live stream");
- и шлёт видео-поток с камеры на сервер, в виде сырых данных (hex). Пример:
server.on('data', data => {
// data - это и есть часть данных видео-потока.
});
- далее, сервер обрабатывает полученные данные - парсит, сохраняет во временный массив. (Необходимо для определения, достаточно ли информации пришло, чтобы можно было её как-то дальше обрабатывать/отправлять куда-то ещё, здесь всё согласно специфике прошивки устройства);
- Дальше, когда парсер говорит что информации достаточно ( parser.emit('data', streamData) ) - её можно и нужно куда-то отправлять, чтобы её можно было увидеть в браузере (<video>), то есть надо отправить на rtmp, например с помощью ffmpeg. В качестве rtmp сервера использую nginx-rtmp-module.
(Запустить ffmpeg из node.js не проблема, и если я буду транслировать на rtmp какой-то видеофайл, что есть на диске - всё будет работать. Но у меня нет никакого файла.)
В качестве альтернативного решения, я хотел найти клиент rtmp для node, чтобы подключиться напрямую и отправить данные, но рабочих/документированных модулей не нашёл. Таким образом, хочу разобраться как решить задачу используя ffmpeg.
Рассматривал ещё такой вариант, ради тестов: мой парсер сохраняет полученную и обработанную информацию в файл на диске (video.h264), а потом запускается ffmpeg и с этого файла транслирует на rtmp - работает, без ошибок и warning's. Но такой вариант не может быть решением, просто тест.
---
Мне нужно с помощью ffmpeg отправить мои собранные livestream-данные ( Buffer.concat([dataChunk_1, dataChunk_N, ]) ) на rtmp. Но что указывать в качестве INPUT для ffmpeg ?)
Возможно есть другие идеи/решения ?