解決ios下的視頻的最後一楨問題

問題描述

在ios系統下的safari、wechat、以及其餘瀏覽器,在播放部分m3u8的時候,最後一楨的畫面會被系統移出,也就是視覺效果在視頻播放結束的時候會黑屏,並非所有的視頻都會這樣,目前發現最後片斷時時長小於.5的最後的畫面會被系統移出,未找到相關的文檔描述,目前針對該場景作了個polyfill

圖片描述

方案

將視頻的最後一楨做爲視頻的背景圖片,這樣在視頻播放結束畫面被移走時就會展現背景圖片,反之有視頻畫面的時候背景就會被覆蓋。

具體實現

  1. 獲取視頻的最後一楨圖片前端

    a.技術能力:在前端中能夠經過canvas對video進行繪圖截取video的當前畫面。
    b.問題:可是沒法作到截取video任一楨的功能,只能時視頻播放哪裏截取到哪裏,至關於對視頻進行截圖。
    c.探索:監聽video的ended事件,可是當ended發生時,畫面已經被系統移出了。
    d.解決:監聽video的timeupdate事件,當currentTime距duration小於1s的時候,開始截取當前的視頻楨,這樣在ended以前的畫面就是視頻的最後一楨。
  2. 將獲取的視頻最後一楨圖片替換爲video的背景圖片

視頻截取圖片

function video2Base64 (video: HTMLVideoElement) {

    let dataURL = '',
        canvas = document.createElement("canvas");

        if (video.videoWidth !== 0) {
            canvas.width = video.videoWidth;
            canvas.height = video.videoHeight;

            (canvas.getContext("2d") as CanvasDrawImage).drawImage(video, 0, 0, canvas.width, canvas.height); //繪製canvas
            dataURL = canvas.toDataURL('image/jpeg'); //轉換爲base64
            // 將截取的視頻圖片設置爲視頻的背景
            video.setAttribute("style", `background-image: url(${dataURL}); background-size: contain; background-position: center;background-repeat: no-repeat;`);
        }

}
相關文章
相關標籤/搜索