網上看到了MediaRecorder用法示例,沒想到用的時候發現了一點bug,已友情提示該作者,並感謝他分享源碼
示例地址:https://wendychengc.github.io/media-recorder-video-canvas/cameracanvas.html、
開源地址:https://wendychengc.github.io/media-recorder-video-canvas/cameracanvas.html
該示例有bug:
bug現象:除第一次錄制后的下載文件,每次下載的文件都是第一次錄制的內容
用windowsMediaPlay播放器和用win10的電影和電視播放器打開時,進度條無法拉動,除第一次錄制自動下載后的視頻文件,其它視頻文件一直播放第一次錄制后下載的視頻內容,而不是當次
用PotPlayer播放器播放時,默認播放得也是第一次下載的視頻內容,但是當拖動滾動條到盡頭重新播放時,播放得竟然是當次錄制的視頻內容,這個播放器我無法理解 ,盡管我把其它所有錄制的視頻都刪掉了,它播放同一個視頻竟然有兩個視頻的效果。
bug原因:在每次錄制前存放blob的數組並沒有清空,而且錄制結束后的下載方法里使用的是 allChunks這個數組,因為第二次錄制時沒有清空,因此它實際上保存的是第一次和第二次兩次的blob的總共數組,邏輯上視頻會一直播放第一次+第二次下載的內容,但是實際上視頻會一直播放第一次的內容,原因是第二次錄制時雖然沒有清空allChunks這個數組,但是記錄了第二次錄制整個過程的blob的總個數(通過console.log(allChunks)查看),所以雖然播放的是第一次+第二次錄制的視頻內容,但是播放blob的個數是第二次記錄的個數,因此當第二次錄制的時間比第一次長很多時(blob個數比第一次多),是可以在播放中途看到第二次的內容的,如果錄制時間相同(blob個數相同),則播放的完全是第一次的內容。
bug解決:在每次錄制前將allChunks數組清空allChunks.length=0; ,不推薦allChunks=[];這種寫法。
1 //開始錄制 2 startBtn.onclick = function (e) { 3 allChunks.length=0; //用於解決示例的bug:除第一次錄制后的下載文件,每次下載的文件播放得都是第一次錄制的內容 4 recorder.start(10);/ 5 startBtn.disabled = true; 6 pauseBtn.disabled = false; 7 resumeBtn.disabled = true; 8 stopBtn.disabled = false; 9 };