我试图使用ffmpeg和mplayer的基准来比较不同视频编解码器之间的延迟。
我正在使用此命令行生成并发送流:
ffmpeg -s 1280x720 -r 100 -f x11grab -i :0.0 -vcodec mpeg2video -b:v 8000 -f mpegts udp://localhost:4242
我成功地使用ffplay实时接收和阅读它:
ffplay -an -sn -i -fflags nobuffer udp://localhost:4242?listen
现在我没有使用ffplay播放流,而是想使用mplayer基准来获取有关延迟的一些信息:
mplayer -msglevel all=6 -benchmark udp://localhost:4242
但是我得到了这个输出:
Playing udp://localhost:4242.
get_path('sub/') -> '/home/XXXXX/.mplayer/sub/'
STREAM_UDP, URL: udp://localhost:4242
Filename for url is now udp://localhost:4242
Listening for traffic on localhost:4242 ...
Timeout! No data from host localhost
udp_streaming_start failed
No stream found to handle url udp://localhost:4242
我尝试使用rtp协议,但也没有工作......
有没有人知道我做错了什么?
答案 0 :(得分:2)
感谢您的回答,
我实际上尝试了很多不同的编解码器,特别是vp9,h264和mpeg2,但我得到的最佳低延迟是mpeg2video。这是我使用的3个命令行。我阅读了ffmpeg流媒体指南和不同编解码器的编码指南,试图为每个指南获得最佳参数,但差异显而易见:
ffmpeg -an -sn -s 1280x720 -r 30 -f x11grab -i :0.0 -vcodec libx264 -crf 18 -tune zerolatency -preset ultrafast -pix_fmt yuv420p -profile:v baseline -b:v 8000 -f mpegts threads 4 udp://127.0.0.1:4242
ffmpeg -s 1280x720 -r 30 -f x11grab -i :0.0 -vcodec mpeg2video -b:v 800k -f mpegts -threads 8 udp://127.0.0.1:4242
ffmpeg -t 5 -s 1280x720 -r 30 -f x11grab -i :0.0 -vcodec libvpx-vp9 -an -crf 18 -b:v 1M -f webm -threads 8 udp://127.0.0.1:4242
在localhost上,当我使用h264的延迟时间接近1秒时,我对mpeg2video几乎没有任何延迟。我听说vp9也可能有非常低的延迟,但我显然不知道如何使用ffmpeg中的选项,因为我得到了非常糟糕的延迟值......
无论如何,要回到主题,127.0.0.1而不是localhost没有帮助,并且使用ffmpeg:// udp:// ip:port它也不起作用...:/我想我可能在mplayer上配置错误。也许我应该尝试自己编译。 但实际上,我甚至不知道mplayer是否会给我我想要的信息(编解码器编码/解码帧的平均ms数,这样我就可以精确地比较我的不同编解码器。)
编辑:抱歉... ffmpeg:// udp:// ip_addr works =)我打字错误... n_n 非常感谢。虽然,与使用mplayer时的ffplay相比,视频的质量真的很糟糕......