前端两种播放视频的方式

本文介绍了如何通过HTML结合Vue.js实现视频的内联播放,并展示了如何使用iframe嵌入外部Youku视频。同时,展示了视频操作技巧,如暂停、播放、时间更新事件的处理,适合前端开发者学习视频元素的交互控制。

两种方式,需要弹窗的话,可以结合layer使用

<html>
    <head>
        <script src="vue.js"></script>
        <style type="text/css">
          video{width: auto;max-height: 100%}
        </style>
    </head>
    <body>
        <!--第一种 引入视频链接 -->
        <div id="app" style="width: 500px;height: 400px" align="center">
           <video controls>
             <source src="http://oss2.lanlanlife.com/2%E9%82%80%E8%AF%B7%E5%A5%BD%E5%8F%8B.mp4" type="video/mp4"></source>
           </video>
        </div>
        <!--第二种 嵌入iframe 播放外部视频 -->
         <div style="width: 500px;height: 400px" align="center">
            <iframe height=498 width=510 src='http://player.youku.com/embed/XNDExMDIyMDg5Ng==' frameborder=0 'allowfullscreen'></iframe>
        </div>
       
        <script>
          
        </script>
    </body>
</html>

视频操作(很有意思):

<video
    id="videoSrc"
    preload="metadata"
    :src="/"
    muted 
    @mousedown.stop='mouseDown($event)'
    @mouseup.stop='mouseMove'
    @touchstart.stop='touchDown($event)'
    @touchend.stop='touchMove($event)'
/>
this.videoObj = document.getElementById('videoSrc')
beforeRouteEnter(to, from, next) {
    next(vm=> {
        vm.$nextTick(()=>{
            let videoObj=vm.videoObj;
            videoObj.currentTime = 0;
            videoObj.play()
            videoObj.pause()
            video.addEventListener('timeupdate',()=> {
                videoObj.currentTime = 10.5;
            })
        })
    })
}

