gpt4 book ai didi

ffmpeg av_read_frame() 需要很长时间才能停止

转载 作者:行者123 更新时间:2023-12-04 07:40:18 26 4
gpt4 key购买 nike

我使用 ffmpeg 解码 RTSP 视频。它喜欢这样:
当它在文件末尾时,它在 av_read_frame() 中阻塞了很长时间,为什么?

最佳答案

各种原因都可能导致长时间阻塞。但是您可以控制 I/O 层的处理时间。

使用结构 AVFormatContext::interrupt_callback设置中断处理程序。

class timeout_handler {
public:
timeout_handler(unsigned int t) : timeout_ms_(TimeoutMs){}

void reset(unsigned int 0) {
timeout_ms_ = TimeoutMs;
lastTime_ = my_get_local_time();
}

bool is_timeout(){
const my_time_duration actualDelay = my_get_local_time() - lastTime_;
return actualDelay > timeout_ms_;
}

static int check_interrupt(void * t) {
return t && static_cast<timeout_handler *>(t)->is_timeout();
}

public:
unsigned int timeout_ms_;
my_time_t lastTime_;
};


/// .................
AVFormatContext * ic;
timeout_handler * th = new timeout_handler(kDefaultTimeout);
/// .................
ic->interrupt_callback.opaque = (void*)th ;
ic->interrupt_callback.callback = &timeout_handler::check_interrupt;
/// open input
// avformat_open_input(ic, ... );
// etc

/// .................
/// before any I/O operations, for example:
th->reset(kDefaultTimeout);
int e = AVERROR(EAGAIN);
while (AVERROR(EAGAIN) == e)
e = av_read_frame(ic, &packet);
// If the time exceeds the limit, then the process interruped at the next IO operation.

关于ffmpeg av_read_frame() 需要很长时间才能停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14558172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com