前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HTML5 Audio & Video - 兼容性总结(一)

HTML5 Audio & Video - 兼容性总结(一)

原创
作者头像
用户9253515
发布于 2021-12-27 07:27:26
发布于 2021-12-27 07:27:26
1.6K00
代码可运行
举报
文章被收录于专栏:Android开发技术Android开发技术
运行总次数:0
代码可运行

工作中的总结和记录,第一次写,有问题烦请指出,会持续记录更新...

一、audio

1、监听播放完成

监听 ended 事件不准确,可以监听 timeupdate 事件,判断 当前播放进度 currentTime 大于等于 总时长 duration 时,就是播放完成;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var oAudio = document.getElementById('audio_player');
oAudio.addEventListener('timeupdate', function () {  
  // 监听播放完成,ended 事件不准确  
  if (oAudio.currentTime >= oAudio.duration) {    
    _this.endFn();  
  }}, 
false);

2、设置当前音频播放时间点

ios系统直接设置无效,监听canplay(可播放时)再设置currentTime才可以;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (isIos) {   
    oAudio.addEventListener('canplay', () => {       
        oAudio.currentTime = '';   
    }, { once: true })
} else {  // 安卓没有 canplay 事件    
    oAudio.currentTime = '';
}

3、音频打点

android 音频打点 在 play 监听里处理,ios 在canplay里处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (isIos) {       
    oAudio.addEventListener('canplay', () => {       
         // ios 音频打点 可以在这里处理
    }, { once: true })
} else {  // 安卓没有 canplay 事件    
    oAudio.addEventListener('play', function () {        
        if (Util.isAndroid) {       
            // 打点代码     
        }
    }, { once: true });
}

4、设置音频加载 loading 效果

ios 可监听 canplay 事件时移除 loading 效果,监听 loadstart 和 loadeddata 事件时添加 loading 效果;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (isIos) { 
    oAudio.addEventListener('loadstart', () => {    
        if (isIos) {        
            _this.isLoadaudio = true;    
        }
    }, false)
    oAudio.addEventListener('loadeddata', () => {    
        if (isIos) {        
            _this.isLoadaudio = true;    
        }
    }, false)
   
    oAudio.addEventListener('canplay', () => {        
        _tihs.isLoadaudio = false;    
    }, { once: true }
)}

安卓不建议添加 loading 效果,因为没有准确的事件监听可以移除,否则只能加上不能移除(安卓支持 loadstart 和 loadeddata,不支持 canplay)

5、关于自动播放的问题:需要触发一次才可播放;

6、多音频 audio 实现连续播放:监听当前音频播放完成之后,ios 继续用同一个 audio 播放器对象,替换成新的src播放地址,可以实现连续播放效果;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<audio name="media" id="audio_player" preload>     
    <source :src="audio_url" type="audio/mpeg">
</audio>

var oAudio = document.getElementById('audio_player');
oAudio.src = self.pptData.ppt_list[index].audio_url;
oAudio.play();

7、设置监听事件只执行一次,否则会执行多次

addEventListener 第3个参数设置为 { once: true };

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
oAudio.addEventListener('play', function () {}, { once: true });

8、监听微信浏览器后台运行时,禁止播放

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).on('visibilitychange', () => {
    var isHidden = document.hidden;
    var oAudio = document.getElementById('audio_player');
    if (isHidden) { // 离开微信浏览器,后台运行
        // 状态改为暂停
    } else {  // 再次进入浏览器
        if (oAudio.paused) { // 锁屏时点击暂停了
            // 状态改为暂停            
        } else { 
            // 状态改为播放
        }          
    }        
})

二、video

1、在X5内核中让video标签播放不自动全屏

