我正在设置一个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”添加为第三个参数,但结果相同。
任何输入将不胜感激!谢谢!
答案 0 :(得分:0)
我非常确定执行此操作的正确方法是删除URL规范中的base64字符串部分(如果这适用于您指出base64数据的部分字符串和“ video / webm”部分和结尾的逗号),并在结果字符串上调用atob(),此atob将代表视频的二进制字符串版本。然后只需将该字符串写入新文件即可!
但是,我建议从客户端将base64URL解析为二进制字符串,因为如果您可以控制视频的显示方式,我可以肯定的是base64使用更多空间来占用较小的一组可用字节。发送到节点服务器。