在 NodeJs 中解码 base64 编码的 webm 视频
Posted
技术标签:
【中文标题】在 NodeJs 中解码 base64 编码的 webm 视频【英文标题】:Decoding base64 encoded webm video in NodeJs 【发布时间】:2019-04-15 23:15:00 【问题描述】:我正在设置一个 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】:我很确定这样做的正确方法是删除作为 URL 规范的 base64 字符串部分(如果这适用于您的情况,即表示 base64 数据和“video/webm”的部分字符串部分和结尾的逗号,) 并在结果字符串上调用 atob() 此 atob 将表示视频的二进制字符串版本。然后只需将该字符串写入您的新文件!
但是,我建议从客户端将 base64URL 解析为二进制字符串,因为如果您可以控制视频的显示方式,我相当确定 base64 会使用更多空间来处理较小的可用字节组发送到节点服务器。
【讨论】:
此外,您可以直接在客户端记录媒体并将块包装为文件,ondataavailable 获取块,然后您可以从那里将其附加到 FileInput 并像您一样上传普通文件。以上是关于在 NodeJs 中解码 base64 编码的 webm 视频的主要内容,如果未能解决你的问题,请参考以下文章
javascript NodeJS:如何将base64编码的字符串解码回二进制?