写了一个H5播放视频的功能, 遇到一些问题,记录一下,借鉴了一些博友的文章,如果有侵权请联系删除

现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera、Mozilla、Chrome),支持H.264的(Safari、IE 9、Chrome),都不支持的(IE6、7、8)。好吧,现在让我们从技术层面来认识HTML 5的视频,包括video标签的使用,视频对象可以用到的媒介属性和方法,以及媒介事件。

Video标签的使用

Video标签含有src、poster、preload、autoplay、loop、controls、width、height等几个属性, 以及一个内部使用的标签<source>。Video标签内除了可以包含<source>标签外,还可以包含当指定的视频都不能 播放时,返回的内容。

(1) src属性和poster属性

你能想象src属性是用来干啥的。跟<img>标签的一样,这个属性用于指定视频的地址。而poster属性用于指定一张图片,在当前视频数据无效时显示(预览图)。视频数据无效可能是视频正在加载,可能是视频地址错误等等。

< video  width="658" height="444" src="http://www.youname.com/images/first.mp4" poster="http://www.youname.com/images/first.png" autoplay="autoplay"></ video >

(2) preload属性

这个属性也能通过名字了解用处,此属性用于定义视频是否预加载。属性有三个可选择的值:none、metadata、auto。如果不使用此属性,默认为auto。

< video  width="658" height="444" src="http://www.youname.com/images/first.mp4" poster="http://www.youname.com/images/first.png" autoplay="autoplay" preload="none"></ video >

None:不进行预加载。使用此属性值,可能是页面制作者认为用户不期望此视频,或者减少HTTP请求。

Metadata:部分预加载。使用此属性值,代表页面制作者认为用户不期望此视频,但为用户提供一些元数据(包括尺寸,第一帧,曲目列表,持续时间等等)。

Auto:全部预加载。

(3) autoplay属性

又是一个看名字知道用处的属性。Autoplay属性用于设置视频是否自动播放,是一个布尔属性。当出现时,表示自动播放,去掉是表示不自动播放。

< video  width="658" height="444" src="http://www.youname.com/images/first.mp4" poster="http://www.youname.com/images/first.png" autoplay="autoplay" preload="none"></ video >

注意,HTML中布尔属性的值不是true和false。正确的用法是,在标签中使用此属性表示true,此时属性要么没有值,要么其值恒等于他的名字 (此处,自动播放为<video autoplay />或者<video autoplay=”autoplay” />);而在标签中不使用此属性表示false(此处不进行自动播放为<video />)。

(4) loop属性

< video  width="658" height="444" src="http://www.youname.com/images/first.mp4" poster="http://www.youname.com/images/first.png" autoplay="autoplay" loop="loop"></ video >

一目了然,loop属性用于指定视频是否循环播放,同样是一个布尔属性。

(5) controls属性

< video  width="658" height="444" src="http://www.youname.com/images/first.mp4" poster="http://www.youname.com/images/first.png" autoplay="autoplay" preload="none" controls="controls"></ video >

Controls属性用于向浏览器指明页面制作者没有使用脚本生成播放控制器,需要浏览器启用本身的播放控制栏。

控制栏须包括播放暂停控制,播放进度控制,音量控制等等。

每个浏览器默认的播放控制栏在界面上不一样。由于我浏览器的诡异问题,Firefox和Safari的Video标签不正常,所以这两个只能在网上找截图了。

(6) width属性和height属性

属于标签的通用属性了,这个不用多说。

(7) source标签

< video  width="658" height="444" poster="http://www.youname.com/images/first.png" autoplay="autoplay" preload="none" controls="controls">< source  src="http://www.youname.com/images/first.ogv" />< source  src="http://www.youname.com/images/first.ogg" /></ video >

Source标签用于给媒体(因为audio标签同样可以包含此标签,所以这儿用媒体,而不是视频)指定多个可选择的(浏览器最终只能选一个)文件地址,且只能在媒体标签没有使用src属性时使用。

