Node.js Видео поток WEBM Live Feed на HTML - PullRequest
0 голосов
/ 14 июля 2020

У меня есть node.js сервер, который получает небольшие пакеты двоичных данных BLOB-объектов WEBM через socket.io с веб-страницы!

(navigator.mediaDevices.getUserMedia -> stream -> mediaRecorder.ondataavailable -> DATA. Я отправляю эти ДАННЫЕ обратно на сервер. Это включает метку времени и двоичные данные).

Как мне передать их обратно по HTTP-запросу в бесконечном прямом потоке, который может быть использован HTML веб-страницу, просто добавив URL-адрес в тег VIDEO?

Вот так:

<video src=".../video" autoplay></video>

Я хочу создать поток видео в реальном времени, который в основном транслирует обратно мою веб-камеру на html страницу, но я немного потерялся, как мне это сделать. Пожалуйста помоги. Спасибо

Изменить: я использую express. js для обслуживания приложения.

Я просто не уверен, что мне нужно делать на сервере с приближающимися двоичными BLOB-объектами webm для правильного обслуживания для использования страницей html на конечной точке / видео

Пожалуйста, помогите :)

1 Ответ

0 голосов
/ 26 июля 2020

После многих неудачных попыток я наконец смог построить то, что пытался:

Потоковое видео в реальном времени через socket.io.

Итак, что я делал, было:

  1. Start getUserMedia , чтобы запустить веб-камеру
  2. Запустить mediaRecorder установить интервалы записи 100 мс
  3. на каждом доступном фрагменте передать событие через socket.io на сервер с большим двоичным объектом, преобразованным в строку base64
  4. Сервер отправляет обратно преобразованный base64 фрагмент видео длиной 100 мс обратно во все подключенные сокеты.
  5. Веб-страница получает фрагмент и использует mediaSource и sourceBuffer для добавления фрагмента в буфер
  6. Прикрепите источник мультимедиа к видеоэлементу и VOILA :) видео будет воспроизводиться ПЛАВНО. Пока вы прикрепляете каждый фрагмент по порядку и не пропускаете фрагменты (в этом случае воспроизведение прекращается)

И ЭТО РАБОТАЕТ! НО было невозможно использовать ..: (

Проблема в том, что процесс mediaRecorder интенсивно использует ЦП, а загрузка ЦП страницы подскакивает до 15%, и весь процесс был СЛИШКОМ МЕДЛЕННЫМ.

Было 2,5 секунды задержка для видеопотока, проходящего через socket.io, и практически такая же, ДАЖЕ если НЕ отправлять капли через socket.io, а отображать их на той же странице.

Ооочень я обнаружил, что это работает, но НЕ работают для надежного сервиса видеочата. Он просто не предназначен для этого. Для записи видео с веб-камеры для последующего воспроизведения mediaRecorder может работать, но не для потоковой передачи в реальном времени.

Я думаю, для потоковой передачи в реальном времени нет никакого способа обойтись без WebRT C, вы ДОЛЖНЫ использовать WebRT C для отправки видеопотока на одноранговый узел или на сервер для отправки другим узлам. НЕ ПЫТАЙТЕСЬ создать службу видеочата в реальном времени с помощью mediaRecorder . Вы только потрачу впустую ваше время. Я сделал это для вас :) так что вам не обязательно. Просто загляните в webRT C. Возможно, вам придется использовать сервер TURN. Twilio предоставляет серверы STUN и TURN, но это стоит денег. НО вы можете запустить свой собственный сервер TURN с Coturn и другими службами, но я еще не рассмотрел это.

Спасибо. Надеюсь, это кому-то поможет.

...