我正在尝试构建一个系统,以便将视频从网络摄像头传输到网站,我对视频处理还不熟悉,但到目前为止,我已经了解到我需要使用FFmpeg lib
、AWS-S3
存储桶和hls.js
在 .m3u8 的帮助下读取 .ts 文件。我对如何实施有一些想法,我正在寻找反馈和最佳实践来实现它。
主意:
系统上运行的python脚本将原始mp4文件发送到云端进行处理:
例如:ffmpeg -f dshow -s 640x480 -r 30 -vcodec mjpeg -i video="Integrated Webcam" output2.mp4
该命令可以用来生成mp4文件,可以发送到云端进行处理。
疑问 1:我认为在系统上构建 m3u8 文件是没有意义的(ffmpeg -i output1.mp4 -c:v libx264 -x264opts keyint=60:no-scenecut profile_720p_.m3u8
找不到可以直接从网络摄像头生成 m3u8 的命令),因为随着 .ts 文件不断生成,m3u8 文件也会不断更新(我不确定如何使用 .m3u8 进行直播,客户端是否不断请求和更新 m3u8 文件以了解新的 ts 地址)。此外,除了上传 mp4 文件,我是否可以直接上传 ts 文件并动态生成 m3u8 文件,因为这是一个直播,我可以使用它-hls_list_size 2
来限制 .ts
一旦 mp4 文件到达云端,我计划使用它ffmpeg -i output1.mp4 -c:v libx264 -x264opts keyint=60:no-scenecut -hls_flags append_list profile_720p_.m3u8
来生成 ts 和 m3u8 文件,如下所示:
ffmpeg -i output1.mp4 -c:v libx264 -x264opts keyint=60:no-scenecut -hls_flags append_list profile_720p_.m3u8
ffmpeg -i output2.mp4 -c:v libx264 -x264opts keyint=60:no-scenecut -hls_flags append_list profile_720p_.m3u8
ffmpeg -i output3.mp4 -c:v libx264 -x264opts keyint=60:no-scenecut -hls_flags append_list profile_720p_.m3u8
疑问2:即使使用-hls_flags append_list
,我也可以继续生成ts文件,但m3u8文件只会针对最后一个命令进行更新;例如,在对output1.mp4 m3u8文件运行上述命令后,将具有segments-0.ts到segments-5.ts,但在对output2.mp4 m3u8文件运行上述命令后,只有segments-5.ts到segments-10.ts,而不是segments-0.ts到segments-10.ts,因为我正在寻找直播,所以这不会是一个大问题。
我来这里寻求帮助来澄清与 FFmpeg 相关的疑问。