我可以将传入的 BMP 图像流显示为视频吗? (Android 应用程序)
Can I display an incoming stream of BMP images as a video? (Android app)
是否可以将传入的 BMP 图像流作为具有超低延迟的视频播放(图像显示时间低于 20 毫秒)
图像将以每秒 20 张图像的频率出现。
这种天真的解决方案是否可行,或者图像是否应该使用 H.264/5 编码?
应该如何解决这个问题?
亲切的问候
Q : "Is this naive solution possible...?"
是的。
您可能也喜欢 阅读此内容。
Q : "...should the images be encoded using H264/5?"
见鬼去吧。
给定上述 20 Hz BMP-image ingress-rate,对于所有 V,每个图像大约有 50 [ms]
isual-part的(主要分布)MVC-system.
在所说的 50 毫秒内,浪费的时间应该为零,并且任何东西都不会阻塞。
因此接收-引擎必须保持入口稳定data-flow,没有任何其他流量过载,un-coordinated 带宽(内存,I/O,...)吃东西(BMP-images 的大小目前还没有提到)并且必须提供一些方法,什么会被送入 presenter-engine 如果要显示的“下一个”数据不完整或根本不存在。
那么压缩呢?
压缩是一把 double-sided 剑 - 你显然减少了 data-volume(有一些 SER/DES-codecs 甚至以失去原始 data-richness 的一部分为代价,是的, 确切地 - 故意有损压缩方案 ), 同时通常添加一些额外的 data-re-framing 并且, 也许, R/S 或其他“line-code” error-detection/error-correction, 所以最终体积 data-to-xmit 不需要像纯 compression-part 本身在理论上允许的那么小。
结果?
所有这些都付出了巨大的代价 - 在 SER/coder-side 上,这里是为了将尽可能少的数据输入(明知 low-bandwidth / 最常见的 un-manageable 延迟)传输,以及在 decoder/DES-side.
因此,假设 20 Hz 刷新率留给一个 frame-repaint 的总共不超过 50 毫秒,receiver-engine 处理和 presenter-engine 处理的总和不能花费更多比那些每帧 50 毫秒。任何 decode-related 和 DESerialiser-related 处理都是决定因素。
然而,如果适当的设计和完美的工程能够正确且足够稳健地完成这项工作,则可能会成功。
检查您的目标设备是否有:
- 运输资源限制
(即消耗多少时间以及每次到达分配/锁定哪些资源),
- memory-I/O
(延迟和内存-I/O 任何交错 data-flow 模式的并发限制),
- cache-hierarchy
(如果存在于设备上)尺寸、成本和 I/O-限制),
- processing limits
(如果是多核,NUMA越多,谨防non-uniform内存-I/O陷阱)
- presenter-engine硬件瓶颈
(内存-I/O,显示设备缓冲- I/O 限制和任何其他 add-on 延迟)
因为这些细节中的任何一个都可能 de-rail 您的 (error-resilient) 数据的顺畅流动最终会在适当的时间呈现在目标设备上,以达到 20 FPS 的目标。
祝你好运!
注意事项:
如果您可以直接利用 data-reduction 来源,请抓住机会并做到这一点,例如在任何情况下,比如你先验地知道所有目标 presenter-engines 都是 B/W,永远不要“发送”彩色 BMP,剥离关闭所有 per-frame colour-table 和 high-level colour-profile 技巧和流不只是原始的 right-sized 栅格数据,匹配 worst-case 目标终端设备的处理和延迟上限场景。
仔细检查通用 BMP-data-format 定义的所有这些冗余和主要浪费(重复)部分,不要 re-broadcast 'em
;)
是否可以将传入的 BMP 图像流作为具有超低延迟的视频播放(图像显示时间低于 20 毫秒)
图像将以每秒 20 张图像的频率出现。
这种天真的解决方案是否可行,或者图像是否应该使用 H.264/5 编码?
应该如何解决这个问题?
亲切的问候
Q : "Is this naive solution possible...?"
是的。
您可能也喜欢
Q : "...should the images be encoded using H264/5?"
见鬼去吧。
给定上述 20 Hz BMP-image ingress-rate,对于所有 V,每个图像大约有 50 [ms]
isual-part的(主要分布)MVC-system.
在所说的 50 毫秒内,浪费的时间应该为零,并且任何东西都不会阻塞。
因此接收-引擎必须保持入口稳定data-flow,没有任何其他流量过载,un-coordinated 带宽(内存,I/O,...)吃东西(BMP-images 的大小目前还没有提到)并且必须提供一些方法,什么会被送入 presenter-engine 如果要显示的“下一个”数据不完整或根本不存在。
那么压缩呢?
压缩是一把 double-sided 剑 - 你显然减少了 data-volume(有一些 SER/DES-codecs 甚至以失去原始 data-richness 的一部分为代价,是的, 确切地 - 故意有损压缩方案 ), 同时通常添加一些额外的 data-re-framing 并且, 也许, R/S 或其他“line-code” error-detection/error-correction, 所以最终体积 data-to-xmit 不需要像纯 compression-part 本身在理论上允许的那么小。
结果?
所有这些都付出了巨大的代价 - 在 SER/coder-side 上,这里是为了将尽可能少的数据输入(明知 low-bandwidth / 最常见的 un-manageable 延迟)传输,以及在 decoder/DES-side.
因此,假设 20 Hz 刷新率留给一个 frame-repaint 的总共不超过 50 毫秒,receiver-engine 处理和 presenter-engine 处理的总和不能花费更多比那些每帧 50 毫秒。任何 decode-related 和 DESerialiser-related 处理都是决定因素。
然而,如果适当的设计和完美的工程能够正确且足够稳健地完成这项工作,则可能会成功。
检查您的目标设备是否有:
- 运输资源限制
(即消耗多少时间以及每次到达分配/锁定哪些资源), - memory-I/O
(延迟和内存-I/O 任何交错 data-flow 模式的并发限制), - cache-hierarchy
(如果存在于设备上)尺寸、成本和 I/O-限制), - processing limits
(如果是多核,NUMA越多,谨防non-uniform内存-I/O陷阱) - presenter-engine硬件瓶颈
(内存-I/O,显示设备缓冲- I/O 限制和任何其他 add-on 延迟)
因为这些细节中的任何一个都可能 de-rail 您的 (error-resilient) 数据的顺畅流动最终会在适当的时间呈现在目标设备上,以达到 20 FPS 的目标。
祝你好运!
注意事项:
如果您可以直接利用 data-reduction 来源,请抓住机会并做到这一点,例如在任何情况下,比如你先验地知道所有目标 presenter-engines 都是 B/W,永远不要“发送”彩色 BMP,剥离关闭所有 per-frame colour-table 和 high-level colour-profile 技巧和流不只是原始的 right-sized 栅格数据,匹配 worst-case 目标终端设备的处理和延迟上限场景。
仔细检查通用 BMP-data-format 定义的所有这些冗余和主要浪费(重复)部分,不要 re-broadcast 'em
;)