浏览器选择文件上传
1 | const chunkSize = 2 * 1024 * 1024; // 每个chunk的大小,设置为2兆 |
本地文件上传
获取文件分片
1 | let stats = fs.statSync(filepath);//读取文件信息 |
获取文件Hash值
1 | const hashFile = (file) => { |
Node上传本地文件
1 | let that = this; |
关键点
记录已经读取的分片数量 当所有分片都已经读取后再调用合并接口
录制屏幕后上传
获取流
1 | async record_screen_audio() { |
创建录制器
1 | createRecorder(stream) { |
保存
1 | saveMedia(blob) { |
获取文件分片
1 | async uploadfile() { |
上传分片
1 | uploadfile_pian() { |
录制屏幕同时上传
推荐这种方式
属性
1 | uploadinfo: { |
录制屏幕
1 | async record_screen_audio() { |
录制器
1 | createRecorder(stream) { |
上传分片
1 | uploadByBlob(blob, piece) { |
停止并合并
1 | stopRecord() { |
注意
这里没有调用
recorder.stop()
而是调用recorder.pause()
原因是调用stop后所有的分片都会再触发一次上传
合并
1 | mergevideo() { |
相关
Blob说明https://developer.mozilla.org/zh-CN/docs/Web/API/Blob
https://developer.mozilla.org/zh-CN/docs/Web/API/MediaRecorder/ondataavailable
MediaRecorder.ondataavailable
事件处理程序(part of the MediaStream记录API)处理event("dataavailable")
事件,让您在响应运行代码数据被提供使用。
dataavailable
当MediaRecorder将媒体数据传递到您的应用程序以供使用时,将触发该事件。数据在包含数据的Blob
对象中提供。这在四种情况下发生:
媒体流结束时,所有尚未传递到
ondataavailable
处理程序的媒体数据都将在单个Blob
中传递。当调用
MediaRecorder.stop()
时,自记录开始或dataavailable
事件最后一次发生以来已捕获的所有媒体数据都将传递到Blob
中;此后,捕获结束。调用
MediaRecorder.requestData()
dataavailable
时,将传递自记录开始或事件最后一次发生以来捕获的所有媒体数据;然后Blob
创建一个新文件,并将媒体捕获继续到该blob中。如果将
timeslice
属性传递到开始媒体捕获的MediaRecorder.start()
方法中,dataavailable
则每timeslice
毫秒触发一次事件。这意味着每个Blob都有特定的持续时间(最后一个Blob除外,后者可能更短,因为它将是自上次事件以来剩下的所有东西)。因此,如果该方法调用看起来像这样-recorder.start(1000);
的dataavailable
事件将媒体捕捉的每一秒发生火灾后,我们的事件处理程序将被称为与媒体数据的BLOB每秒即坚持一个第二长。您可以
timeslice
与MediaRecorder.stop()
和MediaRecorder.requestData()
一起使用,以产生多个相同长度的Blob,以及其他较短的Blob。