我有一个while循环,它通过检索每个帧来解码视频文件,所以像这样:
while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) {
...
}
现在,一旦检索到一个帧,就需要在未来的某个时刻将其绘制到屏幕上(根据帧的时间戳)。如何实现?是否有一些方法可以设置在特定时间执行的回调?
答案 0 :(得分:1)
您可以将(帧,时间)对推送到队列,然后让一个单独的线程执行以下算法:
loop {
time, frame = pop(queue);
wait_until(time);
display(frame);
}
其中pop
等待项目被推入队列(如果它是空的。
答案 1 :(得分:0)
使用select(2)
等待,直到您需要绘制框架(或者直到您需要执行其他操作,由传递给select()
的某个FD指示的内容表示。)