2016-11-24 52 views
3

我已创建套接字连接并使用该连接发送二进制流数据到服务器和服务器端我现在使用该数据获取二进制数据我想创建一个视频文件并将其保存在服务器上。我成功地到达现在没有任何方式将二进制数据转换为视频文件。请帮助实现。从套接字连接收集的二进制数据生成视频文件

服务器端米

使用的node.js创建JavaScript

服务器端代码套接字服务器,并从客户端:

var server = http.createServer(function(request, response) { 
    //Creating websocket server 
}); 
server.listen(1337, function() { }); // listen to 1337 port 

// create the server 
wsServer = new WebSocketServer({ 
    httpServer: server 
}); 

// WebSocket server 
wsServer.on('request', function(request) { 
    var connection = request.accept(null, request.origin); 

    // all messages from client will receive here. 
    connection.on('message', function(message) { 
     if (message.type === 'utf8') { 

     }else if (message.type === 'binary') { 
      //here i will get the binary data not want to create the video file using this 
     } 
    }); 

    connection.on('close', function(connection) { 


    }); 

}) 

客户端:

window.WebSocket = window.WebSocket || window.MozWebSocket; 
    var connection = new WebSocket('ws://localhost:1337'); 
    connection.binaryType = 'arraybuffer'; 
    var options = { 
     mimeType: 'video/webm;codecs=vp9' 
    }; 

    mediaRecorder = new MediaRecorder(MediaStream, options); 
    mediaRecorder.ondataavailable = function(event) { 
     if (event.data.size > 0) { 
     recordedChunks.push(event.data); 
     connection.onopen = function() { 
      var byteArray = new Uint8Array(event.data); 
      connection.send(byteArray.buffer); 
     }; 
     } 
    }; 
+0

是从视频文件中的二进制流? – Sven

+0

没有我记录用户操作使用铬扩展chrome.tabCapture.capture –

回答

1

我已经达到它在服务器上成功创建视频文件我曾使用recordRTC API将视频流转换为dataurl并使用socket.io发送到服务器,并在服务器上将dataurl转换为base6 4并将其写入文件。

这是我的客户端代码。

socketio = io("ws://192.168.0.42:1337"); 
    recordVideo = RecordRTC(MediaStream, {type: 'video'}); 
    recordVideo.startRecording(); 
    onStopRecording(); 
    function onStopRecording(){ 
     recordVideo.stopRecording(function() { 
     recordVideo.getDataURL(function(videoDataURL) { 
        var d = new Date(); 
        var files = { 
         video: { 
          type: recordVideo.getBlob().type || 'video/webm', 
          dataURL: videoDataURL, 
          time : d.getTime() 
         } 
        }; 
        socketio.emit('message', files); 
     }) 
     }); 
    } 

,并从服务器端:

var server = http.createServer(function(request, response) { 
    //Creating websocket server 
}); 
server.listen(1337, function() { }); // listen to 1337 port 


var wIoSocket = io.listen(server); 
wIoSocket.sockets.on('connection', function (socket) { 
    socket.on('message', function (data) { 
     if (data.video) { 
      writeToDisk(data.video.dataURL, data.video.time+'.webm'); 
     } 
    }); 
}); 


function writeToDisk(dataURL, fileName) { 
    var dataURL = dataURL.split(',').pop(); 
    var fileBuffer = new Buffer(dataURL, 'base64'); 
    fs.writeFileSync(fileName, fileBuffer); 
} 
+0

但在这种方法中,我仍然必须依赖停止视频录制发送视频流。我想在录制时发送视频流。 –