如何在服务器上实时存储网络摄像头画面?

4 人关注

我只是想录制用户的网络摄像头画面,并将数据存储在服务器上。现在我可以等到录制完成后,在客户端生成视频文件,然后上传到服务器,但如果客户端在上传过程中断开连接,整个视频就会丢失。为了防止这种情况,我每隔1秒就向服务器发送一次blob,并试图将它们拼接成一个视频。这有点作用,但不是很可靠,因为有时似乎没有视频或视频被破坏。我的代码如下。

我在前端使用RecordRTC js,在后端使用socketio和nodejs。

navigator.mediaDevices.getUserMedia({
                video: true,
                audio: true
            }).then(async function(stream) {
                    console.log('recording started');
                    recorder = RecordRTC(stream, {
                    recorderType: MediaStreamRecorder,
                    mimeType: 'video/webm',
                    timeSlice: 1000, // 1 second interval
                    ondataavailable: function(blob) {
                        socket.emit('store-video',{blob:blob, session:'{{ $sessionId }}'});
                        console.log('recording blob: ',blob.size);
                recorder.startRecording();
                setTimeout(()=>{
                    recorder.stopRecording();
                    socket.emit('stop-video',{session:'{{ $sessionId }}'});
                    console.log('recording stopped');
                },20000);

在我的服务器上,我正在做

//using: npm fs-blob-store
let ws = blobs.createWriteStream({
                key: d.session+'/video.webm'
            socket.ws = ws; 
        socket.on('store-video', function(d){
            if(socket.ws && d.blob){