本文介紹了html5 video 行動端填坑記,分享給大家,具體如下:
<video id=video style=object-fit:fill autoplay webkit-playsinline playsinline x5-video-player-type=h5 x5-video-player-fullscreen=true x5-video-orientation=portraint src=video.mp4 />< /video><!-- object-fit: fill影片內容充滿整個video容器poster:img.jpg 影片封面autoplay:自動播放 auto - 當頁面載入後載入整個影片meta - 當頁面載入後只載入元資料none - 當頁面載入後不載入影片muted:當設定此屬性後,它規定視訊的音訊輸出應該被靜音webkit-playsinline playsinline: 內聯播放x5-video-player-type=h5 :啟用x5核心H5播放器x5-video-player-fullscreen=true 全螢幕設定。 ture和false的設定會導致佈局上的不一樣x5-video-orientation=portraint :聲明播放器支援的方向,可選值landscape 橫屏,portraint垂直螢幕。 預設值portraint。無論是直播或全螢幕H5通常都是垂直螢幕播放, 但這個屬性需要x5-video-player-type開啟H5模式-->自動播放設定autoplay屬性
<video autoplay></video>行動瀏覽器中
但在許多行動瀏覽器裡,都是要求使用者的真實操作來(touchend、click、doubleclick 或keydown 事件等標準的事件)觸發呼叫video.play(),才能自動播放影音影片。
dom.addEventListener('click', function () { video.play()})微信中也可以在wx.ready()裡觸發video.play()
wx.ready(function () { video.play()})內聯播放設定屬性webkit-playsinline playsinline
<video id=video webkit-playsinline playsinline /></video>
在iOS Safari和一些安卓的一些瀏覽器下播放視頻的時候,不能在h5頁面中播放視頻,系統會自動接管視頻
如果需要在h5頁面內播放視頻,則需要在視頻標籤上加上webkit-playsinline,在iOS10以後,需要加上playsinline,建議同時加上這兩個屬性。同時還需要app支援這種模式
webview.allowsInlineMediaPlayback = YES;
ios手Q和微信都支援這種模式,但是android 微信就掛了
android 微信android微信內建瀏覽器採用騰訊X5內核,不遵循X5web標準,video強制全螢幕就是其一。影片播放完畢後還會出現QQ自己的影片推薦
據說,其有白名單,白名單下的影片資源,就不會全螢幕。但是騰訊已經不能再增加白名單了。尿性,無解。 。 。 。 。 。
目前還有一個解決方法,就是使用h5 canvas 來播放video
canvas 播放視頻使用canvas 遇到的坑:video 必須加x5-video-player-type=h5 屬性,否則,在移動端就會卡死不能播放視頻,個人認為是因為視頻被接管的原因導致。
<div class=wrapper> <video id=video style=display: none autoplay src=video.mp4 x5-video-player-type=h5></video> <canvas id=canvas></canvas></div> <script> var video = document.querySelector('#video') var canvas = document.querySelector('#canvas') var wrapper = canvas.parentNode var width = wrapper.offsetWidth var height = wrapper.offsetHeight var ctx = c.getContext('2d') var time = null canvas.width = width canvas.height = addightcan.hevasight' , function () { video.play() }) video.addEventListener('play', function () { time = window.setInterval(function () { ctx.drawImage(v, 0, 0, width, height); }, 20); }, false); video.addEventListener ('pause', function () { window.clearInterval(time); }, false); video.addEventListener('ended', function () { window.clearInterval(time); }, false);</script>最後發現,雖然使用canvas播放視頻,android微信中可以屏蔽全屏視頻播放的推薦視頻。但是還沒辦法禁止影片播放時的全螢幕問題。還是得萬惡的白名單。吐槽。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
更坑爹的是沒有找到js觸發退出全螢幕的方法。
ios黑屏問題ios 播放影片時,會出現短暫的黑屏,然後正常顯示。
解決方法:
在影片上層覆蓋一個添加一個div並用一張圖片填充,製造播放前加載假象。然後監聽事件timeupdate ,影片播放有畫面時移除這個div塊
video.addEventListener('timeupdate', function(){ if(video.currentTime > 0.1){ posterImg.hidden(); }}) Media 方法與屬性HTMLVideoElement與HTMLAudioElement 皆繼承自HTMLMediaElement
//媒體錯誤MediaObj.error; //null:正常MediaObj.error.code; //1.用戶終止2.網路錯誤3.解碼錯誤4.URL無效//媒體目前狀態MediaObj.currentSrc; //傳回目前資源的URLMediaObj.src = value; //傳回或設定目前資源的URLMediaObj.canPlayType(type); //是否能播放某種格式的資源MediaObj.networkState; //0.此元素未初始化1.正常但沒有使用網路2.正在下載資料3.沒有找到資源MediaObj.load(); //重新載入src指定的資源MediaObj.buffered; //傳回已緩衝區域,TimeRangesMediaObj.preload; //none:不預載metadata:預載資源資訊auto://準備狀態MediaObj.readyState;//1:HAVE_NOTHING //2:HAVE_METADATA //3.HAVE_CURRENT_DATA //4.HAVE_FUTURE_DATA //5.HAVE_ENGH_DATAamOb.HAVE_FUTURE_DATA //5.HAVE_ENGH_DATA ; //是否正在seeking//回放狀態MediaObj.currentTime = value; //目前播放的位置,賦值可改變位置MediaObj.startTime; //一般為0,如果為串流媒體或不從0開始的資源,則不為0MediaObj.duration; //目前資源長度流傳回無限MediaObj.paused; //是否暫停MediaObj.defaultPlaybackRate = value;//預設的回放速度,可設定MediaObj.playbackRate = value;//目前播放速度,設定後馬上改變MediaObj.played; //傳回已經播放的區域,TimeRanges,關於此物件見下文MediaObj.seekable; //傳回可以seek的區域TimeRangesMediaObj.ended; //是否結束MediaObj.autoPlay; //是否自動播放MediaObj.loop; //是否循環播放MediaObj.play(); //播放MediaObj.pause(); //暫停//視訊控制MediaObj.controls;//是否有預設控制條MediaObj.volume = value; //音量MediaObj.muted = value; //靜音//TimeRanges(區域區域)物件TimeRanges.length; //區域段數TimeRanges.start(index) //第index段區域的開始位置TimeRanges.end(index) //第index段區域的結束位置//【★★★**相關事件**★★★】//事件分發var eventTester = function(e){ Media.addEventListener(e,function(){ console.log ((new Date()).getTime(),e) },false);}//事件監聽eventTester(loadstart); //客戶端開始請求資料eventTester(progress); //客戶端正在請求資料eventTester(suspend); //延遲下載eventTester(abort); //客戶端主動終止下載(不是因為錯誤引起)eventTester(loadstart); //客戶端開始請求資料eventTester(progress) ; //客戶端正在請求資料eventTester(suspend); //延遲下載eventTester(abort); //客戶端主動終止下載(不是因為錯誤引起),eventTester(error); //請求資料時遇到錯誤eventTester(stalled); //網速失速eventTester(play); //play()和autoplay開始播放時觸發eventTester(pause); //pause()觸發eventTester(loadedmetadata); //成功取得資源長度eventTester(loadeddata); //eventTester(waiting); //等待數據,並非錯誤eventTester(playing); //開始回放eventTester(canplay); //可以播放,但中途可能會因為載入而暫停eventTester(canplaythrough); //可以播放,歌曲全部載入完畢eventTester(seeking); //找中eventTester(seeked); //尋找完畢eventTester(timeupdate); / /播放時間改變eventTester(ended); //播放結束eventTester(ratechange); //播放速率改變eventTester(durationchange); //資源長度改變eventTester(volumechange); //音量改變以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。