ITPub博客

首页 > 移动开发 > ANDROID > Android踩坑记录:部分网站在WebView上播放视频会重复播放

Android踩坑记录:部分网站在WebView上播放视频会重复播放

原创 ANDROID 作者:山有木xi 时间:2023-11-28 21:06:19 0 删除 编辑

前几天在项目运行中发现 , 我们的项目 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博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2997820/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    147
  • 访问量
    390778