要获取摄像头的分辨率列表,您可以使用 FFmpeg 的 C API 来查询支持的分辨率。
下面是一个示例代码片段,展示了如何使用 FFmpeg 获取摄像头的分辨率列表:
extern "C" {
#include <libavutil/avutil.h>
#include <libavformat/avformat.h>
}
int main() {
av_register_all();
AVFormatContext* formatContext = nullptr;
AVInputFormat* inputFormat = nullptr;
// 打开摄像头设备
if (avformat_open_input(&formatContext, "/dev/video0", inputFormat, nullptr) != 0) {
printf("无法打开摄像头设备\n");
return -1;
}
// 查找视频流信息
if (avformat_find_stream_info(formatContext, NULL) < 0) {
printf("无法获取流信息\n");
return -1;
}
// 查找视频流索引
int videoStreamIndex = -1;
for (unsigned int i = 0; i < formatContext->nb_streams; ++i) {
if (formatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
videoStreamIndex = i;
break;
}
}
// 检查是否找到了视频流
if (videoStreamIndex == -1) {
printf("未找到视频流\n");
return -1;
}
// 获取视频流参数
AVCodecParameters* codecParams = formatContext->streams[videoStreamIndex]->codecpar;
// 遍历支持的分辨率列表并输出
for (int i = 0; i < codecParams->codec->supported_framerates->num; ++i) {
AVFrameRate* frameRate = &(codecParams->codec->supported_framerates->list[i]);
printf("分辨率: %dx%d\n", frameRate->width, frameRate->height);
}
// 清理资源
avformat_close_input(&formatContext);
return 0;
}
请注意,上述代码只是一个简单示例,您可能需要根据具体情况进行适当修改。确保在编译时链接 FFmpeg 库,并正确包含相关的头文件。
希望这可以帮助您获取摄像头的分辨率列表。如有需要,请参考 FFmpeg 官方文档以获取更多详细信息和更复杂的功能实现。
内容由零声教学AI助手提供,问题来源于学员提问