JavaScript控制 audio和vedio相关API注意点

1) 直接调用duration导致返回NaN问题

由于浏览器在加载音视频媒体资源时是通过异步加载的,所以当调用duration属性此时资源文件还未加载,所以会返回NaN值。

如下代码

<button onclick="getVidDur()" type="button">获得视频的长度</button>
<br />
<br />
<audio id="audio" controls="controls">
    <source src="media/xy.mp3" type="audio/mp3">
</audio>
<script>
    console.log(document.getElementById("audio").duration);
</script>

此时返回值便会为NaN

解决办法:

<button onclick="getVidDur()" type="button">获得视频的长度</button>
<br />
<br />
<audio id="audio" controls="controls">
    <source src="media/xy.mp3" type="audio/mp3">
</audio>
<script>
    // 通过audio或vedio对象的canplay事件
    document.getElementById("audio").oncanplay = function(){
        console.log(this.duration);
    }
</script>

此时会正常返回媒体文件的播放总秒数(注意是以单位秒计)。

原理: 当浏览器异步加载资源完毕后会触发canplay事件,由于此时媒体文件以及准备完毕,所以就能获取到资源文件的播放长度。

2) 设置currentTime无效(本地)

由于本地流媒体文件属于磁盘读取,由于并没有通过网络进行传输。猜测浏览器读取本地资源文件类似于某种缓存机制。通过IDEA自带的静态资源服务器由于并没有携带文件内容类型标识,所以也无法对相关的本地文件进行特定的读取。

如下代码:

<br />
<br />
<audio id="audio" controls="controls">
    <source src="media/xy.mp3" type="audio/mp3">
</audio>
<button>播放</button>
<script>
    var audio = document.getElementById("audio");
    audio.currentTime = 200;
    // 通过audio或vedio对象的canplay事件
    document.getElementsByTagName("button")[0].onclick = function(){
        audio.play();
    }
</script>

此时无法对文件进行指定位置播放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
控制 HTML5 video 元素的播放和分段播放,你可以使用 JavaScript 操作 video 元素的属性和方法。以下是一些常用的属性和方法: 1. 控制播放和暂停 - `play()`: 开始播放视频 - `pause()`: 暂停视频播放 例如: ```javascript var myVideo = document.getElementById("my-video"); myVideo.play(); // 开始播放视频 myVideo.pause(); // 暂停视频播放 ``` 2. 控制视频播放位置 - `currentTime`: 获取或设置视频播放位置,单位为秒 例如: ```javascript var myVideo = document.getElementById("my-video"); myVideo.currentTime = 10; // 将视频播放位置设置为 10 秒 ``` 3. 控制视频播放速度 - `playbackRate`: 获取或设置视频播放速度,1 表示正常速度,2 表示两倍速度,0.5 表示半倍速度 例如: ```javascript var myVideo = document.getElementById("my-video"); myVideo.playbackRate = 2; // 将视频播放速度设置为两倍速度 ``` 4. 分段播放 你可以在视频播放期间监听 `timeupdate` 事件,获取视频当前播放位置,根据播放位置判断是否需要播放下一段视频。 例如: ```javascript var myVideo = document.getElementById("my-video"); var segments = [ { start: 0, end: 10 }, { start: 10, end: 20 }, { start: 20, end: 30 } ]; var currentSegment = 0; myVideo.addEventListener("timeupdate", function() { if (myVideo.currentTime > segments[currentSegment].end) { currentSegment++; if (currentSegment < segments.length) { myVideo.currentTime = segments[currentSegment].start; myVideo.play(); } } }); ``` 以上是一些常用的操作 video 元素的方法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值