ffmpeg 使用的编译版本:ffmpeg-6.0-full_build-shared.7z
c++代码:
#include
#include
extern "C" {
#include
#include
}
int main(int argc, char *argv[]) {
std::string url = "rtsp://example.com/stream";
int duration = 10; // 获取 10 秒视频
av_register_all();
AVFormatContext *format_ctx = nullptr;
AVCodecContext *codec_ctx = nullptr;
AVPacket packet = { 0 };
AVFrame *frame = nullptr;
// 打开 RTSP 流并读取视频流信息
if (avformat_open_input(&format_ctx, url.c_str(), nullptr, nullptr) streams[video_stream_index]->codecpar) codec_id);
if (!codec) {
std::cerr (std::chrono::system_clock::now().time_since_epoch()).count();
while (true) {
if (av_read_frame(format_ctx, &packet) >= 0) {
if (packet.stream_index == video_stream_index) {
int ret = avcodec_send_packet(codec_ctx, &packet);
if (ret = 0) {
ret = avcodec_receive_frame(codec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret (std::chrono::system_clock::now().time_since_epoch()).count();
if (now - start_time >= duration * 1000) { // 达到指定时长,退出循环
break;
}
// 处理视频帧,例如保存到文件或显示到屏幕上
// ...
av_frame_unref(frame);
}
av_packet_unref(&packet);
}
} else {
break;
}
}
// 清理资源
avcodec_free_context(&codec_ctx);
avformat_close_input(&format_ctx);
av_frame_free(&frame);
return 0;
}
环境搭建后,成功执行了官方源码doc/examples中的remux.c示例。
正在学习 c++,对于这个报错实在是没有头绪。