首页 > 解决方案 > 相机和屏幕同步

问题描述

问题描述:

图片

我们有一台摄像机,它以每秒 30 帧的速度发送现场体育比赛的视频。另一方面,我们有一个屏幕,可以立即代表即将到来的每一帧。

假设*帧将按顺序到达

1.看屏幕的人会有什么体验?

2.我们可以做些什么来改进它?

标签: algorithmcamerascreenframe-rate

解决方案


您的播放将具有非常可变的帧速率,这会在任何平滑移动期间导致可见的伪影......

为了解决这个问题,您需要实现图像 FIFO,它将覆盖更大的时间,这是您最差的延迟差异(理想情况下至少是 2 倍以上)。因此,如果您有 300ms-100ms 延迟差异和 30 fps,那么最小 FIFO 大小为:

n = 2 * (300-100) * 0.001 * 30 = 12 images

现在复制应该是这样的:

  1. 初始化播放

    只需开始将图像获取到 FIFO 中,直到 FIFO 半满(包含最大延迟差异的图像)

  2. 回放

    所以任何传入的图像在接收时都会插入 FIFO(除非 FIFO 已满,在这种情况下,您要等到有空间放置新图像或跳过帧)。同时,在某个线程或计时器(并行运行)中,您每 1/30 秒从 FIFO 中获取图像并渲染它(如果 FIFO 为空,您使用最后一个图像,您甚至可以再次转到第 1 项)。

  3. 播放停止

    一旦 FIFO 长时间为空,然后某个阈值(没有新帧传入),您将停止播放。

FIFO 大小保留和何时开始播放取决于图像源时序属性(因此它不会溢出或低于 FIFO)......

如果您需要实现自己的 FIFO 类,那么恒定大小的循环缓冲区是您的朋友(因此您不需要在 FIFO 输入/输出操作中复制所有存储的图像)。


推荐阅读