javascript如何操作音视频_相关API有哪些基础用法【教程】
技术百科
紅蓮之龍
发布时间:2026-01-28
浏览: 次 JavaScript操作音视频的核心是理解HTMLMediaElement基类及其事件、属性和方法;所有和元素均继承自它,90%需求由此解决。
JavaScript 操作音视频的核心不是靠“教程式记忆”,而是理解 HTMLMediaElement 这个基类,以及围绕它的事件、属性和方法。所有 和 元素都继承自它,90% 的日常需求靠它就能解决。
如何控制播放/暂停/跳转?用 play()、pause()、currentTime
这是最常触发的交互。注意:现代浏览器对自

play() 必须由用户手势(如 click)触发,否则会抛出 NotAllowedError。
-
element.play()返回 Promise,需处理失败情况:button.addEventListener('click', () => { video.play().catch(e => console.warn('播放被阻止:', e.name)); }); -
element.pause()无返回值,可随时调用 -
element.currentTime = 30直接跳到第 30 秒;读取时是浮点数(单位:秒),精度取决于媒体容器和浏览器 - 设置
currentTime后不会立即生效,要监听seeking(开始跳转)和seeked(跳转完成)事件
怎么监听加载和播放状态?关键事件有 canplay、loadeddata、timeupdate
别依赖 load 或 readyState === 4 来判断是否能播——它们太早或太晚。实际开发中这几个事件更可靠:
-
canplay:浏览器已获取足够数据,可以开始播放(但可能卡顿)。适合启用播放按钮 -
loadeddata:第一帧图像/音频已解码完成。适合做封面图隐藏、初始化进度条 -
timeupdate:播放位置变化时频繁触发(通常每 200–250ms 一次)。用来更新进度条 UI,但别在里面做重计算 - 错误监听必须加
error事件,video.error是MediaError对象,code字段告诉你具体问题(如MediaError.MEDIA_ERR_NETWORK)
volume、muted、playbackRate 怎么设才稳定?
这些属性看似简单,但受策略和硬件影响大:
-
volume是 0–1 的浮点数,设为 0 等价于静音,但不如直接设muted = true可靠(尤其在 iOS 上) -
muted是布尔值,设为true会绕过大部分自动播放限制,且不触发volumechange事件 -
playbackRate默认是 1,可设为 0.5–2.0(部分浏览器支持更高,但非标准)。设完不一定立刻生效,需监听ratechange事件确认 - 某些设备(如 macOS Safari)会忽略
volume设置,只响应系统音量;此时muted是唯一可控入口
为什么 duration 初始是 NaN?怎么拿到真实时长?
duration 在元数据未加载完成前就是 NaN,不是 bug。它依赖 loadedmetadata 事件:
- 监听
loadedmetadata事件后读取duration,此时值才可信 - |直播|流(如 HLS、DASH)的
duration可能一直是Infinity,因为没有终点 - 如果服务器没返回
Content-Length或没开启Accept-Ranges,duration可能无法解析,video.duration保持NaN,这时只能靠服务端提供时长或估算
真正难的不是调用哪个 API,而是判断当前状态是否允许你调用它——比如用户没点过页面、视频还没加载元数据、网络突然中断。把状态机理清楚,比背 API 更重要。
# 这是
# 加载
# 尤其是
# 时长
# safari
# 音视频
# 跳转
# 还没
# 浏览器
# 设为
# mac
# ui
# Error
# 对象
# macos
# cos
# javascript
# java
# html
# 为什么
# 事件
# bug
# 继承
# ios
# promise
# Length
# 进度条
# 浮点数
# dash
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用Golang实现容器自动化运维_Golan
- Go 中 defer 语句在 goroutine
- Windows10如何更改计算机工作组_Win10
- Win11怎么关闭定位服务_保护Win11位置隐私
- 一文详解网站被黑客入侵挂马解决办法
- 一文教你快速开通网站LOGO图
- 如何在Golang中处理通道发送接收错误_防止阻塞
- 如何使用 Selenium 正确获取篮球参考网站球
- 如何使用Golang recover捕获panic
- c++ reinterpret_cast怎么用 c
- php后缀怎么变mp4能播放_让php伪装mp4正
- 如何在Golang中实现CI/CD流水线自动化测试
- Win11怎么设置多显示器任务栏 Win11扩展任
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- Python迭代器生成器进阶教程_节省内存与懒加载
- windows 10专注助手怎么关闭_window
- XAMPP 启动失败(Apache 突然停止)的终
- php订单日志怎么在swoole写_php协程sw
- c# 在高并发场景下,委托和接口调用的性能对比
- 如何在 Go 中高效缓存与分发网络视频流
- Win11怎么开启移动热点_Windows11共享
- 如何使用Golang实现多重错误处理_Golang
- Windows10如何查看蓝屏日志_Win10使用
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- Win11怎么设置闹钟_Windows 11时钟应
- Python对象生命周期管理_创建销毁说明【指导】
- 如何使用Golang处理网络超时错误_Golang
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- 如何关闭Win10自动更新更新_Win10系统自动
- 如何使用正则表达式批量替换重复的“-”模式为固定字
- Flask 表单数据通过 SMTP 发送邮件的完整
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Windows10系统怎么查看硬盘健康_Win10
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- php命令行怎么运行_通过CLI模式执行PHP脚本
- 为什么Go需要go mod文件_Go go mod
- Win11怎么关闭内容自适应亮度_Windows1
- Linux怎么修改用户密码_Linux系统pass
- php怎么下载安装后测试是否成功_简单脚本验证方法
- Win11怎么设置虚拟内存_Windows 11优
- Windows10电脑怎么设置防火墙出站规则_Wi
- Win11怎么关闭通知消息_屏蔽Windows 1
- Win10怎样安装Excel数据分析工具_Win1
- Windows10系统怎么查看设备管理器_Win1
- 如何在 Go 中判断变量是否为函数类型
- Python函数参数高级用法_默认值与可变参数解析
- C++ STL算法库怎么用?C++常用算法函数(s
- 如何在Golang中使用内置函数_Golangle
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- PHP主流架构怎么部署到Docker_容器化流程【

QQ客服