You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecordRTC分片上传webm后如何用PHP在服务端合并blobs为完整视频

问题根因

只有第一个分片可播放是WebM格式的正常特性:RecordRTC生成的WebM分片仅第一片包含完整的视频头元数据(编码参数、轨道信息等),后续分片仅包含裸媒体流片段,缺少头信息所以无法单独解码播放。


解决方案

方案1:直接二进制拼接(快速实现)

同一个录制会话的所有分片按上传顺序做二进制拼接,生成的文件大多数现代播放器(Chrome、VLC等)可直接播放。
Linux服务端可直接执行命令:

cat blob1.webm blob2.webm blob3.webm > full_video.webm

Node.js服务端参考代码:

const fs = require('fs');
const writeStream = fs.createWriteStream('full_video.webm');
// 必须严格按分片生成顺序写入
const sliceOrder = ['blob1.webm', 'blob2.webm', 'blob3.webm'];
sliceOrder.forEach(path => writeStream.write(fs.readFileSync(path)));
writeStream.end();

该方案兼容性一般,部分老旧播放器可能无法识别。

方案2:FFmpeg转封装(高兼容,推荐)

通过FFmpeg做无损转封装修复文件索引,可生成标准WebM格式文件,全平台可播放,且不会损失画质、处理速度极快。

  1. 先创建分片列表文件filelist.txt,按顺序写入所有分片路径:
file 'blob1.webm'
file 'blob2.webm'
file 'blob3.webm'
  1. 执行FFmpeg合并命令:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy full_video.webm

注意事项

  • 分片必须严格按生成/上传顺序拼接,顺序错误会导致视频花屏、无法播放
  • 不可跨不同录制会话混用分片,每个会话的头信息唯一,混用会导致解码失败

内容的提问来源于stack exchange,提问作者Luca Pennisi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:36:03