美文网首页
h5 video 横屏播放

h5 video 横屏播放

作者: cain07 | 来源:发表于2022-02-23 13:18 被阅读0次

    在android ios 手机上 点击 全屏 按钮 只能竖屏的 尝试 横屏播放
    点击全屏 按钮 不能横屏 是 因为 当前页面 禁止了 横屏 可以 强制 当前页面横屏

    1.利用plus

    https://www.cnblogs.com/webconfig/articles/13458689.html

    写上后 报错 plus is not defined
    安装 两个以后 还是报错 plus is not defined
    https://blog.csdn.net/baicai_123/article/details/119825350

    npm i vue-awesome-mui --save
    npm i vue-html5plus  --save
    

    设置
    https://www.cnblogs.com/biuo/p/15311918.html
    还是一样的错 不知道为什么

    2. video里面的属性 不起作用

    x5-video-player-orientation="portraint":声明播放器支持的方向,横屏:landscape,竖屏:portraint,默认竖屏播放,无论是直播还是全屏H5一般都是竖屏播放,但是该属性需要x5-video-player-type开启H5模式;

    https://www.cxyzjd.com/article/xcy1193068639/80242111
    通过旋转的方式 确实 可以把 竖屏的 改为 横屏视频 但是 并不能全屏 也不是 点击 全屏按钮 以后 实现 的

    3.通过原生方式 实现 这个测试 在app里面 确实可以实现

    android
    https://codeleading.com/article/5495441349/

    https://www.jianshu.com/p/09fb1f3ce438

    https://blog.51cto.com/u_15249199/2858213

    ios
    https://www.jianshu.com/p/c3db5b471af2

    https://codeleading.com/article/5495441349/

    4.监听 屏幕旋转 全屏的

    https://python.iitter.com/other/200390.html

    https://www.codeleading.com/article/32246016476/

    5.js 写的js 可以 video 初始化的时候 可以实现 横屏 竖屏

    https://github.com/StarFishing/VideoPromotiomComponent

    https://www.cnblogs.com/1032473245jing/p/10222448.html

    微信 横屏竖屏
    https://www.jb51.net/article/181264.htm

    第三方的 video
    https://github.com/surmon-china/vue-video-player
    https://github.com/LarchLiu/vue3-video-player

    6 最终 解决 在原生里面 的 WebChromeClient

    重写其中的onShowCustomView(全屏时调用)和onHideCustomView(竖屏时调用)两个方法

    js 的方法 都不起作用

    private class MyWebChromeClient extends WebChromeClient {
            private CustomViewCallback mCustomViewCallback;
            //  横屏时,显示视频的view
            private View mCustomView;
            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
                super.onShowCustomView(view, callback);
                 //视频点击全屏  强制横屏
                  getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                  // 显示状态栏
                getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
    
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
                //视频取消全屏  强制竖屏
               getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                // 隐藏状态栏
               getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
        }
    

    7. 当然 也可以在h5 页面里面 写两个 video 自己写个 全屏按钮 当点击 全屏的时候 显示 横屏的video 取消的时候 显示竖屏的video 测试了 也可以完美解决 问题 这个还能适配所有的 包括在 app 在网页 在微信 等。

    8.问题 有个视频横屏以后 会自动竖屏

    点击全屏按钮 onShowCustomView 会自动执行 onHideCustomView

    横屏 失败 偶尔会白屏

      public void onShowCustomView(final View view, final CustomViewCallback callback) {
                Log.e("ToVmp", "onShowCustomView");
                super.onShowCustomView(view, callback); 
            }
    

    问题分析
    view 这个参数 全屏 传过来的 视频 有时候 就加载失败 显示的 还是 webview 内容

       getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    

    发现执行 这句话 后 就会 执行 onHideCustomView 回调 去掉这句 就不会

    查询官网解释
    https://developer.android.com/reference/android/webkit/WebChromeClient
    onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
    Notify the host application that the current page has entered full screen mode.
    通知应用程序当前页面已进入全屏模式。
    通知主机应用程序当前页面已进入全屏模式。在这个调用之后,web内容将不再在WebView中呈现,而是在view中呈现。主机应用程序应该将这个视图添加到配置了WindowManager.LayoutParams的窗口中。FLAG_FULLSCREEN标志,以便实际全屏显示web内容。
    应用程序可以通过调用回调来显式地退出全屏模式(例如,当用户按下后退按钮时)。然而,这通常是不必要的,因为网页通常会显示自己的UI关闭全屏。无论WebView如何退出全屏模式,WebView都会调用onHideCustomView(),通知应用程序移除自定义视图。
    如果这个方法没有被覆盖,WebView将会向网页报告它不支持全屏模式,并且不会响应网页请求以全屏模式运行。
    onHideCustomView()
    Notify the host application that the current page has exited full screen mode.
    通知应用程序当前页面已退出全屏模式。
    通知主机应用程序当前页面已退出全屏模式。主机应用程序必须隐藏自定义视图(之前传递给onShowCustomView()的视图)。在这个调用之后,web内容将在原始WebView中再次呈现。
    getVideoLoadingProgressView()
    获取要在缓冲全屏视频时显示的视图。

    查询几种写法 如下

    换个思路解决

    a.能获取到 视频的宽高 高大于宽 竖屏播放 宽大于高 横屏播放

    这个应该可以
    android 中获取宽高

    private void getPlayTime(String mUri) {
            android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever();
            try {
                if (mUri != null) {
                    HashMap<String, String> headers = null;
                    if (headers == null) {
                        headers = new HashMap<String, String>();
                        headers.put("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; MW-KW-001 Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/1.0.0.001 U4/0.8.0 Mobile Safari/533.1");
                    }
                    mmr.setDataSource(mUri, headers);
                } else {
                    //mmr.setDataSource(mFD, mOffset, mLength);
                }
                String duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒)
                String width = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);//宽
                String height = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);//高
    
                LogUtils.e("playtime-----------" + duration + "w=" + width + "h=" + height);
    
            } catch (Exception ex) {
                Log.e("TAG", "MediaMetadataRetriever exception " + ex);
            } finally {
                mmr.release();
            }
        }
    

    h5中获取视频宽高

     let v = document.getElementById('video')
          v.addEventListener('play', (e) => {
            console.log('---addEventListener----',e)
          })
          console.log('--videoWidth--' +  v.videoWidth)
          console.log('--videoHeight--' +  v.videoHeight)
          console.log('--offsetWidth--' +  v.offsetWidth)
          console.log('--offsetHeight--' +  v.offsetHeight)
    
    b.接口下发的 同一个视频要有多种 宽高的 以便更好的适配

    写法
    https://www.jianshu.com/writer#/notebooks/7225827/notes/99267853
    https://www.jianshu.com/writer#/notebooks/7225827/notes/99338630

    竖版 视频 无法横屏 解决不了 虚心请教啊 有知道为什么 请留言啊 !!

    相关文章

      网友评论

          本文标题:h5 video 横屏播放

          本文链接:https://www.haomeiwen.com/subject/wfntlrtx.html