需求:
實現PC及移動端播放HLS流,並且可以自動播放,在頁面內部播放及全屏播放功能。
初步:PC及安卓機使用hls.js實現hls流自動播放及全屏非全屏播放
首先使用了hls.js插件,可以實現在PC及安卓機自動播放及全屏和非全屏播放。
但是在蘋果手機不支持播放,HLS官網說改庫使用了MSE,原文:It relies on HTML5 video and MediaSource Extensions for playback。經查MSE不支持IOS,mdn截圖如下:
總結:PC和安卓都支持hls.js, 蘋果手機不支持。幸運的是發現video標簽支持hls播放。
探索:蘋果手機使用video實現hls流自動播放。
經測試,必須要點擊播放才能播放,無法自動播放,原因如下(New <video> Policies for iOS):
已上翻譯+測試如下,
必須具備一下條件才能自動播放:
1. <video> 標簽必須有 autoplay 的屬性。
2. <video> 必須設置 muted 屬性,或者本身它就不包含音軌。
3. <video>
元素僅在屏幕上可見時才開始播放。例如當它們滾動到視口中,通過CSS可見並插入DOM。
4. 允許元素內聯播放,並且在開始播放時不會自動進入全屏模式,也就是playsinline webkit-playsinline.
如果已經在自動播放,下列情況中的一種都會使自動播放暫停:
1. 元素變得不可見,例如通過滾動到視口之外。
2. <video>
元素獲得音軌,或者音量打開(例如muted = false, video.volume = 50等)。
經測試,video有如下屬性可以自動播放:
<video autoplay muted playsinline="true" webkit-playsinline="true"></video>
總結:使用autoplay muted playsinline="true" webkit-playsinline="true"屬性可以自動播放,比較致命的是自動播放是靜音的。
折衷:蘋果手機不需要自動不放,需要全屏及非全屏播放
將代碼改為autoplay playsinline="true" webkit-playsinline="true" controls,點擊可以播放(自動彈出全屏),IOS13雙指縮回可以內聯播放,IOS13以下縮回后立即暫停,再點擊播放后依舊彈出全屏播放。
后經查找代碼改為如下:
<video x5-playsinline="" playsinline="" webkit-playsinline="" x-webkit-airplay="allow" preload="true" controls></video>
其中x-webkit-airplay="allow",必須要有,這個屬性應該是使此視頻支持ios的AirPlay功能。但是加入這個代碼就可以在IOS13以下內聯播放,刪除了就不行了。x5-playsinline微信禁止全屏。
總結:
1. PC和安卓都支持hls.js, 蘋果手機不支持。
2. 蘋果手機可以使用video播放hls流,使用autoplay muted playsinline="true" webkit-playsinline="true"屬性可以自動播放,比較致命的是自動播放一直不能有聲音。
3. IOS13以下想要內聯播放必須加上x-webkit-airplay="allow" 。