求助, ffmpeg 符号文件报错

查看 24|回复 0
作者:lingeo   
代码是使用 ffmpeg 捕获 10 秒 rtsp 流,平台是 windows ,IDE 使用 visual studio 。代码是让 chatgpt 写的 demo,执行到avcodec_receive_frame时,报错如下。


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++,对于这个报错实在是没有头绪。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部