Media Source Extension视频崩溃(内存泄漏)

时间:2016-03-29 06:35:22

标签: javascript memory-leaks media-source

我尝试使用Media Source Extension(MSE)API在websocket上播放实时流媒体。一切正常,但浏览器将崩溃大约一天。我还发现内存总会增加。以下是我的片段。我想我会附加太多数据,以便内存总是会增加,这会导致Chrome出现异常行为。是否可以通过MSE API释放MSE /视频缓冲区以防止内存泄漏?

OS: Windows 7 SP1 64位 Windows 10 64位

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

1 个答案:

答案 0 :(得分:2)

使用SourceBuffer.remove()api删除已播放的内容,并保留几秒钟以满足任何同步要求。

Chrome会将此作为垃圾回收的一部分,但我发现在数小时内运行数据流时效率不高。

另请注意,这并不能完全解决问题,但有助于大幅减少内存的累积。

相关问题