algorithm - 相机和屏幕同步
问题描述
问题描述:
我们有一台摄像机,它以每秒 30 帧的速度发送现场体育比赛的视频。另一方面,我们有一个屏幕,可以立即代表即将到来的每一帧。
假设*帧将按顺序到达
1.看屏幕的人会有什么体验?
2.我们可以做些什么来改进它?
解决方案
您的播放将具有非常可变的帧速率,这会在任何平滑移动期间导致可见的伪影......
为了解决这个问题,您需要实现图像 FIFO,它将覆盖更大的时间,这是您最差的延迟差异(理想情况下至少是 2 倍以上)。因此,如果您有 300ms-100ms 延迟差异和 30 fps,那么最小 FIFO 大小为:
n = 2 * (300-100) * 0.001 * 30 = 12 images
现在复制应该是这样的:
初始化播放
只需开始将图像获取到 FIFO 中,直到 FIFO 半满(包含最大延迟差异的图像)
回放
所以任何传入的图像在接收时都会插入 FIFO(除非 FIFO 已满,在这种情况下,您要等到有空间放置新图像或跳过帧)。同时,在某个线程或计时器(并行运行)中,您每 1/30 秒从 FIFO 中获取图像并渲染它(如果 FIFO 为空,您使用最后一个图像,您甚至可以再次转到第 1 项)。
播放停止
一旦 FIFO 长时间为空,然后某个阈值(没有新帧传入),您将停止播放。
FIFO 大小保留和何时开始播放取决于图像源时序属性(因此它不会溢出或低于 FIFO)......
如果您需要实现自己的 FIFO 类,那么恒定大小的循环缓冲区是您的朋友(因此您不需要在 FIFO 输入/输出操作中复制所有存储的图像)。
推荐阅读
- windows - Windows 10 上的 Linux 子系统位于 C 以外的另一个驱动器上:
- javascript - 使用 javascript 或 jquery 展开/折叠父元素?
- android - 降级最低 API 版本?
- android - 嵌套片段中的按钮在单击时不执行任何操作
- r - 从 R 中的字符串 cbind 动态列名
- python - Python以逻辑或形式重新匹配两个连续的子字符串
- modelica - 在派生模型中设置枚举索引向量
- android - Google 登录使用什么机制在应用之间共享数据?
- angular - 表格单元格中的角度 2 向绑定
- vb.net - SSIS 脚本任务 - VB 循环问题