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); } );