Streaming video tramite Websocket al tag

Io uso Node.js per lo streaming via Websocket un video webm in tempo reale in una pagina web che verrà riprodotto in un tag. Quanto segue è il codice sia dal server che dal client:

SERVER:

var io = require('./libs/socket.io').listen(8080, {log:false}); var fs = require('fs'); io.sockets.on('connection', function (socket) { console.log('sono entrato in connection'); var readStream = fs.createReadStream("video.webm"); socket.on('VIDEO_STREAM_REQ', function (req) { console.log(req); readStream.addListener('data', function(data) { socket.emit('VS',data); }); }); }); 

CLIENTE:

      window.URL = window.URL || window.webkitURL; window.MediaSource = window.MediaSource || window.WebKitMediaSource; if(!!! window.MediaSource) { alert('MediaSource API is not available!'); return; } var mediaSource = new MediaSource(); var video = document.getElementById('v'); video.src = window.URL.createObjectURL(mediaSource); mediaSource.addEventListener('webkitsourceopen', function(e) { var sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); var socket = io.connect('http://localhost:8080'); if(socket) console.log('Library retrieved!'); socket.emit('VIDEO_STREAM_REQ','REQUEST'); socket.on('VS', function (data) { console.log(data); sourceBuffer.append(data); }); });    

Sto usando Chrome 26 e ottengo questo errore: “Uncaught Error: InvalidAccessError: DOM Exception 15”. Sembra che il tipo di buffer alimentato al metodo append sia sbagliato. Ho già provato a convertirlo in un Blob, Array e Uint8Array, ma senza fortuna.

    Il tuo esempio contiene solo il codice che viene mostrato nella pagina visualizzata da qui: http://html5-demos.appspot.com/static/media-source.html

    Controlla il codice sorgente, la riga 155 è ciò che ti manca:

     var file = new Blob([uInt8Array], {type: 'video/webm'}); 

    Pertanto, è necessario indicare al Blob il tipo di contenuto e quindi alimentare il buffer con Uint8Array (vedere la riga 171):

     sourceBuffer.append(new Uint8Array(e.target.result));