我正在构建一个 NodeJS 应用程序,它将静态视频文件转换为可实时发送到客户端(iPad 或浏览器)的流式视频(使用 fluent-ffmpeg 模块)。
一切都设置好了,我现在需要的就是正确配置 ffmpeg。但是我在使用 ffmpeg 时遇到了很多问题。起初我构建了一个 flash 流(flv 使用 lib264 编解码器,效果很好,但当然不适用于 iPad)。
使用我当前的设置,我可以立即听到音频,但图片会在几秒钟后开始播放。然后,我的 30 秒测试文件已被压缩为 3 秒的高速图像。
我如何配置我的 ffmpeg 以便它正确地传输 mp4(当然是一次通过)。似乎它正在流式传输原始 h264,如果是这种情况,我该如何强制使用 mp4 容器。我以为我是通过使用“-f mp4”来做到这一点的
我的正确设置是:
'-crf 22','-c:v libx264','-f mp4','-movflags','faststart+frag_keyframe'
Run Code Online (Sandbox Code Playgroud)
我也试过:
'-r 30','-crf 30','-analyzeduration 0','-probesize 1000','-rc_lookahead 0','-fflags nobuffer','-g 75','-ss 0','-threads 0','-vcodec libx264','-qcomp 0.6','-qmin 10','-qmax 51','-qdiff 4','-b:v 400k','-maxrate 400k','-bufsize 800k','-acodec mp3','-ab 192k','-ar 44100','-tune zerolatency','-f mp4','-movflags','faststart+frag_keyframe'
Run Code Online (Sandbox Code Playgroud)
正如您从我尝试过的选项数量所看到的,我变得非常绝望。我基本上只是在黑暗中跑来跑去。
我认为这并不重要,但这些是我的请求标头:
res.writeHead(200, {
'Content-Type':'video/mp4',
'Content-Length':stat.size,
'Content-Range':'bytes '+start+'-'+end+'/'+stat.size,
'Transfer-Encoding':'chunked'
});
Run Code Online (Sandbox Code Playgroud)
FFmpeg 日志:
file conversion error ffmpeg version N-52458-gaa96439 Copyright (c) 2000-2013 the …Run Code Online (Sandbox Code Playgroud)