亚马逊S3和节点jsvideostream和缩略图?

我在一个node.js项目中工作,我需要将.mp4file upload到amazon s3。

我有两个问题:

问题1:我已经把mp4file upload到一个私人types的桶中,可以说桶的名字是'videobucket'。 要在浏览器中查看video,我创build了它的签名URL。

我的问题是:

是正在获得签名的ULR,与STREAMED URL不同。 如果是,我应该执行哪些步骤来生成stream式传输的URL?

问题2:我需要创build我要上传到亚马逊S3的video的缩略图。 我怎么能在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"); } }); }); }); 

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

将媒体和JW Playerfile upload到Amazon S3存储桶:

步骤1:从JW Player网站上的“function”页面下载播放器。 然后提取.zip文件的内容。 第二步:loginawspipe理控制台https://console.aws.amazon.com/s3/

第三步:创build公共types的存储桶第四步:select存储桶并点击上传第五步:将下面的file upload到存储桶中

jwplayer.flash.swf

jwplayer.html5.js

jwplayer.js和

您的.mp4和.flv媒体文件

将权限设置为公共

创buildCloudFront Web和RTMP分配

要configurationCloudFront以stream式传输媒体文件,需要为JW播放器文件和HTML文件提供CloudFront Web分配,并为媒体文件提供RTMP分配。

脚步

第1步:打开云端控制台https://console.aws.amazon.com/cloudfront/

第二步:创build分配

步骤3:在创build分发向导的第一页上,接受默认selectRTMP,然后单击继续。

步骤4:在向导的第二页上,单击“源域名称”字段,然后select您在将媒体和JW播放器file upload到Amazon S3存储桶的过程中创build的Amazon S3存储桶。 如果您有很多Amazon S3存储桶,则可以键入存储桶名称的前几个字符来过滤列表。

第5步:创build分配

第6步:在CloudFront创build您的分配后,分配的“状态”列的值将从“正在进行”更改为“已部署”。 这应该不到15分钟。

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

embeddedRTMP媒体:

 <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> 

第二部分的答案:你可以使用fluent-ffmpeg来提取video缩略图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' });