Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个 while 循环,它通过检索每一帧来解码视频文件,所以是这样的:
while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) { ... }
现在,一旦检索到帧,就需要在未来的某个时间点将其绘制到屏幕上(根据帧的时间戳)。这如何实现?有什么方法可以设置在特定时间执行的回调吗?
您可以将(帧,时间)对推送到队列中,然后让单独的线程执行以下算法:
loop { time, frame = pop(queue); wait_until(time); display(frame); }
wherepop等待一个项目被推入队列,如果它是空的。
pop
用于select(2)等到您需要绘制框架(或直到您需要执行其他操作,由传递给select()被戳的 FD 之一指示)。
select(2)
select()