解决WebView视屏播放问题记录

在项目中,由于集成X5内核WebView无法显示内容,转而使用原生WebView。在处理视频播放时遇到了黑屏、全屏和后台声音不停止的问题。通过开启硬件加速解决了黑屏问题;重写WebChromeClient的onShowCustomView和onHideCustomView方法实现了全屏播放;针对华为P系列手机,通过监听Activity生命周期停止后台声音。
摘要由CSDN通过智能技术生成
情景

项目中有一大板块是加载web页面,开始集成了腾讯的X5内核WebView(因为本身集成了视频播放功能,使用起来比较方便)。但是后来前端大神写了一个web页面用到了<canvas>标签,使用X5加载不出来该标签的内容,因为我们设置了webView关闭了硬件加速( webview.setLayerType(View.LAYER_TYPE_SOFTWARE,null)),今日仔细查看了X5的官方文档才知道:X5是不建议使用以下两个api的:


经过考虑,我们决定使用Android原生的WebView,然后自己处理播放网络视频时的问题,简单记录过程中遇到的问题。

问题一:视频黑屏

我遇到的视频黑屏是:视频播放时只有声音无画面的情况,原因就是前面我说的我在初始化的时候讲webview的硬件加速关闭了,后来查资料说webView播放视频必须开启硬件加速:

在AndroidManifest.xml文件中的application或者webView所在的activity标签中开启硬件加速:


然后在代码中:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager

                .LayoutParams.FLAG_HARDWARE_ACCELERATED);

即可解决黑屏问题。

问题二:全屏问题

一般前端页面视频标签使用的是video标签,点击全屏按钮时,会回调webView的WebChromClient的onShowCustomView方法,点击退出全屏时会回调webView的WebChromClient的onHideCustomView方法。所以实现全屏的逻辑我们就重写这两个方法即可:

为了在其它地方使用webView方便,我就把WebView封装了一下,首先看CustomWebView的布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"/>

    <!--作为视频全屏播放时的容器-->
    <FrameLayout
        android:id="@+id/frame_full_screen
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webview播放视频可以通过以下步骤完成: 1. 在你的 HTML 页面中,使用 `video` 元素来嵌入视频,例如: ```html <video controls src="path/to/video.mp4"></video> ``` 这里的 `src` 属性指定了视频文件的路径。你可以使用相对路径或绝对路径,具体取决于你的项目结构。 2. 在你的 Android 代码中,找到 Webview 的实例,并启用对视频的支持。在初始化 Webview 的过程中,添加以下代码: ```java WebView webView = findViewById(R.id.webView); // 启用对视频播放的支持 webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setMediaPlaybackRequiresUserGesture(false); ``` 这些设置将启用 JavaScript,DOM 存储和应用缓存,并禁用用户手势播放限制。 3. 在你的 Android 代码中,让 Webview 加载你的 HTML 页面: ```java // 加载本地 HTML 文件 webView.loadUrl("file:///android_asset/your_html_page.html"); // 或者加载远程 URL webView.loadUrl("http://your_website.com/your_html_page.html"); ``` 根据你的需求选择加载本地 HTML 文件或远程 URL。 这样,当你在 Webview 中打开包含视频的 HTML 页面时,视频将以默认的 HTML5 播放器进行播放。 请注意,某些视频格式可能不受所有设备和浏览器的支持。确保你的视频文件是常见的格式(如 MP4),以提高兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值