【问题标题】:Amazon s3 and node js video streaming and thumbnail?Amazon s3 和 node js 视频流和缩略图?
【发布时间】:2015-06-29 21:41:03
【问题描述】:

我正在一个 node.js 项目中工作,我需要将 .mp4 文件上传到 amazon s3。

我有两个问题:

问题 1: 我已将 mp4 文件上传到私有类型的存储桶中,假设存储桶的名称是“videobucket”。为了在浏览器中观看视频,我创建了它的签名 URL。

我的问题是:

获取的签名 ULR 与流式 URL 不同。如果是,我应该执行哪些步骤来生成流式 URL?

问题 2:我需要创建要上传到 amazon s3 的视频的缩略图。如何在 node.js 中做到这一点?

我是亚马逊和节点的新手。

提前谢谢大家!

我写的上传文件的代码如下:

var file = req.files.video;

    var fileName = new Date().getTime() + "_" + file.originalname;

    fs.readFile(file.path, function(err, data) {
        if (err) throw err;
        var s3bucket = new AWS.S3({
            params: {
                Bucket: 'myvideos'
            }
        });
        s3bucket.createBucket(function() {
            var params = {
                Key: fileName, //file.name doesn't exist as a property
                Body: data,
                ContentType: file.type,
            };
            s3bucket.upload(params, function(err, data) {
                fs.unlink(file.path, function(err) {
                    if (err) {
                        console.error(err);
                    }
                });

                if (err) {
                    res.status(500).send(err);
                } else { console.log("file uploaded"); }
        });

 });

});

【问题讨论】:

  • 我已将我的媒体(即 mp4/flv 文件)上传到存储桶。
  • 你写了什么代码来尝试这样做?
  • Jeff- 我已经在问题中添加了我的代码供您参考。
  • 我的工作正常
  • “流式 URL”是什么意思?您将获得的签名网址是您上传的视频网址。这将是一个 s3 链接。

标签: node.js amazon-web-services amazon-s3 amazon


【解决方案1】:

这是我第一个问题的答案。我在谷歌搜索了这么多小时后发现了这个。

将媒体和 JW 播放器文件上传到 Amazon S3 存储桶:

Step1:从 JW Player 网站的功能页面下载播放器。然后提取 .zip 文件的内容。 步骤 2:登录到 aws 管理控制台 https://console.aws.amazon.com/s3/

Step3:创建一个公有类型的bucket Step4:选择bucket并点击Upload Step5:将以下文件上传到bucket中

jwplayer.flash.swf

jwplayer.html5.js

jwplayer.js 和

您的 .mp4 和 .flv 媒体文件

设置权限为公开

创建 CloudFront Web 和 RTMP 分配

要将 CloudFront 配置为流式传输媒体文件,您需要一个用于 JW Player 文件和一个 HTML 文件的 CloudFront Web 分发,以及一个用于媒体文件的 RTMP 分发。

步骤

Step1:打开云前端控制台 https://console.aws.amazon.com/cloudfront/

第二步:创建分布

步骤 3:在创建分发向导的第一页,接受默认选择 RTMP,然后单击继续。

步骤 4:在向导的第二页上,单击源域名字段,然后选择您在将媒体和 JW Player 文件上传到 Amazon S3 存储桶过程中创建的 Amazon S3 存储桶。如果您有很多 Amazon S3 存储桶,您可以键入存储桶名称的前几个字符来过滤列表。

第 5 步:创建分布

步骤 6:CloudFront 创建您的分配后,您的分配的 Status 列的值将从 InProgress 更改为 Deployed。这应该不到 15 分钟。

CloudFront 分配给您的分配的域名显示在分配列表中。域名也会出现在所选分配的分配设置页面上。)

嵌入 RTMP 媒体:

<div id='mediaplayer'>This text will be replaced</div>
<script type="text/javascript">
   jwplayer('mediaplayer').setup({
      'id': 'playerID',
      'width': '720',
      'height': '480',
      'file': 'rtmp://s1cxpk7od1m10r.cloudfront.net/cfx/st/your_streaming_file.mp4',
      'primary':'flash',
      'autostart' : 'true',
   });
</script>

【讨论】:

    【解决方案2】:

    第二部分答案:可以使用fluent-ffmpeg提取视频缩略图https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

    var ffmpeg = require('fluent-ffmpeg');
    var screenshot = new ffmpeg({source:'./1.mp4'}) // put in the source path of the video
                        .withSize('200x200')
                        .takeScreenshots({count:1,timemarks:['50%'],filename:"screenshot.png",folder:"./"});
    

    对于较新版本的 ffmpeg:

    ffmpeg('/path/to/video.avi')
    .screenshots({
        timestamps: ['50%'],
        filename: 'screenshot.png',
        folder: '/path/to/output',
        size: '200x200'
    });
    

    【讨论】:

    • 我的客户不希望我使用 ffmeg
    • 我正在寻找亚马逊使用的任何解决方案
    • 我尝试了上面的解决方案给我一个错误:错误:找不到 ffprobe
    • @DineshRawat :该错误可能是由于版本不匹配造成的。(我使用的是旧版本的 ffmpeg)。我已经更新了更新版本的答案。您必须提取屏幕截图并单独存储。虽然你可以看看 amazon lamda aws.amazon.com/lambda
    • @Anurag- 感谢您的帮助。 AWS Elastice 转码器将为我工作。 newtriks.com/2013/01/29/…
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 2015-01-05
    • 2015-12-20
    • 2011-08-26
    • 2012-05-24
    • 2017-10-02
    • 2012-02-11
    • 2012-05-01
    相关资源
    最近更新 更多