问题描述
我制作了一个python和opencv程序,以MJPEG输出格式每秒产生约8-15fps的帧,其中MJPEG地址在localhost网络服务器(0.0.0.0:5000)上提供,并且我确实尝试像rtmp服务器一样广播其帧youtube使用ffmpeg,所以基本上我确实将MJEG转换为flv并使用以下命令ffmpeg -f mjpeg -i http://0.0.0.0:5000/video_Feed -f lavfi -i anullsrc -c:v libx264 -vf "scale=trunc(oh*a/2)*2:320,unsharp=lx=3:ly=3:la=1.0" -crf 24 -c:a aac -ac 1 -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxx-xxx
转发到rtmp服务器,但不幸的是youtube流每隔5秒就会出现太多缓冲,而ffmpeg终端告诉我们写入速度仅为0.317倍(预计与0.99-1x的youtube同步),我的问题是
有没有一种方法可以流式传输“实时”的8-15fps左右并自动与youtube rtmp服务器同步而不进行缓冲,因为我认为youtube大约需要30fps,而我的fps只有9-15fps可能会造成缓冲。 有没有像这样的额外ffmpeg参数可以加快写入速度?谢谢
解决方法
通常会将原始视频的帧速率指定为25。但是您的来源是可变帧速率。您需要将墙上时钟时间指定为时间戳,并为YT生成恒定的帧频输出。
ffmpeg -f mjpeg -use_wallclock_as_timestamps true -i http://0.0.0.0:5000/video_feed -f lavfi -re -i anullsrc -vsync cfr -r 25 -c:v libx264 -vf "scale=trunc(oh*a/2)*2:320,unsharp=lx=3:ly=3:la=1.0" -crf 24 -c:a aac -ac 1 -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxx-xxx