我正在设置一个 Express.js 端点,该端点将支持解码来自客户端(相机记录(的 base64 字符串,该字符串基本上是一个编码的 webm 视频。问题是为了验证这一点,我正在尝试从服务器上编码的 base64 字符串创建一个.webm视频文件。不幸的是,由于"找不到具有支持的格式和MIME类型的视频"(Ubuntu 18.04(的错误,这会导致视频文件无法播放。我对任何其他.webm文件没有任何问题,但 base64 URL 肯定是正确的,因为我在 cliet 上使用它作为元素的来源来重播录制的内容并且工作正常。我怀疑的问题是在服务器路由上生成文件的代码有问题。
import express from "express";
import multer from "multer";
import fs from "fs";
const router = express.Router();
// ...
router.post("/upload", multer().fields([]), (req, res) => {
const formData = req.body;
// formData.vid_string is the base64 encoded string
fs.writeFileSync(
"./test.webm",
Buffer.from(formData.vid_string.split(",")[1], "base64")
);
res.sendStatus(200);
});
我还尝试更改fs.writeFileSync
代码并添加"base64"作为第三个参数,但它具有相同的结果。任何意见将不胜感激!谢谢!
确定正确的方法是删除 base64 字符串中作为 URL 规范的部分(如果这适用于您的情况,即声明 base64 数据和"video/webm"部分和尾随逗号的部分字符串(,并在结果字符串上调用 atob(( 此 atob 将代表视频的二进制字符串版本。 然后只需将该字符串写入您的新文件即可!
但是,我建议从客户端将base64URL解析为二进制字符串,因为我相当确定base64使用更多空间来考虑较小的可用字节组,如果您可以控制如何将视频发送到节点服务器。