今天小編給大家分享的是html5 video 移動(dòng)端填坑記,別的不多說(shuō)了,下面和扣丁學(xué)堂html5培訓(xùn)小編一起來(lái)看一下html5 video 移動(dòng)端填坑記吧。
html5培訓(xùn)
本文介紹了html5 video 移動(dòng)端填坑記,分享給大家,具體如下:
移動(dòng)瀏覽器中
但是在很多移動(dòng)瀏覽器里,都是要求用戶的真實(shí)操作來(lái)(touchend、click、doubleclick 或 keydown 事件等標(biāo)準(zhǔn)的事件)觸發(fā)調(diào)用video.play(),才能自動(dòng)播放影音視頻。
dom.addeventlistener(click, function () {
video.play()
})
微信中
也可以在wx.ready()里觸發(fā)video.play()
wx.ready(function () {
video.play()
})
內(nèi)聯(lián)播放
設(shè)置屬性webkit-playsinline playsinline
在ios safari和一些安卓的一些瀏覽器下播放視頻的時(shí)候,不能在h5頁(yè)面中播放視頻,系統(tǒng)會(huì)自動(dòng)接管視頻
如果需要在h5頁(yè)面內(nèi)播放視頻,需要在視頻標(biāo)簽上加上 webkit-playsinline,在ios10以后,需要加上playsinline,建議同時(shí)加上這兩個(gè)屬性。同時(shí)還需要app支持這種模式
webview.allowsinlinemediaplayback = yes;
ios手q和微信都支持這種模式,但是android 微信就掛了
android 微信
android微信內(nèi)置瀏覽器采用騰訊x5內(nèi)核,不遵循x5web標(biāo)準(zhǔn),video強(qiáng)制全屏就是其一。視頻播放完畢后還會(huì)出現(xiàn)qq自己的視頻推薦
據(jù)說(shuō),其有個(gè)白名單,白名單下的視頻資源,就不會(huì)全屏。但是騰訊已經(jīng)不能再增加白名單了。尿性,無(wú)解。。。。。。
目前還有一個(gè)解決辦法,就是使用h5 canvas 播放 video
canvas 播放視頻
使用canvas 遇到的坑:video 必須加 x5-video-player-type=h5 屬性,否則,在移動(dòng)端就會(huì)卡死不能播放視頻,個(gè)人認(rèn)為是因?yàn)橐曨l被接管的原因?qū)е隆?br>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 = height
canvas.addeventlistener(click, 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);
最后發(fā)現(xiàn),雖然使用canvas播放視頻,android微信中可以屏蔽全屏視頻播放完的推薦視頻。但是還沒(méi)辦法禁止視頻播放時(shí) 的全屏問(wèn)題。還是得萬(wàn)惡的白名單。更坑爹的是沒(méi)有找到j(luò)s觸發(fā)退出全屏的方法。
ios黑屏問(wèn)題
ios 在播放視頻時(shí),會(huì)出現(xiàn)短暫的黑屏,然后正常顯示。
解決方法:
在視頻上層覆蓋一個(gè)添加一個(gè)div并用一張圖片填充,制造播放前加載假象。然后監(jiān)聽(tīng)事件 timeupdate ,視頻播放有畫(huà)面時(shí)移除這個(gè)“div塊”
video.addeventlistener(timeupdate, function(){
if(video.currenttime > 0.1){
posterimg.hidden();
}
})
media 方法和屬性
htmlvideoelement和htmlaudioelement 均繼承自htmlmediaelement
// 媒體錯(cuò)誤
mediaobj.error; //null:正常
mediaobj.error.code; //1.用戶終止 2.網(wǎng)絡(luò)錯(cuò)誤 3.解碼錯(cuò)誤 4.url無(wú)效
//媒體當(dāng)前狀態(tài)
mediaobj.currentsrc; //返回當(dāng)前資源的url
mediaobj.src = value; //返回或設(shè)置當(dāng)前資源的url
mediaobj.canplaytype(type); //是否能播放某種格式的資源
mediaobj.networkstate; //0.此元素未初始化 1.正常但沒(méi)有使用網(wǎng)絡(luò) 2.正在下載數(shù)據(jù) 3.沒(méi)有找到資源
mediaobj.load(); //重新加載src指定的資源
mediaobj.buffered; //返回已緩沖區(qū)域,timeranges
mediaobj.preload; //none:不預(yù)載 metadata:預(yù)載資源信息 auto:
//準(zhǔn)備狀態(tài)
mediaobj.readystate;//1:have_nothing
//2:have_metadata
//3.have_current_data
//4.have_future_data
//5.have_enough_data
mediaobj.seeking; //是否正在seeking
//回放狀態(tài)
mediaobj.currenttime = value; //當(dāng)前播放的位置,賦值可改變位置
mediaobj.starttime; //一般為0,如果為流媒體或者不從0開(kāi)始的資源,則不為0
mediaobj.duration; //當(dāng)前資源長(zhǎng)度 流返回?zé)o限
mediaobj.paused; //是否暫停
mediaobj.defaultplaybackrate = value;//默認(rèn)的回放速度,可以設(shè)置
mediaobj.playbackrate = value;//當(dāng)前播放速度,設(shè)置后馬上改變
mediaobj.played; //返回已經(jīng)播放的區(qū)域,timeranges,關(guān)于此對(duì)象見(jiàn)下文
mediaobj.seekable; //返回可以seek的區(qū)域 timeranges
mediaobj.ended; //是否結(jié)束
mediaobj.autoplay; //是否自動(dòng)播放
mediaobj.loop; //是否循環(huán)播放
mediaobj.play(); //播放
mediaobj.pause(); //暫停
//視頻控制
mediaobj.controls;//是否有默認(rèn)控制條
mediaobj.volume = value; //音量
mediaobj.muted = value; //靜音
//timeranges(區(qū)域)對(duì)象
timeranges.length; //區(qū)域段數(shù)
timeranges.start(index) //第index段區(qū)域的開(kāi)始位置
timeranges.end(index) //第index段區(qū)域的結(jié)束位置
//【★★★**相關(guān)事件**★★★】
//事件分發(fā)
var eventtester = function(e){
media.addeventlistener(e,function(){
console.log((new date()).gettime(),e)
},false);
}
//事件監(jiān)聽(tīng)
eventtester(loadstart); //客戶端開(kāi)始請(qǐng)求數(shù)據(jù)
eventtester(progress); //客戶端正在請(qǐng)求數(shù)據(jù)
eventtester(suspend); //延遲下載
eventtester(abort); //客戶端主動(dòng)終止下載(不是因?yàn)殄e(cuò)誤引起)
eventtester(loadstart); //客戶端開(kāi)始請(qǐng)求數(shù)據(jù)
eventtester(progress); //客戶端正在請(qǐng)求數(shù)據(jù)
eventtester(suspend); //延遲下載
eventtester(abort); //客戶端主動(dòng)終止下載(不是因?yàn)殄e(cuò)誤引起),
eventtester(error); //請(qǐng)求數(shù)據(jù)時(shí)遇到錯(cuò)誤
eventtester(stalled); //網(wǎng)速失速
eventtester(play); //play()和autoplay開(kāi)始播放時(shí)觸發(fā)
eventtester(pause); //pause()觸發(fā)
eventtester(loadedmetadata); //成功獲取資源長(zhǎng)度
eventtester(loadeddata); //
eventtester(waiting); //等待數(shù)據(jù),并非錯(cuò)誤
eventtester(playing); //開(kāi)始回放
eventtester(canplay); //可以播放,但中途可能因?yàn)榧虞d而暫停
eventtester(canplaythrough); //可以播放,歌曲全部加載完畢
eventtester(seeking); //尋找中
eventtester(seeked); //尋找完畢
eventtester(timeupdate); //播放時(shí)間改變
eventtester(ended); //播放結(jié)束
eventtester(ratechange); //播放速率改變
eventtester(durationchange); //資源長(zhǎng)度改變
eventtester(volumechange); //音量改變
以上就是小編給大家分享的html5 video 移動(dòng)端填坑記,希望對(duì)小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以【前端精選40g資料包贈(zèng)送co,每日新聞資訊ding,每天進(jìn)步一點(diǎn)點(diǎn)bb,小寫(xiě)英文為微信】咨詢??鄱W(xué)堂是專業(yè)的html培訓(xùn)機(jī)構(gòu),不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的html5在線教程供學(xué)員觀看學(xué)習(xí),心動(dòng)的小伙伴快快行動(dòng)吧。
QJ41M耐高溫球閥
供應(yīng)贏隆移動(dòng)廁所,保質(zhì),保量。
舞臺(tái)單排廣告車什么價(jià)格
松焦油盡在江蘇大堯化工,松根油產(chǎn)品?全國(guó)直銷品質(zhì)保證廠家
江西哪家平開(kāi)窗生產(chǎn)商質(zhì)量有保障?
html5 video 移動(dòng)端填坑記分享
供應(yīng)油桃
淮安樓梯鋼筋彎曲手持彎曲效率高
這種蔬菜營(yíng)養(yǎng)價(jià)值非常高,屬生食蔬菜中的上品,高產(chǎn)種植有方法
淺談高溫離心風(fēng)機(jī)的結(jié)構(gòu)特點(diǎn)
刷粉怎么刷?應(yīng)該找誰(shuí),刷粉的號(hào)會(huì)不會(huì)被封?刷評(píng)論點(diǎn)贊
供應(yīng)連續(xù)工作專用超聲波,口罩機(jī)專用超聲波
刻美腸活飲總代是誰(shuí),怎么聯(lián)系
供應(yīng)批發(fā) 3D立體拼圖 服裝城兒童拼圖混批
鋼貿(mào)商進(jìn)行聚氨酯保溫管冬儲(chǔ)的前提條件是什么
皇叔冒菜加盟費(fèi)多少 需要投資多少錢
豪美廠家批發(fā)EVA冷熱壓箱包 眼鏡盒
護(hù)欄板定做廠家--定制彩色噴塑護(hù)欄板鍍鋅護(hù)欄板
學(xué)歷不高可以開(kāi)化妝品店嗎
FU100BP/146D懸式絕緣子廠家專業(yè)生產(chǎn)各種絕緣子