【发布时间】:2020-03-03 16:37:55
【问题描述】:
我正在使用带有 C++ 的 FFMPEG 来读取帧并从 IP 摄像机上的 RTSP 流解码它们。
一切正常,但在解码时,我尝试更改 IP 摄像机上的流分辨率配置(例如:从 1280x720 更改为 1920x1080)。
结果是 av_read_frame() 在 while 循环中仍然读取成功的下一帧(使用新分辨率)而没有错误。所以我无法检测到重新初始化缓冲区或重新连接流以更新其他流信息的更改。
av_read_frame() 将读取一个 AVPacket,如果我可以读取 AVPacket 中的分辨率信息,那么我可以检测到该更改并重新初始化缓冲区。但我在 AVPacket 结构中看不到任何分辨率信息。
有人可以帮助我,如何在读取和解码流时检测分辨率变化?
更新
我正在使用许多编解码器,例如 H264 和 H265/H265+。上述所有 3 个编解码器都发生了这种情况。
在许多情况下,我还会存储 AVPacket 以供以后播放,因此无需解码。我需要立即检测分辨率变化,以便能够正确构建标题信息以存储在 HDD 上。
非常感谢!
【问题讨论】: