ffmpeg 获取 rtsp 视频流 c++ 代码实现
时间: 2023-02-07 16:51:11 浏览: 200
您好,以下是使用 FFmpeg 获取 RTSP 视频流的 C 代码示例:
#include <stdio.h>
#include <libavformat/avformat.h>
int main(int argc, char *argv[]) {
AVFormatContext *fmt_ctx = NULL;
AVPacket packet;
const char *src_filename = NULL;
int ret, video_stream_index;
// 注册所有的编解码器和协议
av_register_all();
// 初始化 AVPacket
av_init_packet(&packet);
// 设置要打开的 RTSP 流的 URL
src_filename = "rtsp://127.0.0.1:8554/test.mp4";
// 打开输入流并读取头部信息
if ((ret = avformat_open_input(&fmt_ctx, src_filename, NULL, NULL)) < 0) {
fprintf(stderr, "Could not open source file %s\n", src_filename);
return 1;
}
// 读取流信息
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
fprintf(stderr, "Could not find stream information\n");
return 1;
}
// 查找视频流
video_stream_index = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
if (video_stream_index < 0) {
fprintf(stderr, "Could not find video stream in the input, aborting\n");
return 1;
}
// 从输入流中读取帧
while (av_read_frame(fmt_ctx, &packet) >= 0) {
// 判断是否为视频流
if (packet.stream_index == video_stream_index) {
// 在这里处理视频帧
// ...
}
// 释放 AVPacket
av_packet_unref(&packet);
}
// 关闭输入流
avformat_close_input(&fmt_ctx);
return 0;
}
在上面的代码中,我们使用了 avformat_open_input 函数打开输入流,并使用 avformat_find_stream_info 函数读取流信息。然后使
阅读全文