2017-08-24 60 views
0

我有兩個使用MediaSource播放的視頻,但只有其中一個有效。兩者都將編解碼器設置爲avc1.4d401f和mp4a.40.2,但是其中一個播放器很好,另一個在我調用SourceBuffer上的appendBuffer後立即關閉MediaSource。是代碼的相關位,如下所示:MediaSource在appendBuffer後關閉

var mainSource; 
var mimeCoded = 'video/mp4; codecs="avc1.4d401f,mp4a.40.2"'; 

    mainSource = new MediaSource(); 
    var sourceBuffer; 

    mainSource.addEventListener('sourceopen',() => { 
     console.log('readystate', mainSource.readyState); 
     var xhr = new XMLHttpRequest(); 
     xhr.responseType = 'arraybuffer'; 
     xhr.open('get', 'main.mp4'); 
     xhr.addEventListener('load', (e) => { 
      sourceBuffer = mainSource.addSourceBuffer(mimeCoded); 
      sourceBuffer.mode = 'sequence'; 
      sourceBuffer.addEventListener('updateend', onUpdateEnd); 
      sourceBuffer.appendBuffer(e.target.response); 
      console.log('updating', sourceBuffer.updating); 
     }); 
     xhr.send(); 

    }); 

    vid.src = URL.createObjectURL(mainSource); 

    onUpdateEnd = function() 
    { 
     console.log('readystate2', mainSource.readyState, sourceBuffer.updating); 
     vid.play(); 
     sourceBuffer.removeEventListener('updateend', onUpdateEnd); 
    }; 

當使用的視頻之一,上mainSource.readyState將輸出open兩個日誌,而是用另一個它顯示closed在所述第二日誌(和vid.play()因此錯誤) 。對於可能發生的事情,我已經沒有什麼想法了,所以任何幫助都是值得讚賞的。

回答

0

回答以作進一步參考,因爲它的工作視頻必須在編碼時被分割。使用下面的ffmpeg命令訣竅:

ffmpeg -i input.mp4 -movflags frag_keyframe+empty_moov+default_base_moof output_frag.mp4