当前位置: 首页 > 知识库问答 >
问题:

使用S3 getObject数据作为视频源

戈念
2023-03-14

当我使用带有AWS SDK的节点请求视频时,将返回以下内容:

{
  AcceptRanges: 'bytes',
  LastModified: 2020-08-04T17:15:34.000Z,
  ContentLength: 6480325,
  ETag: '"c52e2d08feef01b4ce3ff2a4c6adb65b"',
  ContentType: 'video/mp4',
  Metadata: {},
  Body: <Buffer 00 00 00 20 66 74 79 70 69 73 6f 6d 00 00 02 00 69 73 6f 6d 69 73 6f 32 61 76 63 31 6d 70 34 31 00 01 14 3e 6d 6f 6f 76 00 00 00 6c 6d 76 68 64 00 00 ... 6480275 more bytes>
}

缓冲区是一个ArrayBuffer。 我假设这是什么我需要使用作为一个视频源,但我真的不知道。

我曾尝试将其转换为普通的bufferbase64,但我对这两种方法都没有太多经验,而且这两种方法都不起作用。 我能够使用base64将视频的第一帧显示为图像,但不能显示为视频。

有办法做到这一点吗?

请求代码:

s3.getObject(
    {
        Bucket: "my-bucket-name",
        Key: req.body.file
    },
    (err, data) => {
        console.log(data)
    }
);

共有1个答案

卢知
2023-03-14

想出来了。 愚蠢的错误。 base64方式确实有效,只是忘了向video元素添加controls参数。

以下是有兴趣的人可以使用的代码:

s3.getObject(
    {
        Bucket: "my-bucket-name",
        Key: req.body.file
    },
    (err, data) => {
        const base = new Buffer.from(data.Body.buffer).toString("base64");

        if (err)
            return res
                .status(400)
                .json({ msg: "Unable to fetch video", error: err });
        else
            return res.json({
                msg: "Video fetched",
                source: base
            });
     }
);

然后在前端格式化,并根据需要设置视频源:

// Response from an Axios request
"data:video/mp4;base64, " + res.data.source
 类似资料:
  • 我曾尝试使用GStreamer管道将mp4视频转换为avi视频,但它是在没有声音的情况下转换的 gst launch-t-v filesrc location=源。mp4!qtdemux!ffdec\U h264!视频/x-raw-yuv!avimux!filesink location=结果yuv。avi公司

  • 我正在寻找一种方法,在我的研究中使用Youtube API查找Youtube上的所有360°视频。目前,我还无法从Youtube API中找到此功能,也无法使用可用的API函数进行变通。 Yuotube网页上的搜索结果可以按功能过滤,以仅显示搜索结果中的360°视频。即使使用可用的API方法复制此功能,也是满足我需求的良好起点。也许这可以通过使用代码段的标签来完成,但我无法让它工作。 (这个问题非

  • 问题内容: 我正在努力寻找解决此MySQL问题的方法。我似乎无法理解该怎么做。我有下表。 如果可能的话,我想将问题答案显示为每个结果集的列,如下所示。 任何帮助将非常感激。 谢谢 问题答案: SQLFiddle演示 如果您不清楚问题的数量( 例如Matei Mihai所说的1000个 ),则非常需要动态版本。 SQLFiddle演示 输出值

  • 问题内容: 谁能帮助解释为什么JNDI应该是公开数据库/ jms等服务的首选方式? 我遇到的所有帖子都谈到了不必加载特定的驱动程序管理器,从连接池中受益等优点,但是可以通过在属性文件中指定驱动程序管理器并使用反射来轻松实现。 连接池也可以通过将正确的实现方式通过spring或其他方式连接到应用Bean中来实现。 那么,为什么使用JNDI会更好呢? 问题答案: 当您必须在不同环境之间移动应用程序时,

  • 问题内容: 我有一个内存中的数据源: 但是现在我被卡住了。我想将其用作J2SE应用程序中的JPA数据源。我已经搜索了整个网络,但是所有信息都与J2EE有关。 问题答案: / 在这里输入什么? / 好吧,什么都没有。在Java SE环境中,您必须使用来自JPA提供程序的内置连接池,并且设置如下所示:

  • --编辑1-- 音频和视频来自外部来源(麦克风和摄像机),并被捕获为未经任何压缩的原始数据(即使是视频)。我使用h264编码视频和音频无压缩(PCM)。 捕获的音频为:16位,44100kHz,立体声 谢谢你宝贵的建议。

  • 用Node.js处理将视频文件流到html5视频播放器以使视频控件继续工作的正确方法是什么? 我认为这与头的处理方式有关。不管怎样,这是背景资料。代码有点长,但是,它非常简单。 我学会了如何将小视频文件流式传输到HTML5视频播放器。有了这个设置,控制工作没有任何工作,我的部分,视频流完美。这里有一个完整的工作代码和示例视频的工作副本,可以在Google Docs上下载。 客户: 服务器: 但此方

  • 我正在建立一个应用程序,我需要压缩视频之前,上传到服务器。未经压缩的视频约为五分钟,60M,Android视频位2x1024x1024,640*480。现在我正在使用FFMPEG库压缩视频http://androidwarzone.blogspot.co.il/2011/12/ffmpeg4android.html。以下是command commandStr=“ffmpeg-y-i”+url+“-