2016-11-24 67 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

但在這種方法中,我仍然必須依賴停止視頻錄製發送視頻流。我想在錄製時發送視頻流。 –