Paw*_*wan 8 ffmpeg video-streaming
我正在使用RTPLAY使用RTSP通过TCP播放视频流,并且当vq值增加时它会正常播放,但是当仅MV之前的值增加时,它会在5-6秒后停止.
nan M-V: nan fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
......
......
Duration: N/A, start: 2.133467, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc), 1280x1024, 15 fps, 25 tbr, 90k tbn, 30 tbc
[swscaler @ 0x7fd9502403c0] deprecated pixel format used, make sure you did set range correctly
"76.81" M-V: -5.409 fd= 0 aq= 0KB vq= 0KB sq= 0B f=2/2 `
Run Code Online (Sandbox Code Playgroud)
有人可以解释这些MV,fd,aq,vq,f是什么,以及MV之前的值("76.81")?
我有同样的问题,通过查看ffplay源代码发现:
av_log(NULL, AV_LOG_INFO,
"%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64" \r",
get_master_clock(is),
(is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : " ")),
av_diff,
is->frame_drops_early + is->frame_drops_late,
aqsize / 1024,
vqsize / 1024,
sqsize,
is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0)
Run Code Online (Sandbox Code Playgroud)
播放示例视频得到了输出样本:
7.11 A-V: 0.003 fd= 1 aq= 21KB vq= 321KB sq= 0B f=0/0
7.11 (master clock) 是从流/视频开始的时间
A-V (avdiff) 音频和视频时间戳之间的差异
fd 丢弃的帧数
aq 音频帧的大小
vq 视频帧的大小
sq 字幕框的大小
f 时间戳错误纠正率(不是100%肯定)
M-V,M-A仅表示视频流,仅表示音频流.
小智 6
我想澄清aq, vq分别是“音频队列大小”和“视频队列大小”,而不是 Marware 回答中的“音频/视频帧的大小”。
很抱歉发布了不完整的答案,但该线程在 google 搜索中排名第一ffmpeg vq,我希望我的澄清对那些碰巧在这里寻找意义的人有所帮助vq。
这是一些实用(但小众)的示例,说明vq(视频队列大小)在实际意义上的含义。
假设您正在使用 ffplay 来显示来自安全摄像头的视频。在这种特殊情况下,该vq数字(连同相机流带宽)将定义从“实时”到 ffplay 中看到的图片的延迟。
例如,如果安全摄像头提供高质量的 10Mbps 流并且vq大约为 300K,那么延迟/延迟大约为 1/4 秒。四分之一秒的延迟几乎无法察觉。
delay (seconds) = vq_number * 8 * 1024 / video_stream_bits_per_second
现在,如果相机以 2Mbps 的速度传输并且vq为 1000K(并不少见),则延迟(延迟)大约为四秒。这意味着你现在在 ffplay 中看到的事情发生在四秒前。
在任何其他情况下 -vq越多越好。较大vq意味着有足够的数据排队(缓冲)以进行流畅的视频播放。