解码时处理分辨率更改? 我用FFMPEG用C++来读取帧,并在IP摄像机上对RTSP流进行解码。

解码时处理分辨率更改? 我用FFMPEG用C++来读取帧,并在IP摄像机上对RTSP流进行解码。,c++,ffmpeg,C++,Ffmpeg,一切正常,但在解码时,我尝试更改IP摄像头上的流分辨率配置(例如:从1280x720更改为1920x1080) 结果是av\u read\u frame()in while循环仍能成功读取下一帧(具有新分辨率),且无错误。所以,我无法检测到重新设置缓冲区或重新连接流以更新其他流的信息的更改 av\u read\u frame()将读取一个AVPacket,如果我可以读取AVPacket中的分辨率信息,那么我可以检测到该更改并重新输入缓冲区。但是我在AVPacket结构中看不到任何解析信息 有人可

一切正常,但在解码时,我尝试更改IP摄像头上的流分辨率配置(例如:从1280x720更改为1920x1080)

结果是
av\u read\u frame()
in while循环仍能成功读取下一帧(具有新分辨率),且无错误。所以,我无法检测到重新设置缓冲区或重新连接流以更新其他流的信息的更改

av\u read\u frame()
将读取一个AVPacket,如果我可以读取AVPacket中的分辨率信息,那么我可以检测到该更改并重新输入缓冲区。但是我在AVPacket结构中看不到任何解析信息

有人可以帮助我,如何在读取和解码流时检测分辨率的变化

更新

我使用了许多编解码器,如H264和H265/H265+。这种情况发生在上述所有3个编解码器上

在许多情况下,我还存储AV数据包以备以后回放,因此不需要解码。我需要立即检测分辨率的变化,以便能够正确地构建头信息以存储在硬盘上


多谢各位

av_read_frame()无法检测带内分辨率的变化,因为
av_read_frame()
不解析帧,它只从流中读取数据并将其放入缓冲区。您需要使用Bitstream解析器,或者将帧发送到解码器(如果解码器支持分辨率更改)。但是,每个编解码器都是不同的,因此除非我知道您使用的编解码器,否则我无法向您提供更多信息。

我已通过使用
av\u parser\u parse2()
函数解析
AVPacket
中的
分辨率
等信息来解决此问题,并将其与旧值进行比较,检测更改,然后重新连接


谢谢大家

您需要开始解析比特流,而每个编解码器都会有所不同。你正在进入一个痛苦的世界。另一种选择是重置每个关键帧,但你有一个容器问题。根据你的回答,我有更多的信息搜索谷歌,我已经解决了这个问题。谢谢:)