只需要给video加上 webkit-playsinline playsinline x5-playsinline 即可(重点是x5-playsinline 起的作用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<video class="qvideo" id="qvideo-wrap" playsinline webkit-playsinline x5-playsinline>
</video>

注:x5内核-安卓下不能添加airplay="allow" x5-video-player-fullscreen="true" x-webkit-airplay="allow"(添加了之后playsinline属性就失效了)

2、安卓手机上,视频层级最高,其它弹窗等会被遮挡;

可在弹窗等出现的时候,视频高度设置为0;

本文转自 https://juejin.cn/post/6844903839825395719,如有侵权,请联系删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
动态规划入门——经典的完全背包与多重背包问题
上一讲当中我们一起学习了动态规划算法中的零一背包问题,我们知道了所谓的零一背包是指每一种物品只有一个,所以它的状态只有0和1两种,即拿或者不拿。而今天我们要来讨论物品不止有一个的情况,物品不止有一个也分两种,一种是不作任何限制,要多少有多少,这种称为完全背包问题,另一种是依然有个数限制,这种称为多重背包问题。
TechFlow-承志
2020/03/28
3K0
动态规划入门——多重背包与单调优化,从此登堂入室
在之前的文章当中,我们介绍了多重背包的二进制拆分的解法。在大多数情况下,这种解法已经足够了,但是如果碰到极端的出题人可能还是会被卡时间。这个时候只能用更加快速的方法,也就是今天我们要一起来看的单调优化。
TechFlow-承志
2020/04/07
5280
动态规划入门——多重背包与单调优化,从此登堂入室
DP:背包问题----0/1背包问题
背包问题(Knapsack Problem)是一类经典的组合优化问题,在计算机科学和数学中有广泛应用。其基本问题是:
用户11305458
2024/10/09
2150
DP:背包问题----0/1背包问题
【动态规划】完全背包问题
在上一篇中,我们对01背包问题进行了比较深入的研究,这一篇里,我们来聊聊另一个背包问题:完全背包。
弗兰克的猫
2019/05/25
1.2K0
【算法学习】动态规划
动态规划(dynamic programming)是一种基础的算法设计思想。作为一种寻找最优解的通用方法,它是在20世纪50年代由美国数学家Richard Bellman(也就是之前最短路径问题中Bellman ford算法的发明者之一)所发明的。
短短的路走走停停
2019/11/10
7470
【算法学习】动态规划
【地铁上的面试题】--基础部分--数据结构与算法--动态规划和贪心算法
动态规划是一种解决多阶段决策问题的算法思想,它通过将问题划分为若干个子问题,并保存子问题的解来求解原问题的方法。动态规划的特点包括以下几个方面:
喵叔
2023/07/09
4570
【愚公系列】2023年12月 五大常用算法(三)-动态规划算法
动态规划算法的基本思想是将原问题分解为若干个子问题,并先求解子问题,再根据子问题的解得到原问题的解。这种方法的优点在于避免了重复计算,从而提高了算法的效率。
愚公搬代码
2023/12/14
2791
动态规划入门
       动态规划是一种常见的算法设计方法,主要用于优化多阶段决策问题的求解过程,具有高效性和可靠性。其基本思想是将待求解问题分解成若干个子问题,逐个求解这些子问题,并保存每个子问题的结果,避免重复计算,以便快速地求出原问题的解。动态规划主要应用于最优化问题,如最长公共子序列、背包问题等。
周小末天天开心
2023/10/16
2720
动态规划入门
动态规划——背包问题(详解)
动态规划是我最早接触的算法,一开始非常简单,固定模板题,后来愈发愈发难起来了,条件,状态压缩等等,难点主要是,状态怎么表示,状态转移方程怎么写,这篇文章将会从背包五大问题详解,希望能帮助到大家去类比,思考其他动态规划题目。
全栈程序员站长
2022/09/17
6510
动态规划——背包问题(详解)
动态规划解决背包问题
1.动态规划 算法的核心思想是:将大问题划分成小问题进行解决,从而一步步获取最优解的处理算法
暴躁的程序猿
2022/03/24
3550
动态规划解决背包问题
Python 算法基础篇:背包问题的动态规划解法
背包问题是计算机科学中一个重要的组合优化问题,动态规划是解决该问题的高效算法技术。本篇博客将重点介绍背包问题的动态规划解法,包括状态定义、状态转移方程、边界条件和状态转移过程,并通过实例代码演示动态规划算法的实现,每行代码都配有详细的注释。
小蓝枣
2023/07/25
7280
Python算法探秘:动态规划的巧妙应用与实现技巧
动态规划是一种用于解决复杂问题的优化技术,它通过将问题分解为子问题,并存储子问题的解来避免重复计算,从而提高算法的效率。
测试开发囤货
2023/08/08
2620
Python算法探秘:动态规划的巧妙应用与实现技巧
动态规划——0/1背包问题(全网最细+图文解析)「建议收藏」
如果对动态规划解题思路以及步骤和如何推导转移方程还不清楚的同学可以去看一下我前面发的一篇DP大总结希望能够帮到你:数据结构与算法—算法篇之动态规划(一)
全栈程序员站长
2022/09/17
3.4K0
动态规划——0/1背包问题(全网最细+图文解析)「建议收藏」
【动态规划篇】01 背包的逆袭:如何用算法装满你的 “财富背包”
01 背包问题是一个经典的组合优化问题,可以描述为:给定一个固定容量为C 的背包和n 个物品,每个物品i有其对应的重量wi和vi价值 ,要求在不超过背包容量的前提下,选择若干物品放入背包,使得放入背包中的物品总价值最大。这里的 “01” 表示对于每个物品,我们只有两种选择:放入背包(用 1 表示)或不放入背包(用 0 表示)。
羑悻的小杀马特.
2025/01/23
1000
【动态规划篇】01 背包的逆袭:如何用算法装满你的 “财富背包”
总结——01背包问题 (动态规划算法)
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。
全栈程序员站长
2022/09/17
5860
动态规划解决01背包问题
一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
Christal_R
2019/09/11
8590
八十八、从斐波那契数列和零一背包问题探究动态规划
本人看了vivo,阿里巴巴的校招算法题,可以明确知道绝对有动态规划。如果没有,那么出题的面试官真的没有水平。跌了N次的动态规划,Runsen最近也拼命搞动态规划。这篇文章浪费了三天时间。
润森
2022/08/17
4460
八十八、从斐波那契数列和零一背包问题探究动态规划
背包九讲——分组背包问题
分组背包问题(Grouped Knapsack Problem)是组合优化中的一个问题,它是经典的背包问题的变种。在分组背包问题中,有多个物品组,每组中的物品不可分割,并且每组中的物品数量至少有一个。目标是在不超过背包容量的前提下,选择物品的组合,使得总价值最大。
摆烂小白敲代码
2024/11/24
2340
背包九讲——分组背包问题
背包九讲——背包问题求具体方案
上一篇说了一下背包问题求方案数,下面进行深化一点就是求具体方案了。同上一篇这些问题都是在01背包、多重背包、完全背包基础上演化来的,求具体方案问题会问你一种具体方案(编号序列的字典序最小)或者打印所有具体方案,一般的问题都是问你第一种。若为第二种问法,建议使用C语言的printf进行打印,因为打印所有具体方案,当数据量很大时会有很多输出,使用printf会比cout快一点。根据问题的具体类型,常见的背包问题包括:
摆烂小白敲代码
2024/11/24
1450
背包九讲——背包问题求具体方案
动态规划算法
动态规划算法将递归算法写成非递归算法,算法把子问题的答案系统的记录在一个表内减少了对子问题的反复求解,提高程序的运行效率。
_春华秋实
2023/08/27
1960
推荐阅读
相关推荐
动态规划入门——经典的完全背包与多重背包问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档