C++ 从IP摄像机的rtsp视频流获取快照

C++ 从IP摄像机的rtsp视频流获取快照,c++,ip-camera,C++,Ip Camera,通常,我可以使用供应商提供的url从IP摄像头获取静态快照。然而,以这种方式提供的JPEG图像质量不够好,供应商表示,没有提供其他图像格式或更小/无损压缩的快照服务 我注意到,当我用VLC打开相机的rtsp h264流,然后手动拍摄屏幕截图时,生成的图像没有先前观察到的jpeg伪影 问题是,如何用一个C++程序从H264流中获取这些高级快照?我需要对图像执行多个操作(注释、裁剪、人脸识别),但这些操作必须在获得尽可能高质量的初始图像之后进行 (请注意,这与我的有关。我使用CURL获得了jpeg图

通常,我可以使用供应商提供的url从IP摄像头获取静态快照。然而,以这种方式提供的JPEG图像质量不够好,供应商表示,没有提供其他图像格式或更小/无损压缩的快照服务

我注意到,当我用VLC打开相机的rtsp h264流,然后手动拍摄屏幕截图时,生成的图像没有先前观察到的jpeg伪影

问题是,如何用一个C++程序从H264流中获取这些高级快照?我需要对图像执行多个操作(注释、裁剪、人脸识别),但这些操作必须在获得尽可能高质量的初始图像之后进行


(请注意,这与我的有关。我使用CURL获得了jpeg图像,但如果可能的话,现在想用这个新的快照获取程序替换快照获取程序。我再次在linux、Fedora 11上运行)

您需要一个RTSP客户端实现来连接到相机,开始接收视频馈送,对视频帧进行碎片整理/解压缩,然后您将获得它并根据需要保存/处理/显示


您可能希望寻找一个众所周知的RTSP库/实现。

您需要一个RTSP客户端实现来连接到摄像头,开始接收视频馈送,对视频帧进行碎片整理/解压缩,然后根据需要获取并保存/处理/呈现


您可能希望看到一个著名的RTSP库/实现。

如果我的理解有误,请纠正我:使用RTSP客户端发送设置请求,然后发送播放请求;将视频存储在内存中的某个缓冲区中;将缓冲区中的任何内容解码为某种无损图像格式;从解码图像中获取帧;DoStuff();在重新填充缓冲区时重复。这基本上是正确的,但忽略了太多细节。使用HTTP上的JPEG,您可以发送请求并取回全部内容。在RTSP中,该内容可以通过TCP或UDP(用于查找H.264的不止一个格式描述符)进行传输,并解包以获得原始H.264比特流。不是火箭科学,但仍然没有JPEG快照那么简单。如果我的理解错误,请纠正我:使用RTSP客户端发送设置请求,然后发送播放请求;将视频存储在内存中的某个缓冲区中;将缓冲区中的任何内容解码为某种无损图像格式;从解码图像中获取帧;DoStuff();在重新填充缓冲区时重复。这基本上是正确的,但忽略了太多细节。使用HTTP上的JPEG,您可以发送请求并取回全部内容。在RTSP中,该内容可以通过TCP或UDP(用于查找H.264的不止一个格式描述符)进行传输,并解包以获得原始H.264比特流。不是火箭科学,但仍然不像JPEG快照那么简单。