javascript - MediaSource randomly stops video -


i working on project want to

getusermedia -> mediarecorder -> socketio -> mediasource appendbuffer 

i got work, after few seconds randomly stops.

i know webrtc, in project working on it's based on environment version of chrome embedded doesn't support webrtc.

server:

'use strict';  const io = require('socket.io')();  io.on('connection', (socket) => {   console.log('connection');    socket.on('stream', (data) => {     socket.emit('stream', data);   }); });  io.listen(3001); 

client:

//codecs var source_buffer_mime = 'video/webm; codecs="vp8, vorbis"'; var recorder_mime      = 'video/webm; codecs="vp8"';  //here buffers stored when sourcebuffer still 'updating' var buffers            = [];  //video1: directly user media var $video1      = document.getelementbyid('video1');  //video2: using mediasource var $video2      = document.getelementbyid('video2'); var mediasource  = new mediasource(); var sourcebuffer = null; $video2.src      = window.url.createobjecturl(mediasource); $video2.play();  mediasource.addeventlistener('sourceopen',  function(e) {   sourcebuffer = mediasource.addsourcebuffer(source_buffer_mime); });  //start socketio connection socket = io.connect('http://localhost:3001/');  socket.on('connect', function() {   console.log('connected');   socket.on('stream', function(data) {     if (sourcebuffer !== null) {       console.count('received');       buffers.unshift(new uint8array(data));       append();     }   }); });  function append() {   if (buffers.length && mediasource.readystate == "open" &&       (sourcebuffer !== null && !sourcebuffer.updating)) {     var buffer = buffers[0];     console.log(buffer.bytelength);     buffers.shift();     sourcebuffer.appendbuffer(buffer);   } }  navigator.webkitgetusermedia({audio: true, video: true},   function(stream) {     $video1.src = window.url.createobjecturl(stream);     $video1.play();      //extract data     recorder = new mediarecorder(stream, { mimetype : recorder_mime });     recorder.ondataavailable = function(e) {       // recorder.pause();       if (e.data && e.data.size > 0) {         socket.emit('stream', e.data);       }     };     recorder.start(500);     //recorder.start(5000); //this causes pause right after next batch appended   },   function(err) {     console.log(err);   } );