有效sending/streaming实时视频
Effectively sending/streaming real-time video
我正在开发一款游戏,我想将摄像机的输出从服务器(渲染所有内容)流式传输到多个客户端。为简单起见,我忽略了所有音频数据。
目前,我将相机的渲染记录为分辨率为 400x300 的位图,然后将其转换为 JPEG,添加时间戳并通过 UDP 将其发送到客户端。
对于给定的分辨率,我的负载大小从 13KB 到 20KB 不等。我怎样才能让它更有效?
考虑到你想保持图像尺寸,我能想到有两件事可以减少负载:
- JPEG image quality - 降低 JPEG 图像质量可以大大减小其大小。
这是我刚刚计算的结果:
400 x 300 JPEG,质量为 10/10 = 29.6KB。
400 x 300 JPEG,质量为 8/10 = 19.6KB。
400 x 300 JPEG,质量为 5/10 = 8.7KB。
400 x 300 JPEG,质量为 2/10 = 5.6KB。
因此,如您所见,损失 0.2 质量会导致损失 1/3 的图像权重,这很重要。
- Framerate - 今天的大多数相机可以支持高达 200 FPS,这对于流畅的视频来说是完全没有必要的。您可以使用 20 FPS 并仍然获得高质量的视频。降低 FPS 将线性减少负载。
使用视频编解码器,而不是图像编解码器。
JPEG 适用于单张图片。 (有 MJPEG,这实际上是对此的一种破解……但它的质量并不是那么好。)
大多数设备都有硬件编解码器,例如 H.264,您可以使用。如果没有,您可以在软件中使用 H.264,或使用免费开放的编解码器,如 VP8 或 VP9...请注意,这些编码需要更多 CPU。 (并不是说在这么低的分辨率下它会很重要。)
我正在开发一款游戏,我想将摄像机的输出从服务器(渲染所有内容)流式传输到多个客户端。为简单起见,我忽略了所有音频数据。
目前,我将相机的渲染记录为分辨率为 400x300 的位图,然后将其转换为 JPEG,添加时间戳并通过 UDP 将其发送到客户端。
对于给定的分辨率,我的负载大小从 13KB 到 20KB 不等。我怎样才能让它更有效?
考虑到你想保持图像尺寸,我能想到有两件事可以减少负载:
- JPEG image quality - 降低 JPEG 图像质量可以大大减小其大小。
这是我刚刚计算的结果:
400 x 300 JPEG,质量为 10/10 = 29.6KB。
400 x 300 JPEG,质量为 8/10 = 19.6KB。
400 x 300 JPEG,质量为 5/10 = 8.7KB。
400 x 300 JPEG,质量为 2/10 = 5.6KB。
因此,如您所见,损失 0.2 质量会导致损失 1/3 的图像权重,这很重要。
- Framerate - 今天的大多数相机可以支持高达 200 FPS,这对于流畅的视频来说是完全没有必要的。您可以使用 20 FPS 并仍然获得高质量的视频。降低 FPS 将线性减少负载。
使用视频编解码器,而不是图像编解码器。
JPEG 适用于单张图片。 (有 MJPEG,这实际上是对此的一种破解……但它的质量并不是那么好。)
大多数设备都有硬件编解码器,例如 H.264,您可以使用。如果没有,您可以在软件中使用 H.264,或使用免费开放的编解码器,如 VP8 或 VP9...请注意,这些编码需要更多 CPU。 (并不是说在这么低的分辨率下它会很重要。)