javascript - Streaming microphone through sockets using socket IO and Node JS -
i making application want user use mic (on phone) , able talk each other in game lobby. however, has proven more difficult.
i using node js socket io , socket io stream
on client using audio api take microphones input ( not worried because going make native ios app)
navigator.getusermedia = ( navigator.getusermedia || navigator.webkitgetusermedia || navigator.mozgetusermedia || navigator.msgetusermedia); if (navigator.getusermedia) { navigator.getusermedia ( // constraints { video: false, audio: true }, function(localmediastream) { var video = document.queryselector('audio'); video.src = window.url.createobjecturl(localmediastream); lcm = localmediastream; var audiocontext = window.audiocontext; var context = new audiocontext(); var audioinput = context.createmediastreamsource(localmediastream); var buffersize = 2048; // create javascript node var recorder = context.createscriptprocessor(buffersize, 1, 1); // specify processing function recorder.onaudioprocess = recorderprocess; // connect stream our recorder audioinput.connect(recorder); // connect our recorder previous destination recorder.connect(context.destination); }, // errorcallback function(err) { console.log("the following error occured: " + err); $("video").remove(); alert("@#"); } ); } else { console.log("getusermedia not supported"); } function recorderprocess(e) { var left = e.inputbuffer.getchanneldata(0); window.stream.write(convertfloat32toint16(left)); //var f = $("#aud").attr("src"); var src = window.url.createobjecturl(lcm); ss(socket).emit('file', src, {size: src.size}); ss.createblobreadstream(src).pipe(window.stream); //ss.createreadstream(f).pipe(widnow.stream); } function convertfloat32toint16(buffer) { l = buffer.length; buf = new int16array(l); while (l--) { buf[l] = math.min(1, buffer[l])*0x7fff; } return buf.buffer; } }); ss(socket).on('back', function(stream, data) { //console.log(stream); var video = document.queryselector('audio'); video.src = window.url.createobjecturl(stream); console.log("getting mic data"); }); i can listen self speak on microphone. using stream socket create blob upload server...
index.ss(socket).on('file', function(stream, data) { console.log("getting stream"); var filename = index.path.basename(data.name); //var myfs = index.fs.createwritestream(filename); var filewriter = new index.wav.filewriter('demo.wav', { channels: 1, samplerate: 48000, bitdepth: 16 }); var streams = index.ss.createstream(); streams.pipe(filewriter); index.ss(socket).emit('back', filewriter, {size: filewriter.size}); }); i cannot stream write file or temporary buffer, , stream client can play or "stream" audio real time. after while server crashes saying pipe not writable.
has else encountered this?
Comments
Post a Comment