h5 video 視頻播放開發 和 問題集合

1.h5 video支持的格式

一共支持三種格式: Ogg、MPEG4、WebM。但這三種格式對于瀏覽器的兼容性卻各不同。

image

重點:比如MP4格式,MP4只是一個容器,里面還有一個叫編碼器的東西。格式雖然都是MP4但是html中只支持H.264的編碼格式。所以要用軟件來轉碼。
MP4 = MPEG 4文件使用 H264 視頻編解碼器和AAC音頻編解碼器
WebM = WebM 文件使用 VP8 視頻編解碼器和 Vorbis 音頻編解碼器
Ogg = Ogg 文件使用 Theora 視頻編解碼器和 Vorbis音頻編解碼器

2.h5 video視頻添加封面圖片

<video poster="images/spbg.jpg" src="about.mp4" controls="controls">
您的瀏覽器不支持 video 標簽。
</video>

補充:有時會出現視頻封面無法鋪滿的情況,需要使用object-fit屬性鋪滿整個屏幕

3.h5 video標簽屏蔽下載按鈕和取消右鍵菜單

<style type="text/css">
 video::-internal-media-controls-download-button {
  display:none;
}
video::-webkit-media-controls-enclosure {
    overflow:hidden;
 }
video::-webkit-media-controls-panel {
  width: calc(100% + 30px);
}
 </style>

如果是PC電腦上,完全可以用video標簽controlsList屬性,修改成如下即可!

<video controls controlsList="nodownload"></video>

//去除右鍵事件

$("video").live("contextmenu",function(){//取消右鍵事件
    return false;});

4.H5兼容性,參考代碼:

<video
  id="videowrap" 
  src="video/test.mp4" 
  poster="images/1.jpg" /*視頻封面*/
  preload="auto" 
  webkit-playsinline="true" /*這個屬性是ios 10中設置可以
                     讓視頻在小窗內播放,也就是不是全屏播放*/  
  playsinline="true"  /*IOS微信瀏覽器支持小窗內播放*/ 
  x-webkit-airplay="allow" 
  x5-video-player-type="h5"  /*啟用H5播放器,是wechat安卓版特性*/
  x5-video-player-fullscreen="true" /*全屏設置,
                     設置為 true 是防止橫屏*/>
  x5-video-orientation="portraint" /*播放器支付的方向,
                     landscape橫屏,portraint豎屏,默認值為豎屏*/
  style="object-fit:fill">
</video

5.video在播放m3u8拖動進度條BUG 拖動回彈

video在播放m3u8拖動進度條,進入緩沖時會卡很久,比如當前播放1:20秒,拖動進度條到1:30秒,會進行緩沖,要緩沖很久,且緩沖好之后,會跳到1:35秒-1:45秒左右繼續播放,并不會在實際拖動進度條的位置播放。
此問題在小程序上不會出現,只在app端有 部分ios手機有這現象

問題已確認。

因為該m3u8是加密的hls流。每個切片大小為10s

1 卡頓問題,比如 當跳轉至下一分鐘時,需要連續下載6個切片且解密成功后,才能繼續播放,所以會有卡頓現象。
2 seek不準確的問題, 因為切片的最小單位是10s,每次跳轉后需要重新下載并且從下一個10s開始播放。

uni-app的video組件基于 ffmpeg。
上述兩個問題在 ffplay 和 vlc播放器上同樣存在。

微信小程序不存在此問題,從現象上看,因為他從第一秒播放的時候就預加載了盡可能多的切片到本地,后續的播放都是本地操作。
稍后video組件會支持類似的功能。

6.video 點擊全屏 如何橫屏播放

h5 video 橫屏播放

http://www.lxweimin.com/p/23f9dbfab563

7.video 視頻圖像 變形 拉伸 壓縮

video{

  height:auto;
  width:100%
}
方法一 css 寫法 video視頻自適應縮放顯示 根據寬高比16:9

https://blog.csdn.net/weixin_45266779/article/details/120990591

方法二 通過 js 計算的方法 設置 object-fit 屬性

https://www.cnblogs.com/congxueda/p/15091316.html

方法三 調整rotateX即可實現高度變小,也就是寬高比變大了

https://www.cnblogs.com/liuxianan/p/html5-video-resize.html

方法四

8.video ios 打開頁面 禁止 全屏 播放

video 標簽中添加playsinline屬性 webkit-playsinline='true' playsinline='true'
<video controls="controls" 
webkit-playsinline='true'
 playsinline='true' 
preload="auto">  
</video>
native層

Obj-C中,需要添加配置webview.allowsInlineMediaPlayback = YES;
Swift請查找相關API進行配置。

開發5+App,需要在manifest.json的plus節點下新增allowsInlineMediaPlayback節點為true。

"plus":{  
    "allowsInlineMediaPlayback": true  
}

9.video ios 禁止 畫中畫 不顯示 畫中畫按鈕 disablePictureInPicture

            <video id="video"
                   width="320" height="240"  webkit-playsinline  playsinline="true" 
                    x5-video-player-type="h5" x5-video-player-fullscreen="false" 
                    src="@/assets/images/content-service/1637212363598590.mp4" 
                    x5-video-orientation="landscape" controls="controls" 
                    controlslist="nodownload" 
                    disablePictureInPicture
                    :poster="joinCmsServer(articleDetail.thumbnail)" >
                    your browser does not support the video tag
                  </video>

10. 監聽 全屏 和 非全屏事件

document.addEventListener('webkitfullscreenchange', function() {  
        var el = document.webkitFullscreenElement; //獲取全屏元素  
        console.log('--webkitfullscreenchange--' + el)
        if(el) {  
             console.log('--全屏--')
        } else {  
            console.log('--非全屏--')
        }  
      });  
<script>
    //jQuery監聽事件(窗口狀態改變)
    $(window).resize(function () {
        if (checkIsFullScreen()) {
            console.log("進入全屏");
        } else {
            console.log("退出全屏");
        }
    });
    //js監聽事件(全屏狀態改變)
    /*document.addEventListener('fullscreenchange', () => {
        if (checkIsFullScreen()) {
            console.log("進入全屏");
        } else {
            console.log("退出全屏");
        }
    });*/
    //上面2個監聽事件可根據項目需求2選1,然后調用此檢測全屏方法
    function checkIsFullScreen(){
        var isFullScreen = document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen;
        return isFullScreen == undefined ? false : isFullScreen;
    }
</script>    

安卓監聽進入全屏的事件:

jsvideo.addEventListener("x5videoenterfullscreen", () => {
  console.log("進入全屏通知");
})
jsvideo.addEventListener("x5videoexitfullscreen", () => {
  console.log("退出全屏通知");
})

IOS監聽進入全屏的事件:

jsvideo.addEventListener("webkitbeginfullscreen", () => {
  console.log("進入全屏通知");
})

jsvideo.addEventListener("webkitendfullscreen", () => {
  console.log("退出全屏通知");
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容