讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在HTML5中利用MediaRecorder的DataAvailable事件实现分段上传录制视频

小雪小哥_5048

小雪小哥_5048

发布时间:2026-06-03 09:40:19

|

146人浏览过

|

来源于php中文网

原创

可通过监听MediaRecorder.ondataavailable事件分段录制视频并上传,需控制录制节奏、正确拼接Blob、保证上传顺序与完整性。

如何在html5中利用mediarecorder的dataavailable事件实现分段上传录制视频

可以通过监听 MediaRecorder.ondataavailable 事件,将视频流按时间或数据量切分为多个 Blob 片段,再逐个上传到服务器。关键在于控制录制节奏、正确拼接 Blob 并处理上传顺序与完整性。

1. 初始化 MediaRecorder 并设置分段逻辑

创建 MediaRecorder 实例时,通过 timeslice 参数触发周期性 dataavailable 事件,或手动调用 stop() + start() 实现显式分段:

  • 使用 timeslice: 5000(毫秒)可每 5 秒触发一次事件,适合稳定分段
  • 若需更灵活控制(如按文件大小),建议关闭 timeslice,改用 recorder.requestData() 主动截取当前数据
  • 注意:Chrome 支持 timeslice,Firefox 需依赖 requestData() 模拟分段

2. 在 dataavailable 中收集并暂存 Blob

每次事件触发时,event.data 是一个包含该段媒体数据的 Blob。应立即保存并标记序号,避免因异步上传导致乱序:

HTML Text Extract
HTML Text Extract

从HTML页面(URL、文件或标准输入)中提取主体内容文本,去除导航、页脚、广告和模板文本。可直接传递给readability_check或其他文本工具。

下载
  • 用数组或 Map 存储 { blob, index, timestamp },例如:segments.push({ blob: event.data, index: segmentIndex++ })
  • 不建议直接上传 event.data,因为后续可能被 GC 或复用;务必用 new Blob([event.data]) 创建独立引用
  • 可选:在 Blob 上附加自定义属性(如 blob.segmentIndex = i),但注意部分浏览器会忽略非标准属性,推荐用外部结构管理

3. 分段上传并保证服务端可合并

上传每个 Blob 时需携带上下文信息,让后端能按序还原完整视频:

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

  • HTTP 请求中添加 headers,如 X-Segment-Index: 0、X-Total-Segments: 5、X-Session-ID: abc123
  • 使用 FormData 提交时,将 Blob 作为字段值,并附带隐藏字段传递索引:formData.append('segment', blob); formData.append('index', i)
  • 服务端收到所有分段后,按 index 排序,用二进制流拼接(如 Node.js 的 Buffer.concat()),再写入 MP4 文件(注意:MP4 有头部信息,纯拼接可能损坏;更稳妥方式是服务端用 FFmpeg 合并或录制为 WebM 后转封装)

4. 处理异常与完整性校验

分段上传易受网络波动影响,需增强鲁棒性:

  • 上传失败时记录失败索引,支持断点续传(服务端返回已接收的 receivedIndices,前端跳过重传)
  • 客户端可在上传前计算 Blob 的 size 和 type,上传后比对服务端返回的 receivedSize,防止传输截断
  • 全部上传完成后,发起合并请求(如 POST /merge?session=abc123),服务端校验总长度、MD5 或生成最终播放 URL

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2663

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5803

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6770

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6498

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

923

2024.05.22

C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

3429

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2388

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

1320

2023.08.02

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 10.9万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 19.4万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn