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

时间:2019-04-15 23:15:00

标签: node.js base64 decoding 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”添加为第三个参数,但结果相同。 任何输入将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

我非常确定执行此操作的正确方法是删除URL规范中的base64字符串部分(如果这适用于您指出base64数据的部分字符串和“ video / webm”部分和结尾的逗号),并在结果字符串上调用atob(),此atob将代表视频的二进制字符串版本。然后只需将该字符串写入新文件即可!

但是,我建议从客户端将base64URL解析为二进制字符串,因为如果您可以控制视频的显示方式,我可以肯定的是base64使用更多空间来占用较小的一组可用字节。发送到节点服务器。