将getUserMediastream式传输到服务器

我是二进制数据和getUserMedia的新手,如何将getUserMedia(video/audio)stream式传输到服务器,然后为其他连接准备stream(video/audio)?

我最初的想法是通过websockets发送数据,然后将数据写入文件(mp4),如下所示:

getUserMedia -->(websockets)--> server -->(file.mp4)--> video.src

我一直在看MediaStreamRecorder ,我可以像这样发送一个缓冲区:

 multiStreamRecorder.ondataavailable = function (blobs) { socket.emit('blobs', blobs) }; 

在我得到的服务器上

 { audio: <Buffer 52 49 46 46 2c 10 04 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 01 00 44 ac 00 00 10 b1 02 00 02 00 10 00 64 61 74 61 00 10 04 00 f8 ff 04 00 0d 00 ... >, video: <Buffer 1a 45 df a3 40 20 42 86 81 01 42 f7 81 01 42 f2 81 04 42 f3 81 08 42 82 40 04 77 65 62 6d 42 87 81 02 42 85 81 02 18 53 80 67 10 0a 41 54 15 49 a9 66 ... >, onDataAvailableEventFired: true } 

现在我想我应该把它写到一个文件中,提供这个文件,然后从一个video元素的源文件请求这个文件。如果这一切都是正确的,那么我该如何将文件写入文件系统呢? 还是我做错了什么?

我明白WebRTC具有P2Pfunction,我将服务videostream〜50或更多的客户端,所以它不是一个选项。

更新与websocket解决scheme:

现在我正在通过websockets发回数据,如下所示:

 socket.on('blobs', function(data){ socket.emit('blobs', data) }) 

在客户端将其推入mediaSource ,然后使用timestampOffsetvideo元素保持平滑。

 var mediaSource = new MediaSource(), mediaBuffer, // init duration of 0 seems fine duration = 0; var video = $('video').get(0); video.src = window.URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen', function(e) { mediaBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vp8"') mediaBuffer.addEventListener('update', function() { // wait for mediaBuffer update to fire before setting the new duration duration = video.duration }); }, false); socket.on('blobs', function (data) { mediaBuffer.timestampOffset = duration; mediaBuffer.appendBuffer(new Uint8Array(data.video)); }); 

为了使这个工作正常,你需要服务器“发言”WebRTC。 使用websocket不会给你想要的结果,不会像WebRTC那样响应 – 它不是实时的。

要使WebRTC在服务器上运行,可以使用webrtc.org或OpenWebRTC的WebRTC堆栈作为起点,使用GStreamer或者更完整一些。 WebRTC开始的良好的媒体服务器框架项目是Kurento , Jitsi和Janus 。

由于你的问题的性质,我的build议是从上面提到的一个更完整的媒体服务器框架开始。