亚马逊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' });