我正在构建一个应用程序,用户可以在其中上传视频,而其他人以后可以观看。我的目标是在客户端进行视频的HLS流传输,其视频格式应为.m3u8。我正在使用节点fluent-FFmpeg模块进行处理,但是,我非常怀疑,如何确保在处理ffmpeg之后如何将所有.ts文件(块)与m3u8文件一起存储回s3存储桶中mp4文件?
因为ffmpeg命令仅占据m3u8文件的位置?我希望输入和输出位置为S3时如何处理?
任何帮助将不胜感激。
我正在关注Ffmpeg creating m3u8 from mp4, video file size这个问题的答案,该问题在我的本地计算机上运行得很好,如何在s3上实现同样的效果?
答案 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
您将需要一个重新定位,将所有内容重新引用到远程的后处理:
将/ 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
完成后,流利过程完成时来自本地FS快照的所有引用都将更改,因此它们都可以在新的云位置使用。
这是蛮力解决方法
OR
您使用诸如“ cloudfront”之类的服务来为您完成肮脏的工作。