我只是想录制用户的网络摄像头画面,并将数据存储在服务器上。现在我可以等到录制完成后,在客户端生成视频文件,然后上传到服务器,但如果客户端在上传过程中断开连接,整个视频就会丢失。为了防止这种情况,我每隔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){