浏览器按source标签的顺序检测标签指定的视频是否能够播放(可能是视频格式不支持,视频不存在等等),如果不能播放,换下一个。此方法多用于兼容不同的浏览器。Source标签本身不代表任何含义,不能单独出现。

此标签包含src、type、media三个属性。

src属性:用于指定媒体的地址,和video标签的一样。

Type属性:用于说明src属性指定媒体的类型,帮助浏览器在获取媒体前判断是否支持此类别的媒体格式。

Media属性:用于说明媒体在何种媒介中使用,不设置时默认值为all,表示支持所有媒介。你想到<style>标签的media属性了么?一样一样一样的。

(8) 一个完整的例子

< video  width="658" height="444" poster="http://www.youname.com/images/first.png" autoplay="autoplay" preload="none" controls="controls">< source  src="http://www.youname.com/images/first.ogv" />< source  src="http://www.youname.com/images/first.ogg" /></ video >

这段代码在页面中定义了一个视频,此视频的预览图为poster的属性值,显示浏览器的默认媒体控制栏,预加载视频的元数据,循环播放,宽度为900像素,高度为240像素。

第一选择视频地址为第一个source标签的src属性值,视频类别为Ogg视频,视频编码译码器为Theora,音频编码译码器为Vorbis,播放媒 介为显示器;第二选择视频地址不再累述。如果你还要兼容IE的话,可以在最后一个source标签后再加上Flash播放器的标签集,或者使用一点 JavaScript代码。

preload 属性规定是否在页面加载后载入视频。

如果设置了 autoplay 属性,则忽略该属性。

HTML 4.01 与 HTML 5 之间的差异

preload 属性是 HTML 5 中的新属性。

语法

<video preload="load" />

属性值

描述
load

规定是否预加载视频。

可能的值:

  • auto - 当页面加载后载入整个视频
  • meta - 当页面加载后只载入元数据
  • none - 当页面加载后不载入视频

1. 如何获取视频的加载进度,让视频加载完成后才让用户进入?

不能,没有任何的办法来判断视频的加载进度,而且在iOS中,只有视频在播放的时候,才临时去加载视频。因此,即使在video标签中写了preload属性也是不管用的。使用canplaythrough事件也是没法检测的,虽然video标签在加载的时候会触发canplaythrough方法,但播放时依然会有卡顿的现象,而且某些android还不支持次属性。

2. 播放视频时只有声音没有图像

有部分原因是视频的编码不正确,在mp4格式的视频中,只支持h.264的视频。我的项目中也遇到了这种情况,但不是视频编码的问题。我在自己的网络下测试时,没有这样的问题,但是在外部环境测试时就会出现黑屏、有声音没图像的情况。那么应该就是视频有点大了,然后我就把视频压缩了一下,结果还是会有这样的情况出现。

