【问题标题】:Effectively sending/streaming real-time video有效发送/流式传输实时视频
【发布时间】:2018-05-04 21:35:29
【问题描述】:

我正在开发一款游戏,我想将相机的输出从服务器(渲染所有内容)流式传输到多个客户端。为简单起见,我将忽略所有音频数据。

目前,我将相机的渲染记录为分辨率为 400x300 的位图,然后将其转换为 JPEG,添加时间戳并通过 UDP 将其发送到客户端。

在给定分辨率下,我的有效负载大小从 13KB 到 20KB 不等。我怎样才能使它更有效?

【问题讨论】:

  • 关于“什么是最好的......”主题的问题通常不适合 stackoverflow。您能否细化您的问题以询问具体的改进,而不是让我们猜测“更有效”对您意味着什么?
  • 是的。非常感谢您指出这一点。
  • 你选择jpg有什么原因吗?您是否考虑过使用更高效的视频编解码器的 RTSP/RTP?您是否考虑过在客户端进行渲染?
  • 我考虑过 RTP,但到目前为止我未能实现它(或找到我可以使用的库)

标签: c# video-streaming real-time


【解决方案1】:

使用视频编解码器,而不是图像编解码器。

JPEG 适用于单个图像。 (有 MJPEG,它实际上是对此的一种破解......但它的质量并不是那么好。)

大多数设备都有一个硬件编解码器,您可以使用 H.264 之类的东西。如果没有,您可以在软件中使用 H.264,或使用免费和开放的编解码器,如 VP8 或 VP9……请注意,这些编解码器占用更多 CPU 进行编码。 (在如此低的分辨率下,这并不重要。)

【讨论】:

  • 视频格式的优点是它们使用帧间压缩,对吗?但是,如果我在渲染它们时就发送单帧,为什么使用视频编解码器要好得多?
  • @EricMarchettiSantos 您将把每一帧发送到编解码器。如果您想要低延迟的视频,有 H.264、VP8 和 VP9 的配置可以在此模式下工作。
  • 我不需要延迟第一帧来等待下一帧吗?你能推荐我进一步阅读吗?
【解决方案2】:

考虑到您想保持图像尺寸,我能想到两件事可以减少有效负载:

这是我刚刚做的一个计算:

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,这很重要。

  • 帧率 - 今天的大多数相机可以支持高达 200 FPS,这对于流畅的视频是完全没有必要的。您可以使用 20 FPS 并仍然获得高质量的视频。降低 FPS 将线性减少负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2016-11-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多