IOS(蘋果手機)使用video播放HLS流,實現在內部播放及全屏播放(即非全屏和全屏播放)。


需求:

  實現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" 。




 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM