我正在使用ffmpeg将MJPEG流转码为H264 / MP4。作为客户端,我正在使用VLC。
我使用以下命令行:
ffmpeg \
-use_wallclock_as_timestamps 1 \
-f mjpeg \
-i "http://127.0.0.1:4100/getMjpegStream=L" \
-f mp4 \
-vcodec libx264 \
-movflags frag_keyframe+empty_moov+faststart \
-tune zerolatency \
-crf 30 \
-preset ultrafast \
-g 1 \
-reset_timestamps 1 \
-vsync 1 \
-flags global_header \
-r 15 \
-listen 1 \
-fflags flush_packets \
-avioflags direct \
-flush_packets 1 \
*output_URL*
如果我将 output_URL 设置为此:
udp://127.0.0.1:5000?pkt_size=1316
它工作正常。我启动ffmpeg,然后过一段时间,我使用此URL udp://@127.0.0.1:5000
启动VLC,它(几乎)实时播放。延迟为1-2秒,可以接受。而且此延迟是恒定的,它与我启动VLC的时间无关。我可以停止并重新打开VLC,它会实时运行。
但是我还需要在浏览器中观看此流(在HTML5视频中),因此通常将其用于 output_URL :
http://127.0.0.1:5000
在VLC中,我使用此URL http://127.0.0.1:5000
,它也可以正常工作,但前提是我必须在启动ffmpeg之后立即启动VLC。如果在ffmpeg的开始与VLC的开始之间存在明显的延迟,则该延迟将在播放中引起注意。假设我在时间T启动ffmpeg,然后在10秒后(在T + 10)启动VLC。我在VLC中有此行为:
有没有办法解决这个问题?
谢谢!