2016-03-29 1 views
2

websocketでライブストリーミングを再生するためにMedia Source Extension(MSE)APIを使用しようとしました。ブラウザが約1日間クラッシュする以外はすべて正常に動作します。私はまた、記憶が常に増加することを発見しました。以下は私のスニペットです。あまりにも多くのデータを追加するとメモリが常に増加し、Chromeの異常な動作につながると思います。メモリリークを防ぐために、MSE /ビデオバッファをMSE API経由でリリースすることは可能ですか?Media Source Extensionビデオがクラッシュしました(メモリリーク)

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

答えて

2

利用SourceBuffer.remove()APIすべての同期要件に対応します。

Chromeはこれをガベージコレクションの一部として実行しますが、数時間かけてストリームを実行するとあまり効率的ではないことがわかりました。

これは完全に問題を解決するわけではありませんが、メモリの蓄積を大幅に減らすのに役立ちます。

関連する問題