Показать сообщение отдельно
  #1 (permalink)  
Старый 10.09.2019, 12:47
Новичок на форуме
Отправить личное сообщение для troublesMaker Посмотреть профиль Найти все сообщения от troublesMaker
 
Регистрация: 10.09.2019
Сообщений: 9

Работа с видео-потоком, ffmpeg
Здравствуйте.
Прошу помочь с поиском решения или разобраться с его возможными вариантами.

Итак, есть некое устройство с камерами, которое подключается (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 ?)

Возможно есть другие идеи/решения ?
Ответить с цитированием