Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 媒体源扩展视频崩溃(内存泄漏)_Javascript_Memory Leaks_Media Source - Fatal编程技术网

Javascript 媒体源扩展视频崩溃(内存泄漏)

Javascript 媒体源扩展视频崩溃(内存泄漏),javascript,memory-leaks,media-source,Javascript,Memory Leaks,Media Source,我尝试使用媒体源扩展(MSE)API在websocket上播放实时流媒体。一切正常,但浏览器将崩溃约一天。我还发现记忆总是会增加。下面是我的片段。我猜我附加了太多的数据,所以内存总是会增加,这会导致Chrome的异常行为。是否可以通过MSE API释放MSE/视频缓冲区以防止内存泄漏 操作系统: Windows 7 SP1 64位 Windows 10 64位 var buffer_size=5*1024*1024; var缓冲区指数=0; var-video=null; var frag_m

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

操作系统: Windows 7 SP1 64位 Windows 10 64位


var buffer_size=5*1024*1024;
var缓冲区指数=0;
var-video=null;
var frag_mp4_buffer=新的Uint8Array(buffer_大小);
websocket.onmessage=函数(evt){
var buffer=新的Uint8Array(evt.data);
如果(buffer.length!=0){
如果((buffer_index+buffer.length)使用SourceBuffer.remove()api删除已经播放的内容,并保留几秒钟以满足任何同步要求

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

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

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