HTML5 基础(3)—— HTML5音视频详解

本文详细介绍了HTML5中的video/audio标签,包括基础属性如controls、autoplay等,以及API事件和常用方法。通过示例展示了如何创建自定义样式的播放器,并推荐了videojs和jPlayer两款开源插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、音视频基础知识

a 视频 音频
说明 连续的画面、特定格式编码、媒体流 特定格式编码,媒体流
web格式 mp4、ogv 、webm mp3、ogg、wav

早期播放视频和音频需要使用flash,HTML5后使用video/audio,
但是苹果端和移动端是不支持flash的。

二、video/audio标签及其常用属性

常用的属性前面也有提过,这里在写一下

  • controls 播放控制台
  • autoplay 网页加载完成后自动播放
  • loop 循环播放
  • source
  • preload
  • poster(video)视频封面图片

ps:音视频src可以使用网络资源

(一)video/audio两种写法

src中可以写网络地址
写法1:

<video src="./video/demo.mp4" width="640px" loop autoplay>
    当前浏览器不支持video标签
</video>

写法2(可以兼容多种浏览器):

<video width="640px" loop autoplay controls poster="./img/demo.jpg">
    <source src="./video/demo.mp4" type="video/mp4"/>
    <source src="./video/demo.ogv" type="video/ogv"/>
    <source src="./video/demo.webm" type="video/webm"/>
    当前浏览器不支持video标签
</video>


三、video/audio API

(一)video/audio API事件

要绑定事件的话原生js要on+event

编号 事件 触发条件
* 当音频/视频处于加载过程中时,会依次发生以下事件
1 loadstart 开始加载视频的元数据
2 durationchange 时长改变事件
3 loadedmetadata 当浏览器已加载音频/视频的元数据时触发
4 progress 请求视频事件
5 suspend 当浏览器刻意不获取媒体数据,延迟下载事件
6 loadeddata 视频数据已经加载事件
7 canplay 文件就绪可以开始播放
8 canplaythrough 当浏览器可在不因缓冲而停顿的情况下进行播放时
* 其他
9 emptied 当目前的播放列表为空时
10 ended 当目前的播放列表已结束时
11 error 当在音频/视频加载期间发生错误时
12 play 开始播放视频时触发
13 playing 视频正在播放中触发
14 timeupdate 视频正在播放中会不断触发,播放位置改变事件
15 pause 当音频/视频已暂停时触发
16 volumechange 当音量已更改时
17 ratechange 当音频/视频的播放速度已更改时
18 seeked 进度条定位完成时触发
19 seeking 正在拖动视频进度条触发
20 stalled 当浏览器尝试获取媒体数据,但数据不可用时
21 waiting 当视频由于需要缓冲下一帧而停止
22 abort 当音频/视频的加载已放弃时

这些事件触发顺序在网络加载和本地加载是有区别的

例子

<video width="640px" loop controls poster="./img/demo.jpg" id="myVideo">
    <source src="./video/demo.mp4" type="video/mp4"/><!--里面改成网络路径就是网络加载-->
    <source src="./video/demo.ogv" type="video/ogv"/>
    <source src="./video/demo.webm" type="video/webm"/>
</video>
<script>
    var videoEvent = [
        "abort",    
        "canplay",
        "canplaythrough",   
        "durationchange",
        "emptied",
        "ended",    
        "error",    
        "loadeddata",
        "loadedmetadata",   
        "loadstart",    
        "pause",    
        "play", 
        "playing",  
        "progress", 
        "ratechange",   
        "seeked",   
        "seeking",  
        "stalled",  
        "suspend",  
        "timeupdate",   
        "volumechange", 
        "waiting"   
    ];

    var videoEle = document.getElementById("myVideo");

    videoEvent.forEach(function(event){
    
    
        videoEle["on"+event] = function(){
    
    
            console.log(event);
        }
    });
</script>

本地加载
这里写图片描述
网络加载
这里写图片描述
网络加载会不断的请求媒体流,所以会不断触发progress和suspend事件。

(二)video.audio API常用方法

方法 说明
load() 加载
play() 播放视频
pause() 暂停视频
<video id="myVideo" width="600px">
    <source src="./video/demo1.mp4" type="video/mp4">
    <source src="./video/demo1.webm" type="video/webm">
    <source src="./video/demo1.ogg" type="video/ogg">
    当前浏览器版本过低不支持HTML5标签
</video>
<button id="start">开始</button>
<button id="stop">暂停</button>
<script type="text/javascript">
    var videoEle  =document.getElementById("myVideo");
    //视频播放按钮
    document.getElementById("start").onclick = function(){
    
    
        videoEle.play();        
    }
    //视频暂停按钮
    document.getElementById("stop").onclick = function(){
    
    
        videoEle.pause();
    }
</script>

这里写图片描述


(三)video/audio API常用属性

属性 说明
currentSrc 视频地址
duration 视频总时长(秒)
currentTime 视频当前时间(可以设置)秒
volume 当前音量(可以设置)百分比
buffered 当前缓冲量(videoObj.buffered.end(0))
paused 是否暂停
ended 是否结束
muted 是否静音
playbackRate 视频播放速率(可以设置)
<video id="myVideo" controls width="600px">
    <source src="./video/demo1.mp4" type="video/mp4">
    <source src="./video/demo1.webm" type="video/webm">
    <source src="./video/demo1.ogg" type="video/ogg">
    当前浏览器版本过低不支持HTML5标签
</video>
<button id="start">开始</button>
<button id="stop">暂停</button>
<script type="text/javascript">
    var videoEle  =document.getElementById("myVideo");

    document.getElementById("start").onclick = function(){
        videoEle.play();        
    }
    document.getElementById("stop").onclick = function(){
        videoEle.pause();
    }

    //绑定video的相关事件
    //元数据被加载时触发
    videoEle.onloadedmetadata = function(){
        console.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值