我正在构建一个应用程序,用户可以在其中上传和观看视频。我将视频以 .mp4 容器格式存储在 S3 中,但是,我想将视频转换为 m3u8 格式以进行自适应流式传输。
我发现有一个名为“Amazon MediaConvert”的东西 ( https://docs .aws.amazon.com/mediaconvert/index.html ) 可以为我完成这项工作。
有人尝试过使用此 AWS 媒体转换服务吗?我正在努力实施这个?有人可以指导吗?或者如果我的方法错误
根据 MediaConvert,基本流程是: 1. 获取您的帐户特定端点 2. 创建转码作业 3. 使用作业对视频进行转码
我被困在步骤 2 中。|| |我的目标是使用 Node js 在服务器端将 .mp4 视频转换为 m3u8。请帮忙
My objective is to convert the .mp4 videos to m3u8 in server side using node js. PLease help
选择使用 AWS MediaConvert 将 MP4 视频转换为 HLS (m3u8) 格式来实现自适应流媒体是非常好的。以下是如何使用 Node.js 在服务器端执行此操作的分步指南:
1. 设置 AWS 账户和凭据:
- 如果还没有,请创建一个 AWS 账户 ( https://aws.amazon.com )。
-
创建一个 IAM 用户,并附加以下策略以授予 MediaConvert 访问权限:
- AmazonMediaConvertFullAccess
- AmazonS3FullAccess (如果打算直接从 S3 读取和写入文件)
- 记下的访问密钥 ID 和秘密访问密钥。
2. 设置 Node.js 项目:
-
创建一个新的 Node.js 项目:
bash mkdir video-transcoding cd video-transcoding npm init -y
-
安装 AWS SDK for JavaScript:
bash npm install aws-sdk
3. 编写 Node.js 代码:
-
创建一个新的 JavaScript 文件 (例如,
transcode.js
) 并粘贴以下代码:```javascript const AWS = require('aws-sdk'); const { v4: uuidv4 } = require('uuid'); // 用于生成唯一作业名称
// 配置 AWS 凭据 AWS.config.update({ accessKeyId: 'YOUR_ACCESS_KEY_ID', secretAccessKey: 'YOUR_SECRET_ACCESS_KEY', region: 'YOUR_AWS_REGION', // 例如,'us-east-1' });
// 创建 MediaConvert 对象 const mediaconvert = new AWS.MediaConvert({ endpoint: 'YOUR_MEDIACONVERT_ENDPOINT', // 区域特定端点,可以在 MediaConvert 控制台中找到 });
// 定义转码作业参数 const params = { "Queue": "YOUR_MEDIACONVERT_QUEUE_ARN", // 创建一个队列并在此处粘贴 ARN "UserMetadata": { "Customer": "Custom", "Workflow": "Complete" }, "Role": "YOUR_IAM_ROLE_ARN", // 创建一个 IAM 角色并附加 MediaConvert 策略并在此处粘贴 ARN "Settings": { "Inputs": [ { "AudioSelectors": { "Audio Selector 1": { "Offset": 0, "DefaultSelection": "DEFAULT", "ProgramSelection": 1, "SelectorType": "PID", "Tracks": [ 1 ], "LanguageCode": "ENM" } }, "VideoSelector": { "ColorSpace": "FOLLOW" }, "FileInput": "s3://YOUR_INPUT_BUCKET/YOUR_INPUT_VIDEO.mp4" } ], "OutputGroups": [ { "Name": "Apple HLS", "OutputGroupSettings": { "Type": "HLS_GROUP_SETTINGS", "HlsGroupSettings": { "ManifestDurationFormat": "INTEGER", "SegmentLength": 5, "Destination": "s3://YOUR_OUTPUT_BUCKET/YOUR_OUTPUT_FOLDER/" } }, "Outputs": [ { "Preset": "System-Hls-720p", "NameModifier": "_720p" }, { "Preset": "System-Hls-480p", "NameModifier": "_480p" }, { "Preset": "System-Hls-Audio", "NameModifier": "_audio" } ] } ] }, "JobTemplate": "optional-job-template-name" };
// 创建 MediaConvert 作业 mediaconvert.createJob(params, (err, data) => { if (err) { console.error("Error creating MediaConvert job:", err); } else { console.log("MediaConvert job created successfully:", data.Job.Id); } }); ```
-
用的实际值替换占位符:
-
YOUR_ACCESS_KEY_ID
、YOUR_SECRET_ACCESS_KEY
、YOUR_AWS_REGION
-
YOUR_MEDIACONVERT_ENDPOINT
-
YOUR_MEDIACONVERT_QUEUE_ARN
-
YOUR_IAM_ROLE_ARN
-
YOUR_INPUT_BUCKET
、YOUR_INPUT_VIDEO.mp4
-
YOUR_OUTPUT_BUCKET
、YOUR_OUTPUT_FOLDER/
-
4. 运行代码:
-
使用以下命令运行脚本:
bash node transcode.js
此代码将创建一个 MediaConvert 作业,将的 MP4 视频转换为具有多种分辨率 (720p、480p) 和仅音频流的 HLS 流,以实现自适应流媒体。输出文件将保存在指定的 S3 存储桶中。
其他注意事项:
- 错误处理: 为确保代码的可靠性,实施稳健的错误处理。
- 事件通知: 利用 MediaConvert 的事件通知功能,在作业完成、失败或出现错误时收到通知。
- 作业模板: 为常用的转码设置创建 MediaConvert 作业模板,以简化的代码并提高可重用性。
- 自适应比特率流媒体 (ABR): 考虑使用 MediaPackage 或 CloudFront 等服务来提供自适应比特率流媒体体验,根据网络条件自动调整视频质量。
- 安全: 始终遵循安全最佳实践,例如使用临时凭据和限制 IAM 角色的权限。
希望本指南能帮助使用 AWS MediaConvert 和 Node.js 设置视频转码管道。 如果有任何其他问题,请随时提出!
标签:node.js,amazon-s3 From: 55556970