首页 > 解决方案 > RTSP 流如何在低 FPS 下工作

问题描述

我正在使用pyav(FFmpeg 的 Pythonic 绑定)在单个设备上摄取许多 RTSP 流。请注意,我不是视频协议方面的专家,因此我可能会不恰当地使用某些术语。我感谢你的耐心。

我在单个设备上摄取了许多 RTSP。因此,我无法以原始相机 FPS(例如 24 FPS)处理所有视频流。相反,我可以以较低的 FPS(例如 3 FPS)处理它们。当相机以比我正在消费视频的 FPS 更高的 FPS 录制时会发生什么?我只是丢失了数据 ( 24-3=21 FPS of data is dropped) 还是 RTSP 重新计算了一些数据(如I P帧)以适应我的摄取速度 (3 FPS)?特别是,我想了解motion vectors与 h264 编码相关联的情况。我会丢失其中的一些,还是因为我以 3 FPS 的速度观看视频,所以它们是否被源重新计算?

标签: videoffmpegframertspdecoding

解决方案


RTSP 只是一种传输方式。它对数据流没有任何作用。如果您将相机设置为 24 FPS,它将发送 24 FPS。

如果您丢弃帧,您将只想丢弃非 IDR 帧。一旦你扔掉一帧,你必须等到你得到另一个 IDR(可能在 SPS、PPS 和 SEI 之前)才能恢复解码。非 IDR 帧依赖于之前的帧。所以一旦你扔掉一个,如果你尝试将另一个非 IDR 传递给 ffmpeg,它将无法正确解码并且图像将被破坏。

如果您丢弃 24 帧中的 21 帧,它看起来与每秒 1 帧的流没有太大区别。

在一台配备 Xeon 处理器并使用 h264_cuvid 解码器的不错的 PC 上,我可以以 24 FPS 解码 64 个低分辨率流 (352x240)。


推荐阅读