2016-03-29 11 views
2

Canlı yayın akışını web üzerinden yürütmek için Ortam Kaynağı Uzantısı (MSE) API'sini kullanmayı denedim. Her şey iyi çalışıyor, tarayıcı yaklaşık bir gün boyunca çökecek. Ayrıca hafızanın her zaman artacağını keşfettim. Aşağıda snippet'im var. Sanırım çok fazla veri ekliyorum, böylece bellek her zaman artacak ve bu da Chrome için anormal davranışlarla sonuçlanacak. Bellek sızıntısını önlemek için MSE/video arabelleğini MSE API aracılığıyla serbest bırakmak mümkün mü?Ortam Kaynağı Uzantısı videosu çöktü (Bellek sızıntısı)

OS: Windows 7 SP1 64 bit Windows 10 64 bit birkaç saniye tutarak, önceden oynanmış içeriği kaldırmak için


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; 
     } 
    } 
    } 
}; 

cevap

2

Kullanım SourceBuffer.remove() API herhangi bir senkronizasyon gereksinimleri için.

Chrome bunu çöp koleksiyonunun bir parçası olarak yapıyor, ancak birkaç saatten fazla bir akış çalıştırırken çok verimli olmadığını buldum. Ayrıca, sorunun tamamen çözülmediğini, ancak bellek birikimini önemli ölçüde azaltmaya yardımcı olduğunu unutmayın.