如何从mp4视频URL(存储在亚马逊S3中)创建m3u8播放列表,并将视频块(.ts文件)和.m3u8文件存储回另一个S3?

时间:2019-05-19 15:01:27

标签: node.js amazon-s3 ffmpeg mp4 m3u8

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

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

任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:2)

进行转换(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

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

  1. 将/ tmp中的所有本地.ts文件同步到S3上的CDN

  2. 将每个.ts文件的新.ts-S3 URI保存/映射到/ tmp中的旧本地fsPath

  3. 通过流利更新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
  1. 将更新的.m3u8同步到CDN

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

这是蛮力解决方法

OR

您使用诸如“ cloudfront”之类的服务来为您完成肮脏的工作。