2015-12-02 15 views
12

Attualmente sto provando a trasmettere un file video .webm tramite socket.io al mio client (che attualmente usa Chrome come client).MediaSource che si aggiunge a SourceBuffer non funziona dopo la prima volta

Aggiunta la prima Uint8Array al SourceBuffer funziona bene, ma aggiungendo ulteriori quelli non funziona e getta il seguente errore: Uncaught DOMException: Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.

mio codice corrente:

'use strict'; 

let socket = io.connect('http://localhost:1337'); 

let mediaSource = new MediaSource(); 
let video = document.getElementById("player"); 
let queue = []; 
let sourceBuffer; 

video.src = window.URL.createObjectURL(mediaSource); 

mediaSource.addEventListener('sourceopen', function() { 
    sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); 

    socket.on("video", function(data) { 
     let uIntArray = new Uint8Array(data); 

     if (!sourceBuffer.updating) { 
      sourceBuffer.appendBuffer(uIntArray); 
     } else { 
      queue.push(data); 
     } 
    }); 
}); 

codice lato server (frammento)

io.on('connection', function(socket) { 
      console.log("Client connected"); 

      let readStream = fs.createReadStream("bunny.webm"); 
      readStream.addListener('data', function(data) { 
       socket.emit('video', data); 
      }); 
     }); 

Ho rimosso anche i controlli del webkit poiché questo sarà solo funziona su browser Chromium.

+0

Puoi pubblicare anche il tuo codice server? Sarà più facile impostare e testare il – cviejo

+0

, ho pensato che il codice del server non fosse necessario in quanto sembrava un errore del client per me, ma hai ragione potrebbe essere d'aiuto. – Cludch

+0

Nessun errore sulla mia estremità. Potrebbe essere un problema con il file stesso. Poiché stai utilizzando un file "bunny.webm" e [questo post] (http://stackoverflow.com/questions/27309027/stream-video-through-socket-to-html5-video-tag) ha un problema simile con file scaricati da http://www.webmfiles.org/demo-files ... hai già provato a riformattare il file o un altro file? – cviejo

risposta

2

Credo che bisogna liberare il buffer, vedere la funzione remove() http://w3c.github.io/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end

fatemi sapere se lo ha aiutato.

+0

Ho provato a chiamare questo metodo dopo il primo appendBuffer, ma sto ricevendo l'errore 'InvalidAccessError' perché' mediaSource.duration' è 'NaN' - https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove – Cludch

+0

Penso che potrebbe essere necessario impostare questa durata da soli: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/duration –

+0

Quando dovrei chiamare la rimozione? L'ho chiamato tramite la console ma non è stato possibile aggiungere un nuovo blocco. – Cludch

Problemi correlati