2

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

操作系统: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;
      }
    }
  }
};

4

1 回答 1

2

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

Chrome 将这作为垃圾收集的一部分,但我发现在运行几个小时的流时它效率不高。

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

于 2016-04-07T18:02:17.317 回答