html5play函数播放失败状态码_html5play函数失败码含义【步骤】

11次阅读

html5没有html5play函数,实际是原生play()方法返回promise,失败时reject出domException,其name属性(如NotAllowedError)标识错误类型,应通过try/catch或.catch()捕获并判断name而非code或数字码。

html5play函数播放失败状态码_html5play函数失败码含义【步骤】

html5play 函数根本不存在,别再搜了

HTML5 没有叫 html5play 的函数。这是常见误传,往往源于混淆了原生 HTMLMediaElement 方法(如 play())与某些封装库(比如旧版 video.js百度播放器 SDK 或自研工具函数)的私有命名。直接搜索“html5play 失败码”会找不到标准依据,也查不到权威文档。

真正触发失败的是 play() 方法,错误在 Promise reject 里

现代浏览器中,调用 video.play()audio.play() 返回一个 Promise。播放失败时,Promise 被 reject,其 reason 是一个 DOMException 实例,name 属性即为实际错误类型:

  • "NotAllowedError":最常见,用户未与页面交互(如点击)就自动调用 play()浏览器阻止静音/非静音自动播放
  • "NotSupportedError":媒体资源格式不被支持(如 safari 播放 .webm)、或源地址 404/跨域且无 CORS
  • "AbortError":加载过程中调用了 load()src 被重设,中断了当前播放流程
  • "DecodeError":文件损坏、编码参数非法(如 H.264 profile 不兼容),解码器报错

注意:code 属性(如 reason.code === 1)已废弃,不要依赖;只看 reason.name

如何稳定捕获并区分这些失败?

必须用 try/catch 包裹 await,或用 .catch() —— 不能只监听 error 事件,它不覆盖 Promise reject:

立即学习前端免费学习笔记(深入)”;

const video = document.querySelector('video'); async function safePlay() {   try {     await video.play();     console.log('播放成功');   } catch (err) {     if (err.name === 'NotAllowedError') {       console.warn('需用户手势触发,比如监听 click 后再 play');     } else if (err.name === 'NotSupportedError') {       console.error('格式不支持或资源不可达');     } else if (err.name === 'DecodeError') {       console.error('视频文件可能损坏');     }   } }

补充要点:

  • 确保 video 已插入 DOM 且 src 已设置,否则 play() 会立即 reject
  • 移动端 ios Safari 对自动播放限制极严,即使有声音也常需用户点击后才允许
  • 部分安卓 webview(尤其旧版)不返回标准 DOMException,而是字符串 error,需降级判断 typeof err === 'String'

所谓“状态码”其实是浏览器实现细节,别硬映射

有些文章列出 “-1、101、200” 等数字码,它们来自特定播放器 SDK(如腾讯云 VOD Web SDK 的 player.play()),不是 HTML5 标准。如果你看到这类码,先确认你用的到底是不是原生 —— 查看控制台是否调用了自定义对象play 方法,而不是 HTMLVideoElement.prototype.play

真正要调试,打开 DevTools → Network 查看媒体请求是否 200;Elements 面板检查 元素是否有 networkState0=EMPTY, 1=IDLE, 2=LOADING, 3=HAVE_ENOUGH_DATA)和 readyState0=HAVE_NOTHING 等),比猜状态码更可靠。

text=ZqhQzanResources