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