Android踩坑記錄:部分網站在WebView上播放影片會重複播放

山有木xi發表於2023-11-28

前幾天在專案執行中發現 我們的專案 Web View 在部分網站播放影片 老是播著播著就回到卡住然後從頭開始播放 一直迴圈


首先是把無法播放的網址使用瀏覽器和 pc 進行實驗 發現是正常的


  1. 第一個想到的是會不會 http 的問題 因為 Android 5 . 0 以上混用 http https 需要另外設定 但是檢查後發現我們已經設定了 而且現在的問題是對於 http 讀取的問題而不是無法讀取

  2. 第二個在想會不會是證書問題 隨後在 onReceivedSslError 中進行處理發現根本沒走到裡面

  3. 第三個考慮到會不會是 UA 的問題 那個網址對我們的 UA 進行攔截了 更換 UA 發現也不起作用

  4. 第四個考慮到會不會是我們對於網頁的廣告攔截操作,誤攔截了相關的邏輯 在把網站加入白名單後發現還是存在問題

沒有頭緒的時候,把專案放在那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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章