<think> 我们正在讨论如何在前端开发中实现安卓设备播放视频默认全屏。 根据之前的引用和讨论,我们知道在安卓设备上,特别是WebView中,视频全屏播放可能会遇到问题。 引用[1]提到Android WebView播放视频的两个主要问题:无法正常播放和无法全屏播放。 引用[2]提供了在iOS上禁止全屏的解决方案,但同时也提到了一些安卓全屏相关的属性(x5-video-player-type等)。 用户现在的问题是:前端开发实现安卓设备播放视频默认全屏的方法。 注意:在安卓设备上,特别是微信内置浏览器(X5内核)和其他移动浏览器中,实现默认全屏的方法可能不同。 解决方案: 1. 使用腾讯X5内核(常见于微信、QQ等应用)提供的全屏播放能力。 在video标签中添加以下属性: - `x5-video-player-type="h5"`:启用H5播放器,这会在安卓设备上调用X5内核的全屏播放能力。 - `x5-video-player-fullscreen="true"`:设置为全屏播放模式(注意:这个属性设置为true时,视频播放时会自动进入全屏,但根据文档,这个属性通常是控制全屏方式,设置为true表示横屏全屏,但实际测试可能会有差异)。 - `x5-video-orientation="portrait|landscape"`:控制全屏时的方向,portrait竖屏,landscape横屏。 2. 注意:默认全屏(即页面加载后自动播放并全屏)在移动端浏览器中通常被禁止,因为这被认为是不好的用户体验。因此,我们需要用户交互(如点击)来触发播放和全屏。 3. 如果希望视频在用户点击后自动全屏播放,可以结合以下步骤: a. 在video标签上添加必要的属性(如上所述)。 b. 在用户点击事件中,不仅触发视频播放,还要尝试进入全屏(使用requestFullscreen API,但注意安卓设备上的兼容性)。 4. 但是,在安卓的WebView中,可能需要客户端配合(由客户端设置WebView支持全屏)。 5. 另一种思路:在安卓设备上,特别是微信中,使用X5内核提供的全屏能力,可以通过设置video属性,使得点击播放按钮时自动进入全屏(这是X5内核默认的行为)。 6. 重要:在微信浏览器中,如果设置了`x5-video-player-type="h5"`,视频默认会在全屏状态下播放(但不是默认自动播放,需要用户点击)。 7. 关于自动播放:安卓设备通常不允许自动播放(除非视频是静音的),所以默认全屏自动播放很难实现。 因此,我们通常的做法是: - 提供一个播放按钮(可以是自定义的),用户点击后触发播放并尝试进入全屏(如果可能)。 - 在安卓设备上,利用X5内核的特性,在点击播放时自动进入全屏。 具体实现代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="x5-fullscreen" content="true"> <!-- 强制QQ全屏 --> <meta name="full-screen" content="yes"> <!-- 强制UC全屏 --> <title>安卓视频全屏播放</title> </head> <body> <video id="myVideo" src="video.mp4" poster="poster.jpg" controls playsinline webkit-playsinline x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="landscape" <!-- 横屏全屏 --> style="width:100%; height:auto; object-fit:fill"> <!-- 注意:在安卓微信中,设置x5-video-player-type="h5"后,点击播放按钮会进入全屏 --> </video> <script> // 尝试在用户交互后自动播放并全屏(注意:自动全屏可能受限) document.getElementById('myVideo').addEventListener('click', function() { this.play().catch(e => console.log(e)); // 尝试进入全屏(但安卓原生全屏API支持有限,通常X5内核会自动处理) if (this.requestFullscreen) { this.requestFullscreen(); } else if (this.webkitRequestFullscreen) { /* Safari and Chrome */ this.webkitRequestFullscreen(); } else if (this.mozRequestFullScreen) { /* Firefox */ this.mozRequestFullScreen(); } else if (this.msRequestFullscreen) { /* IE/Edge */ this.msRequestFullscreen(); } // 在X5内核中,我们主要依靠上面的属性设置,JS全屏API可能不起作用 }); </script> </body> </html> ``` 解释: - 在video标签中,我们添加了`x5-video-player-type="h5"`和`x5-video-player-fullscreen="true"`,这会让腾讯X5内核在播放时进入全屏模式。 - `playsinline`和`webkit-playsinline`是为了在iOS上可以内联播放(避免iOS自动全屏),在安卓上这些属性也会被忽略,但写上无妨。 - 我们尝试在视频点击事件中播放视频。在X5内核中,播放视频会自动进入全屏(因为我们设置了相关属性),所以JS中的全屏API可能不会被调用(或者调用失败)。因此,主要依赖X5内核的处理。 另外,引用[2]中提到了在IOS微信浏览器中设置小窗内播放的属性,但我们现在关注的是安卓。 补充说明:在非腾讯X5内核的安卓浏览器中,全屏播放可能需要使用标准的全屏API,但移动端浏览器对全屏API的支持并不一致,且通常需要用户手势触发。 因此,针对安卓设备的前端全屏播放,主要依赖于浏览器或WebView的内置行为(特别是X5内核)和用户交互。 总结:实现安卓设备默认全屏播放(即用户点击播放时自动进入全屏)的方法是使用X5内核支持的video属性,并结合用户交互(点击)触发播放。 注意:如果是在Android WebView中,还需要确保WebView启用了硬件加速和设置了合适的WebChromeClient,这部分需要客户端开发人员配合[^1]。 相关问题: 1. 如何检测当前浏览器是否支持X5内核? 2. 在安卓WebView中如何配置以支持视频全屏播放? 3. 如何实现在视频播放完成后自动退出全屏? 4. 在移动端H5中,如何兼容不同浏览器的视频全屏方案? 5. 微信浏览器中视频全屏有哪些特殊限制? 以上问题可以作为后续扩展讨论。 </think> ### 安卓设备视频默认全屏播放实现方案 在安卓设备(特别是微信等内置浏览器)中实现视频默认全屏播放,需结合特殊属性和API调用。以下是具体解决方案: #### 核心方法 ```html <video id="videoPlayer" src="video.mp4" controls playsinline <!-- iOS内联播放 --> webkit-playsinline <!-- iOS内联播放 --> x5-video-player-type="h5" <!-- 启用X5内核H5播放器 --> x5-video-player-fullscreen="true" <!-- 强制横屏全屏 --> x5-video-orientation="landscape" <!-- 指定横屏方向 --> style="object-fit:fill" ></video> ``` #### 关键属性说明 | 属性 | 作用 | 适用平台 | |------|------|----------| | **`x5-video-player-type="h5"`** | 强制启用X5内核全屏播放 | 安卓(微信/QQ) | | **`x5-video-player-fullscreen="true"`** | 自动进入全屏模式 | 安卓(微信/QQ) | | **`x5-video-orientation="landscape"`** | 锁定横屏全屏 | 安卓(微信/QQ) | | **`playsinline`** | 阻止iOS自动全屏 | iOS | | **`webkit-playsinline`** | iOS内联播放支持 | iOS | #### 全屏触发脚本 ```javascript // 用户交互后触发全屏播放 document.getElementById('videoPlayer').addEventListener('click', () => { const video = document.getElementById('videoPlayer'); // X5内核兼容 if (typeof video.webkitEnterFullScreen === 'function') { video.webkitEnterFullScreen(); } // 标准全屏API else if (video.requestFullscreen) { video.requestFullscreen(); } else if (video.mozRequestFullScreen) { video.mozRequestFullScreen(); } video.play().catch(e => console.error("自动播放受阻:", e)); }); ``` #### 安卓WebView额外配置 客户端需在WebView中开启硬件加速和支持全屏(Java/Kotlin): ```java // Android WebView设置 webView.setWebChromeClient(new WebChromeClient() { @Override public void onShowCustomView(View view, CustomViewCallback callback) { // 处理全屏逻辑 } }); webView.getSettings().setPluginState(WebSettings.PluginState.ON); webView.getSettings().setMediaPlaybackRequiresUserGesture(false); // 允许自动播放 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); // 开启硬件加速 ``` #### 注意事项 1. **用户交互限制** 安卓要求全屏操作必须由用户点击触发,不能在`load`事件中自动执行。 2. **微信兼容性** 微信浏览器需添加`x5-video-*`系列属性才能全屏[^2]。 3. **播放受阻处理** 自动播放需配合`muted`属性: ```html <video muted autoplay>...</video> ``` 4. **全屏回调监听** ```javascript document.addEventListener('fullscreenchange', () => { console.log('全屏状态:', !!document.fullscreenElement); }); ``` --- ### 相关问题 1. 如何在iOS设备实现视频内联播放(非全屏)? 2. 微信浏览器中视频全屏播放有哪些特殊限制? 3. 如何检测当前浏览器是否支持X5内核? 4. 安卓WebView需要哪些配置才能支持视频全屏? 5. 移动端全屏播放时如何保持控制栏常显? [^1]: Android WebView播放视频并支持全屏 [^2]: 在IOS浏览中禁止全屏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易66丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值