经过同事的指点,我在用户点击和视频正式播放之前添加一个loading效果,当视频正式播放的时候就取消loading。如下:

    function video_loading( $video ){$('.video_loading').show();var timer = setInterval(function(){var currentTime = $video[0].currentTime; // 检测当前的播放时间if( currentTime>0 ){$('.video_loading').hide();clearInterval( timer );}}, 100)}

完美解决黑屏和有声音没图像的问题。

看起来比较杂乱,时间匆忙记录

关于H5中的video/video标签的用法总结相关推荐

  1. php怎样查看视频播放的进度条,H5中视频与音频标签和进度条如何使用

    这次给大家带来H5中视频与音频标签和进度条如何使用,H5中视频与音频标签和进度条使用的注意事项有哪些,下面就是实战案例,一起来看一下. 最近项目中使用Html5的video和audio标签来在线播放视 ...

  2. html中ul和li标签的用法介绍

    普通的显示数据的时候,ul就是项目列表,li就是列表项,可以用来显示数据,如果用于DIV+CSS布局的话,ul+li可以替换表格的作用,具体的设置,如果宽度高度.行间距.背景边框需要配合CSS一起设置 ...

  3. 使用H5中的表单标签制作一个简单的网页登陆页面

    简单介绍H5当中的表单标签.<form></form>表示定义一个表单的开始和结束.在form标签中,有主要的三个属性,action表示声明表单中的数据的处理的url地址.me ...

  4. php中 datalist,html5 datalist标签的用法是什么?这里有datalist标签的用法实例

    本篇文章主要为大家讲述了关于html5 datalist标签的用法及html5 datalist标签的用法实例.本文说了两个常用的选项框的实例供大家选择观看,下面就让我们一起来看这篇文章吧 我们先来看 ...

  5. HTML中 <img>标签的用法

    <img> 语法 在HTML网页中经常需要插入图片,使页面更加美观,表达更加清晰准确.插入图片,在 HTML中是由<img>标签定义的,通过它可以导入需要显示的图片.<i ...

  6. mybatis中<choose>标签的用法

    choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束.当 choose 中所有 when 的条件都不满则时,则执行 otherwis ...

  7. html中ul和li标签的用法

    普通的显示数据的时候,ul就是项目列表,li就是列表项.可以用来显示数据. 如果用于DIV+CSS布局的话,ul+li可以替换表格的作用,具体的设置,如果宽度高度.行间距.背景边框等需要配合CSS一起 ...

  8. label标签在H5中的应用

    一.label标签的作用 label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单内容上. 在HTML中标签不会向用户展示任何特殊内容,它的作用是把自己与其他标 ...

  9. html5 video js控制摄像头的焦距,H5中使用video标签实现选择摄像头功能的示例

    H5中使用video标签实现选择摄像头功能的示例 发布时间:2020-12-05 10:48:03 来源:亿速云 阅读:91 作者:小新 小编给大家分享一下H5中使用video标签实现选择摄像头功能的 ...

  10. 使用H5中的video标签时,页面中间显示“暂停”图标;点击播放,图标消失;点击暂停,图标出现(play、pause、ended)

    有时候我们在做项目的过程中会遇到这样的需求: 使用H5中的video标签播放一个视频,并在视频的中心位置放置一个暂停的图标,点击后视频播放,图标消失:再次点击后,视频暂停,图标出现. 想要的效果,例下 ...

最新文章

  1. Linux服务器-使用mysql
  2. Python 精要参考(第二版) 第六章 函数与函数编程
  3. jquery 封装页面之间获取值
  4. 终于有人把JAVA虚拟机讲清楚了!
  5. python 网站文件下载-python实现下载文件的三种方法
  6. 关于release后retainCount还是1的问题
  7. 轮播插件swiper.js?
  8. php数组的元素个数,php怎么统计数组元素的个数
  9. 为什么计算机能听懂人的指令,为什么计算机有听懂命令的能力?
  10. 大数据售前的一点感悟
  11. 系统部署时的Could not load file or assembly 'Microsoft.VisualStudio.Enterprise.ASPNetHelper问题...
  12. 如何修改wampserver中mysql中字符编码的解决方案
  13. 【原】Docker学习_安装篇(一)
  14. Bfs 逃脱(牛客网)
  15. python数据分析学什么意思_什么是python数据分析
  16. solidworks迈迪设计宝_机械入门|那些看起来很牛X的机械结构,是如何设计的?...
  17. c语言 背包算法,c语言背包问题(背包最大容量c语言算法)
  18. 前端和后端的英文_前端工程师和后端工程师
  19. ffmepg安装yasm之后还是出现nasm/yasm not found or too old. Use --disable-x86asm for
  20. 华为员工晒百万收入,网友:看来我对华为也有误解

热门文章

  1. 财务管理计算机实验日志5天,关于财务管理的实习日记范文
  2. git程序多版本维护方案
  3. 多谢您―skycc群发软件
  4. 树莓派使用Openvino库进行车牌检测
  5. 有苦有乐的算法 --- 图的宽度优先遍历
  6. 小伙伴们都惊呆了!玩转raid10
  7. NoSQL数据库优缺点
  8. 小鹿课堂:5个迹象看透孩子隐藏的“心理疲劳”
  9. Python内置函数—vars的具体使用方法
  10. Android学习之仿QQ側滑功能的实现