我正在构建一个应用程序,用户可以在其中上传视频,而其他人以后可以观看。我的目标是在客户端进行视频的HLS流传输,其视频格式应为.m3u8。我正在使用node fluent-FFmpeg模块进行处理,但是,我非常怀疑,如何确保在处理ffmpeg之后如何将所有.ts文件(块)与m3u8文件一起存储回s3存储桶中mp4文件?

因为ffmpeg命令仅占用m3u8文件的位置?我希望输入和输出位置为S3时如何处理?

任何帮助将不胜感激。

我正在关注Ffmpeg creating m3u8 from mp4, video file size这个问题的答案,该问题在我的本地计算机上运行得很好,如何在s3上实现同样的效果?

最佳答案

进行转换(mp4-in,m3u8-out),以确认本地FS快照onComplete不是您想要的。

您不想要,因为as-output .m3u8具有使用LOCAL FS的容器式引用(EXTINF:segment)和每个子.ts的相对路径)

像这样:


 #EXTINF:4.0
   ./segment_0.ts     <<  relative path from .m3u8 output



您将需要一个重新定位的后处理,将所有内容重新引用到远程:


将/ tmp中的所有本地.ts文件同步到S3上的CDN
将每个.ts文件的新.ts-S3 URI保存/映射到/ tmp中的旧本地fsPath
通过流利的将m3u8文件输出更新为将包含CDN / URI的每个.ts段的CDN副本引用为.ts



#EXTINF:4.0
https://${s3Domain}/${s3Bucket}/180_250000/hls/segment_0.ts
#EXTINF:4.0
https://${s3Domain}/${s3Bucket}/180_250000/hls/segment_1.ts
#EXTINF:4.0
https://${s3Domain}/${s3Bucket}/180_250000/hls/segment_2.ts
#EXTINF:4.0




将更新的.m3u8同步到CDN


完成后,流利处理完成时来自本地FS快照的所有引用都将更改,因此它们都可以在新的云位置使用。

那是蛮力的解决方法

要么

您使用像“ cloudfront”这样的服务来为您完成肮脏的工作。

关于node.js - 如何从mp4视频URL(存储在亚马逊S3中)创建m3u8播放列表,并将视频块(.ts文件)和.m3u8文件存储回另一个S3?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56209043/

10-10 00:43