video - 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 的速度观看视频,所以它们是否被源重新计算?
解决方案
RTSP 只是一种传输方式。它对数据流没有任何作用。如果您将相机设置为 24 FPS,它将发送 24 FPS。
如果您丢弃帧,您将只想丢弃非 IDR 帧。一旦你扔掉一帧,你必须等到你得到另一个 IDR(可能在 SPS、PPS 和 SEI 之前)才能恢复解码。非 IDR 帧依赖于之前的帧。所以一旦你扔掉一个,如果你尝试将另一个非 IDR 传递给 ffmpeg,它将无法正确解码并且图像将被破坏。
如果您丢弃 24 帧中的 21 帧,它看起来与每秒 1 帧的流没有太大区别。
在一台配备 Xeon 处理器并使用 h264_cuvid 解码器的不错的 PC 上,我可以以 24 FPS 解码 64 个低分辨率流 (352x240)。
推荐阅读
- apache-spark - Spark - 结构值的 Hive 集成 - NULL 输出
- solr - 在 solr 搜索结果中需要完全匹配
- python - 这个简单的 If 语句向我发送了 SyntaxError: invalid syntax on Python 3.6
- javascript - 正则表达式搜索返回 -1,即使短语肯定存在于数组中
- ruby-on-rails - Wicked 的部分验证在定义的步骤上不起作用
- anaconda - 尝试在虚拟环境中安装 requirements.txt 并找不到 anaconda 1.7.2 版
- fiware - Orion 上下文代理的 HA 集群部署
- c# - C#如何将元素添加到特定索引?
- javascript - Safari 阻止弹出窗口
- aframe - a-node.js TypeError:无法读取未定义的属性“构造函数”