前提介紹:
iOS中微信的瀏覽器內核應該是和Safari瀏覽器同樣的內核
Android中微信的瀏覽器內核是騰訊自己開發的X5騰訊瀏覽服務(Android上的QQ瀏覽器也是這個內核)
1 內聯播放視頻
iOS上給video標籤增加playsinline和webkit-playsinline(兼容新版舊版),對於在Safari中可以內聯播放的,那麼在微信中也是內聯播放的
Android上給video標籤增加playsinline和webkit-playsinline(兼容新版舊版),只有部分機型支持(已知Sumsung Note4(Android 6.0.1)可以,Vivo X9(Android 7.1.1)不可以,其它手機和版本沒有測試)
Android上給video標籤增加x5-video-player-type="h5"屬性,可以做到類似內聯播放的樣式,但頂部的微信的title會ui有變化
2 根據視頻的寬高,取視頻中間一塊正方形播放,其餘用外面盒子設定寬高佈局的方式overflow: hidden,對視頻多餘部分進行遮罩,並視頻內聯播放
iOS,用1的方法做內聯播放,然後寬高以及video相對外面盒子的定位等參數通過計算獲得設置在對應的元素上即可
Android
2.1 使用playsinline和webkit-playsinline做內聯,然後寬高以及video相對外面盒子的定位等參數通過計算獲得設置在對應的元素,對於可以內聯播放的Android機器,多餘的部分將會溢出顯示,並不會這罩住(QQ瀏覽器同理也是這樣,但是Chrome瀏覽器Android版就可以,說明那個X5內核有點坑爹)
2.2 使用給video標籤增加x5-video-player-type="h5"屬性,做到類似內聯播放的樣式,然後寬高以及video相對外面盒子的定位等參數通過計算獲得設置在對應的元素,雖然是內聯的樣式播放,但是原來屬於視頻的但被遮罩的部分,將會變成黑色的底(即ui也不好看,不推薦)
2.3 既然2.1和2.2兩種方法都不適合,所以建議需要進行遮罩裁剪內聯播放的視頻,在Android的微信上還是放棄吧,建議做成,點擊播放按鈕時,彈出一個全屏播放的浮層(自己佈局一下fixed的盒子,裏面放video標籤,記得此標籤不要寫內聯的任何樣式playsinline和webkit-playsinline和x5-video-相關的屬性)
3 內聯播放視頻的時候,播放、暫停、進度條的ui自己定製
iOS上,使用1的方法,加上自己寫ui,js調用play,pause控制播放暫停,監聽ondurationchange和ontimeupdate可以獲取總時長和當前播放的時間,計算出播放進度
Android上,微信中的播放器樣式是沒法自己定製的(chrome就可以,但是X5的騰訊瀏覽服務就是不讓),官方的說法是這是產品策略(在微信或手Q上,如果是qq.com域名下的video可以通過不指定control屬性(表明由頁面自己繪製控制面板)來控制)(產品經理都是一樣討打麼)
參考資料:
https://x5.tencent.com/tbs/technical.html#/detail/web/1/cecfc00a-f9d1-448f-b04d-8acdf571e469
https://x5.tencent.com/tbs/technical.html#/detail/web/1/e41b0474-8411-44be-a337-edb776271b53