在 NodeJs 中解码 base64 编码的 webm 视频



我正在设置一个 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使用更多空间来考虑较小的可用字节组,如果您可以控制如何将视频发送到节点服务器。

最新更新