相机禁用时FFMPEG返回的内容(拔下插头)

时间:2017-08-21 08:54:38

标签: c++ ffmpeg camera rtsp

我使用FFMPEG通过RTSP流连接到IP摄像机。我试图检测连接是否丢失。我使用interrupt_callback创建超时,并检查av_read_frame()的输出,有时它工作并可以重新连接到摄像头。但是,如果我禁用相机(拔下网线),它会被阻止并永久停顿。 希望有人有类似的问题,可以帮助我。 我在这里尝试:

设置interrupt_callback:

ifmt_ctx = avformat_alloc_context();
ifmt_ctx->interrupt_callback.callback = interruptCallback;
ifmt_ctx->interrupt_callback.opaque = this;

if ((ret = avformat_open_input(&ifmt_ctx, in_file, 0, &options)) != 0) {
    log.error("Could not open input stream {}", in_file);
    return 1;
}

interrupt_callback功能:

int CtFfmpeg::interruptCallback(void *ctx)
{
    CtFfmpeg* camera = reinterpret_cast<CtFfmpeg*>(ctx);
    struct tm *tm;
    time_t now;
    now = time(0);
    tm = localtime (&now);
    int nowTime_callback = tm->tm_sec;
    if ((nowTime_callback - camera->initTime_callback) > 15) { //Timeout after 20 seconds
        Logger log{__func__};
        log.error("Time out");
        return 1;
    }

    return 0;
}

尝试重新启动连接:

ff->ret = av_read_frame(ff->ifmt_ctx, &(ff->tmp_pkt));

    if (ff->ret < 0){
    // do restart here
}

0 个答案:

没有答案