2016-03-29 6 views
2

Ich habe versucht, Media Source Extension (MSE) API zu verwenden, um Live-Streaming über Websocket zu spielen. Alles funktioniert gut, außer dass der Browser für ungefähr einen Tag abgestürzt ist. Ich fand auch, dass die Erinnerung immer größer wird. Unten ist mein Ausschnitt. Ich nehme an, dass ich zu viele Daten angehängt habe, so dass der Speicher immer erhöht wird, was zu abnormalem Verhalten für Chrome führt. Ist es möglich, den MSE/Videopuffer über die MSE API freizugeben, um Speicherlecks zu vermeiden?Media Source Extension-Video abgestürzt (Speicherleck)

OS: Windows 7 SP1 64-Bit-Windows- 10 64-Bit-


var buffer_size = 5*1024*1024; 
var buffer_index = 0; 
var video = null; 
var frag_mp4_buffer = new Uint8Array(buffer_size); 

websocket.onmessage = function(evt){ 
    var buffer = new Uint8Array(evt.data); 
    if(buffer.length !=0){ 
    if((buffer_index + buffer.length) <= buffer_size){ 
     frag_mp4_buffer.set(buffer, buffer_index); 
     buffer_index = buffer_index + buffer.length; 
     if(sourceBuffer.updating == false){ 
     var appended = frag_mp4_buffer.slice(0,buffer_index); 
     sourceBuffer.appendBuffer(appended); 
     frag_mp4_buffer.fill(0); 
     buffer_index = 0; 
     } 
    } 
    } 
}; 

Antwort

2

Verwendung SourceBuffer.remove() api Inhalt zu entfernen, die bereits gespielt wurde, ein paar Sekunden halten für alle Synchronisierungsanforderungen.

Chrome tut dies als Teil der Garbage Collection, aber ich fand es nicht sehr effizient, wenn ein Stream über mehrere Stunden läuft.

Beachten Sie auch, dass dies das Problem nicht vollständig löst, aber hilft, die Akkumulation von Speicher erheblich zu reduzieren.