Android踩坑記錄:部分網站在WebView上播放影片會重複播放
前幾天在專案執行中發現 , 我們的專案 Web View 在部分網站播放影片 , 老是播著播著就回到卡住然後從頭開始播放 , 一直迴圈
首先是把無法播放的網址使用瀏覽器和 pc 進行實驗 , 發現是正常的
-
第一個想到的是會不會 http 的問題 , 因為 Android 5 . 0 以上混用 http 和 https 需要另外設定 , 但是檢查後發現我們已經設定了 , 而且現在的問題是對於 http 讀取的問題而不是無法讀取
-
第二個在想會不會是證書問題 , 隨後在 onReceivedSslError 中進行處理發現根本沒走到裡面
-
第三個考慮到會不會是 UA 的問題 , 那個網址對我們的 UA 進行攔截了 ? 更換 UA 發現也不起作用
-
第四個考慮到會不會是我們對於網頁的廣告攔截操作,誤攔截了相關的邏輯 , 在把網站加入白名單後發現還是存在問題
沒有頭緒的時候,把專案放在那2個小時去忙別的事情,回過頭來 , 突然發現 , 網站中的當前時間一直在 2 個小時前 , 很像是被快取後的結果 , 檢視程式碼發現 , 之前的專案工程師把快取設定為 LOAD_CACHE_ONLY , 也就是預設強制讀取本地快取。
再去檢視無法播放影片的網站 , 發現他們的 ts 像是線上生成的。 例如讀取ts 是001.ts 然後002.ts 直到100.ts , 讀取一圈後又回到001.ts , 加上這個快取設定 , 就會預設讀取上一次快取下來的001.ts
解決方案 , 設定 it.cacheMode = WebSettings.LOAD_DEFAULT 即可
簡單歸納一下幾個模式的區別
-
LOAD_DEFAULT: 預設,根據 cache-control 決定是否從網路上取資料
-
LOAD_NORMAL: API level 17 中已經廢棄, 從API level 11開始作用同 LOAD_DEFAULT 模式
-
LOAD_CACHE_ELSE_NETWORK: 只要本地有,無論是否過期,或者 no-cache,都使用快取中的資料
-
LOAD_NO_CACHE: 不使用快取,只從網路獲取資料
-
LOAD_CACHE_ONLY: 不使用網路,只讀取本地快取資料
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2997820/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- h5視訊播放踩坑記錄H5
- 視訊播放–踩坑小計
- 視訊播放--踩坑小計
- list複製踩坑記錄
- win10 播放器清空記錄方法 win10 影片播放器播放記錄怎麼清除Win10播放器
- Android Studio踩坑記錄Android
- laravel踩坑記錄Laravel
- sealos踩坑記錄
- DietPi踩坑記錄
- React SSR重構踩坑記錄(持續更新)React
- AS上傳Library到JCenter 教程+踩坑記錄
- strtotime 踩坑記錄
- ABP框架踩坑記錄框架
- Electron工程踩坑記錄
- gorm踩坑記錄(一)GoORM
- MySQL_踩坑記錄MySql
- Android中用MediaPlay播放音訊和影片Android音訊
- win10 播放器清空記錄方法 win10 視訊播放器播放記錄怎麼清除Win10播放器
- Android開發踩坑及最佳實踐(工作踩坑記錄 持續更新...)Android
- Android本地網路播放Android
- Laravel7 踩坑記錄Laravel
- vuePC專案踩坑記錄Vue
- React專案踩坑記錄React
- node link 踩坑記錄
- ES6踩坑記錄
- Go json 踩坑記錄GoJSON
- Taro 小程式 踩坑記錄
- Mac下Charles踩坑記錄Mac
- 微信小程式踩坑記錄微信小程式
- React同構踩坑記錄React
- iOS11踩坑記錄iOS
- win10播放器記錄怎麼刪除_win10清空影片播放痕跡操作方法Win10播放器
- Android WebView播放flash(判斷是否安裝flash外掛)AndroidWebView
- Android Studio踩坑記Android
- 簡單WebView使用播放視訊停止WebView
- video影片標籤播放時js/jQuery顯示播放控制元件會導致播放暫停解決辦法IDEJSjQuery控制元件
- Android使WebView支援HTML5Video(全屏)播放的方法AndroidWebViewHTMLIDE
- 如何在Android上播放swf檔案Android