用c plus plus写一个通过rtsp协议获取视频分辨率的程序
时间: 2023-03-02 18:54:23 浏览: 68
你可以使用一个第三方库来实现该功能,例如FFmpeg。
以下是一个示例代码,它打开一个RTSP流并打印其分辨率:
```
#include <iostream>
#include <string>
#include <stdio.h>
#include <chrono>
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/imgutils.h>
#include <libswscale/swscale.h>
}
int main(int argc, char *argv[])
{
av_register_all();
avformat_network_init();
// RTSP url
std::string url = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov";
AVFormatContext *pFormatCtx = avformat_alloc_context();
// Open video stream
if (avformat_open_input(&pFormatCtx, url.c_str(), nullptr, nullptr) != 0)
{
std::cerr << "Couldn't open input stream." << std::endl;
return -1;
}
// Retrieve stream information
if (avformat_find_stream_info(pFormatCtx, nullptr) < 0)
{
std::cerr << "Couldn't find stream information." << std::endl;
return -1;
}
// Find the first video stream
int videoStream = -1;
for (int i = 0; i < pFormatCtx->nb_streams; i++)
{
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoStream = i;
break;
}
}
if (videoStream == -1)
{
std::cerr << "Couldn't find a video stream." << std::endl;
return -1;
}
// Get a pointer to the codec context for the video stream
AVCodecContext *pCodecCtx = pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (pCodec == nullptr)
{
std::cerr << "Couldn't find a suitable decoder." << std::endl;
return -1;
}
// Open the codec
if (avcodec_open2(pCodecCtx, pCodec, nullptr) < 0)
{
std::cerr << "Couldn't open the codec." << std::endl;
return -1;
}
// Get the width and