亚马逊 s3 和节点 js 视频流和缩略图?
Amazon s3 and node js video streaming and thumbnail?
我在一个 node.js 项目中工作,我需要将 .mp4 文件上传到 amazon s3。
我有两个问题:
问题 1: 我已将 mp4 文件上传到私有类型的存储桶中,假设存储桶的名称是 'videobucket'。为了在浏览器中观看视频,我创建了它的签名 URL。
我的问题是:
获取的是signed ULR,与STREAMED不同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"); }
});
});
});
这是我第一个问题的答案。我在 google.
中搜索了这么多小时后找到了这个
正在将媒体和 JW 播放器文件上传到 Amazon S3 存储桶:
第 1 步:从 JW Player 网站的“功能”页面下载播放器。然后提取 .zip 文件的内容。
Step2:登录aws管理控制台
https://console.aws.amazon.com/s3/
Step3:创建一个public类型的bucket
Step4: Select 桶并点击上传
Step5: 将以下文件上传到存储桶
jwplayer.flash.swf
jwplayer.html5.js
jwplayer.js 和
您的 .mp4 和 .flv 媒体文件
设置权限 public
创建 CloudFront Web 和 RTMP 分配
要配置 CloudFront 以流式传输媒体文件,您需要一个用于 JW Player 文件和 HTML 文件的 CloudFront Web 分发,以及一个用于媒体文件的 RTMP 分发。
步骤
第一步:打开云前端控制台
https://console.aws.amazon.com/cloudfront/
第 2 步:创建分布
第 3 步:在创建分发向导的第一页,接受默认的 selection,RTMP,然后单击继续。
第 4 步:在向导的第二页,单击源域名字段,然后 select 您在将媒体和 JW 播放器文件上传到 Amazon S3 过程中创建的 Amazon S3 存储桶桶。如果您有很多 Amazon S3 存储桶,您可以输入存储桶名称的前几个字符来筛选列表。
第 5 步:创建分布
第 6 步:在 CloudFront 创建分配后,分配的 Status 列的值将从 InProgress 更改为 Deployed。这应该不会超过 15 分钟。
CloudFront 分配给您的分配的域名显示在分配列表中。该域名还出现在 selected 分发的“分发设置”页面上。)
嵌入 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>
第二部分答案:可以使用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'
});
我在一个 node.js 项目中工作,我需要将 .mp4 文件上传到 amazon s3。
我有两个问题:
问题 1: 我已将 mp4 文件上传到私有类型的存储桶中,假设存储桶的名称是 'videobucket'。为了在浏览器中观看视频,我创建了它的签名 URL。
我的问题是:
获取的是signed ULR,与STREAMED不同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"); }
});
});
});
这是我第一个问题的答案。我在 google.
中搜索了这么多小时后找到了这个正在将媒体和 JW 播放器文件上传到 Amazon S3 存储桶:
第 1 步:从 JW Player 网站的“功能”页面下载播放器。然后提取 .zip 文件的内容。 Step2:登录aws管理控制台 https://console.aws.amazon.com/s3/
Step3:创建一个public类型的bucket Step4: Select 桶并点击上传 Step5: 将以下文件上传到存储桶
jwplayer.flash.swf
jwplayer.html5.js
jwplayer.js 和
您的 .mp4 和 .flv 媒体文件
设置权限 public
创建 CloudFront Web 和 RTMP 分配
要配置 CloudFront 以流式传输媒体文件,您需要一个用于 JW Player 文件和 HTML 文件的 CloudFront Web 分发,以及一个用于媒体文件的 RTMP 分发。
步骤
第一步:打开云前端控制台 https://console.aws.amazon.com/cloudfront/
第 2 步:创建分布
第 3 步:在创建分发向导的第一页,接受默认的 selection,RTMP,然后单击继续。
第 4 步:在向导的第二页,单击源域名字段,然后 select 您在将媒体和 JW 播放器文件上传到 Amazon S3 过程中创建的 Amazon S3 存储桶桶。如果您有很多 Amazon S3 存储桶,您可以输入存储桶名称的前几个字符来筛选列表。
第 5 步:创建分布
第 6 步:在 CloudFront 创建分配后,分配的 Status 列的值将从 InProgress 更改为 Deployed。这应该不会超过 15 分钟。
CloudFront 分配给您的分配的域名显示在分配列表中。该域名还出现在 selected 分发的“分发设置”页面上。)
嵌入 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>
第二部分答案:可以使用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'
});