我是二进制数据和getUserMedia的新手,将getUserMedia(视频/音频)流式传输到服务器,然后为其他连接准备流(视频/音频)的推荐方法是什么?
我最初的想法是通过websockets发送数据,然后将数据写入文件(mp4),如下所示:
getUserMedia -->(websockets)--> server -->(file.mp4)--> video.src
.
我一直在看MediaStreamRecorder,我可以像这样发送一个缓冲区:
multiStreamRecorder.ondataavailable = function (blobs) { socket.emit('blobs', blobs) };
在我得到的服务器上
{ audio:, video: , onDataAvailableEventFired: true }
现在我想我应该将它写入一个文件,提供该文件,然后从video
元素的源中请求该文件.如果这一切都正确我将如何将文件写入文件系统?或者我做错了什么?
我了解WebRTC具有p2p功能,我将为~50或更多客户端提供视频流服务,因此它不是一个选项.
使用websocket解决方案更新:
我现在通过websockets发回数据,如下所示:
socket.on('blobs', function(data){ socket.emit('blobs', data) })
并在客户端将其推入a mediaSource
和a video
元素,timestampOffset
以保持它平滑.
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)); });
Tsahi Levent.. 7
为了使其正常工作,您还需要服务器"说"WebRTC.使用websockets不会给你想要的结果,也不会像WebRTC那样响应 - 它不是实时的.
要使WebRTC在服务器上运行,您可以使用webrtc.org或OpenWebRTC上的WebRTC堆栈作为起点,使用GStreamer或者更完整的东西.WebRTC的媒体服务器框架的优秀项目是Kurento,Jitsi和Janus.
由于您的问题的性质,我的建议是从上面提到的一个更完整的媒体服务器框架开始.
为了使其正常工作,您还需要服务器"说"WebRTC.使用websockets不会给你想要的结果,也不会像WebRTC那样响应 - 它不是实时的.
要使WebRTC在服务器上运行,您可以使用webrtc.org或OpenWebRTC上的WebRTC堆栈作为起点,使用GStreamer或者更完整的东西.WebRTC的媒体服务器框架的优秀项目是Kurento,Jitsi和Janus.
由于您的问题的性质,我的建议是从上面提到的一个更完整的媒体服务器框架开始.