Потоковое видео с фрагментированных данных на конечную точку на сервере Node - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать приложение, в котором я могу отправлять видео с веб-камеры из браузера MediaRecorder через Websocket на сервер узлов, который будет хранить фрагментированные данные в памяти и обрабатывать их через обработчик конечных точек.

Iможет получать данные, создавать поток Passthrough и обслуживать конечную точку, но отображаемый видеопроигрыватель html5 ничего не отображает.Я не уверен, где я ошибся.

клиент:

 serverVideoStreamConnection  = new WebSocket('wss://' + window.location.hostname + ':8443/');
  serverVideoStreamConnection.binaryType = "arraybuffer";

  if (navigator.mediaDevices.getUserMedia) {
    navigator.mediaDevices.getUserMedia(constraints).then(recordStream).catch(errorHandler);
  } else {
    alert('Your browser does not support getUserMedia API');
  }
}

function recordStream(stream) {

  console.log("Started recording")

  mediaRecorder = new MediaRecorder(stream);
  mediaRecorder.ondataavailable = handleDataAvailable;
  mediaRecorder.start(10);

  function handleDataAvailable(event) {
    if (event.data.size > 0) {
      serverVideoStreamConnection.send(event.data);
    } else {
      // ...
      console.log("Data not available")
    }
  }

сервер:

let video = new PassThrough();

wss.on('connection', function (ws) {

  ws.on('message', function (message) {
    // Broadcast any received message to all clients


    if (typeof message !== 'string') {
       video.write(new Buffer.from(message));        
    } else {
      wss.broadcast(message);
    }
}

server.get('/video', handleVideo)

function handleVideo(request, response) {
  const header = {
    'Content-Type': 'video/mp4',
    "Accept-Ranges": "bytes",
  };

  response.writeHead(206, header);
  video.pipe(response);
}
...