一、video
需求是有三個按鈕,點擊不同的按鈕會切換不同的視頻,代碼如下
<video id="myVideo" src="{{ newVideo[0].videoUrl }}" controls="{{false}}" show-mute-btn="{{false}}" autoplay="{{true}}" initial-time="{{userPlayDuration}}" onPlay="onPlayNew" onPause="onPauseNew" onTimeUpdate="onTimeUpdateNew" onEnded="onEndedNew" />
場景是隱藏視頻進(jìn)度條等一些視頻控件,實現(xiàn)點擊視頻1就暫停再次點擊就再次播放視頻1,切換到按鈕2時保存上一條視頻1的播放進(jìn)度,并自動播放當(dāng)前視頻2,重新點擊按鈕1,續(xù)播視頻1,保存視頻2進(jìn)度,大致就這樣。
然后我采用了initial-time參數(shù)來控制視頻開始播放前的指定播放起始時間,通過onTimeUpdate事件監(jiān)聽播放進(jìn)度并將用戶播放進(jìn)度賦值給userPlayDuration,一套操作下來,實現(xiàn)了場景需求,但后續(xù)測試發(fā)現(xiàn),安卓機(jī)型下一切正常,ios機(jī)型則會出現(xiàn)視頻一直轉(zhuǎn)圈加載的情況,就是播放一幀轉(zhuǎn)圈一下。
通過log打印發(fā)現(xiàn),問題原因是onPlay事件一直在被重復(fù)調(diào)用,安卓則不會發(fā)生上述情況,經(jīng)過長時間排查,發(fā)現(xiàn)是initial-time的原因。初步認(rèn)為是video組件在安卓和ios的運行機(jī)制不一致,ios可能是通過監(jiān)聽initial-time的值來執(zhí)行onPlay事件,由于userPlayDuration在onTimeUpdate事件中一直被賦值,導(dǎo)致ios機(jī)型一直在執(zhí)行onPlay事件。
既然找到了問題,那么后續(xù)解決方法也很簡單,不在onTimeUpdate事件中做賦值操作,僅進(jìn)行存值操作,通過my.setStorageSync({key: 'userPlayDuration',data: e.detail.userPlayDuration})進(jìn)行本地存值,在點擊按鈕視頻播放時通過my.getStorageSync({key:'userPlayDuration'}).data對userPlayDuration進(jìn)行賦值,至此解決問題