H5实例教学--微信内嵌视频1(案例浅析)

图片描述

以上为案例二维码
首个H5案例解析
从头开始分析

在 iOS 上,APP 都是使用的系统自带的浏览器进行页面渲染,video 播放视频的效果是统一的,只需要考虑不同的 iOS 版本是否有不一致的地方。在 iOS 上,播放视频默认会弹出一个播放器全屏播放视频,如下效果

图片描述

播放器上下有的系统默认的控制栏,可以控制视频的播放进度、音量以及暂停或继续播放,播放视频时,视频会 “浮” 在页面上,页面上的所有元素都只能是在视频下面,这种效果显然不是我们想要的。
但好在 iOS 10 Safari 中,video 新增了 playsinline 属性,可以使视频内联播放。(微信浏览器支持)

在 webkit 的 blog 上提到

A note about the playsinline attribute: this attribute has recently been added to the HTML specification, and WebKit has adopted this new attribute by unprefixing its legacy webkit-playsinline attribute. This legacy attribute has been supported since iPhoneOS 4.0, and accordance with our updated unprefixing policy, we’re pleased to have been able to unprefix webkit-playsinline.

来源: http://www.cnblogs.com/zzsdre...
安卓实现:

TBS 内核(>=036849)支持一个叫 同层播放器 的视频播放器,这个不需要申请白名单,只需给 video 设置两个属性 x5-video-player-type="h5" 和 x5-video-player-fullscreen="true",播放效果

结合IOS和安卓微信下同层播放器的实现代码:

<video preload="load" data-link="http://wag.i-h5.cn/dj/wyf/video/wb.mp4"  playsinline x-webkit-airplay="true" webkit-playsinline
       x5-video-player-type="h5" x5-video-player-fullscreen="true" id="video" width="100%" src="http://wag.i-h5.cn/dj/wyf/video/wyf.mp4"></video>

稍微讲一下video的事件

此案例并没有使用timeupdate时间来实现播放进度的监听
在此案例中
要实现第一段视频播放完,出现选项给用户进行视频的选择交互。
我们需要在出现选项时将视屏暂停,
先来看下代码:

function getTime(obj){
    obj.timer = setInterval(function(){
        var t = obj.currentTime;
        if(isAndroid) {
            // 选项出现
            if(Math.abs(t - 32.13) <= .1 && istest) {
                selectBtn.style.display = 'block';
                obj.pause();
                clearInterval(obj.timer);
            }
            // // 墨鏡播放完必,镯子播放完毕,帽子播放完毕
            if(Math.abs(t) > 46.04 && typenum == 1 || Math.abs(t) > 65.16 && typenum == 2 || Math.abs(t) > 80.64 && typenum == 4) {
                selectBtn.style.display = 'block';
                obj.pause();
                istest = true;
                clearInterval(obj.timer);
            }
        } else {
            // 选项出现
            if(Math.abs(t - 32.13) <= .1 && istest) {
                selectBtn.style.display = 'block';
                // obj.currentTime = 32.13;
                obj.pause();
                clearInterval(obj.timer);
            }
            // // 墨鏡播放完必,镯子播放完毕,帽子播放完毕
            if(Math.abs(t) > 46.04 && typenum == 1 || Math.abs(t) > 65.16 && typenum == 2 || Math.abs(t) > 80.24 && typenum == 4) {
                selectBtn.style.display = 'block';
                obj.currentTime = 32.13;
                obj.pause();
                istest = true;
                clearInterval(obj.timer);
            }
        }
        // 项链播放,提前呼出点击按钮
        if(t > 172) {
            // aLink.style.display = 'block';
            // window.location.href = 'http://wag.i-h5.cn/dj/wyf/fenx.html';
        }
    },20);
}
/**
 * 视频开始play
 */
video.addEventListener('play', function(){
    // ovstatus = 1;
    console.log("play")
    getTime(this);
}, false);

该案例使用了定时器,在视频开始事件触发时开始每20ms触发一次,判断当前视频进度,若到达需停止的进度时(第一段片段播放完毕,或选项片段结束时),暂停视频,并出现浮层div块,为用户提供交互。

点击选项后跳到对应的进度,继续播放视频。以上为该案例主要需要解决的问题。

安卓浏览器左上角会出现推出播放的返回按钮,当点击按钮时将退出播放
退出播放时,我们需要做相应的处理。TBS 有提供相应的事件,不过不同的版本有一点差异

                   TBS < 036849    036849 <= TBS < 036900      036900 <= TBS
是否支持同层播放器        否                  是                     是
退出全屏播放时触发                  x5videoenterfullscreen    x5videoexitfullscreen
进入全屏播放时触发                  x5videoexitfullscreen     x5videoenterfullscreen
通过监听这两个事件就可以知道当前的播放状态

document.getElementById('video').addEventListener("x5videoexitfullscreen", function(){
    alert("exit fullscreen")
})

document.getElementById('video').addEventListener("x5videoenterfullscreen", function(){
    alert("enter fullscreen")
})

在对话框中发送 //gettbs 可以查看相关信息,tbsCoreVersion 就是当前安装的 TBS 内核版本。

补充资料:
H5视频播放优化:
http://www.xuanfengge.com/htm...
videoAPI:
http://www.w3school.com.cn/ta...

UniApp 是一套基于 Vue.js 的跨平台开发框架,它可以让你用一套代码同时构建 Web、H5、iOS、Android 等多端应用。对于微信登录功能,在 UniApp 中,你可以使用微信开放平台提供的 SDK 来集成。 微信登录的过程通常包含以下步骤: 1. 注册和配置:首先,你需要在微信公众平台上注册一个小程序或公众号,然后在开发者中心创建 AppID,并在 UniApp 项目的 config.json 文件中配置微信登录的相关信息,如 AppID 和 AppSecret。 ```json { "uniCloud": { "login": { "social": { "wxLogin": { "appId": "<your_app_id>", "appSecret": "<your_app_secret>" } } } } } ``` 2. 引入 SDK:在需要使用微信登录的地方引入 UniCloud 的登录模块。 3. 实现登录功能:在需要登录的地方调用微信登录接口,如 `uni.login()` 方法,传入类型为 `social.wxLogin`。 ```javascript uni.login({ provider: 'wxLogin', // 使用微信登录 success: function (res) { uni cloud.request({ url: '<your-server-url>', // 后端处理登录请求的 URL data: res.detail, method: 'POST', success: function (data) { // 登录成功后处理数据,如存储用户信息 }, fail: function (err) { console.error('登录失败:', err); } }); }, fail: function (err) { console.error('登录失败:', err); } }) ``` 4. 后端处理:接收到微信登录的回调后,你的后端服务器会验证授权码获取用户的 OpenID,进一步通过微信 API 获取用户的个人信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值