0

对于我的学校项目,我必须实时将屏幕抓取从 1 个站(即服务器)流式传输到另一个(即客户端),两者都运行 linux(ubuntu)。我正在使用 libav-tools(avconv 作为服务器端的编码器,avplay 作为客户端的播放器)

avconv 使用 x11grab 格式从屏幕抓取。

我的问题是:avconv 需要几秒钟来输出编码的视频。这个等待对于 RT 来说太长了。

我尝试过流式传输到 localhost 以避免网络影响速度,但似乎 avconv 仍然要为漫长的等待负责。此外,流式传输视频文件似乎要快得多,几乎是立即的。

该项目是用 C++ 实现的,并在一个 fork 中执行 avconv。

关于缩短程序的任何建议?

4

1 回答 1

0

这很可能是由于内部缓冲造成的。通常有一个缓冲区在默认情况下太大了。那是因为没有延迟不是大多数软件的主要关注点,他们更关心不良连接和这类问题,这就是缓冲区的用途。

请参阅https://libav.org/avconv.html,搜索“nobuffer”或“-analyzeduration”或“-rtbufsize”或“-max_delay”或“-fpsprobesize”或“rtmp_buffer”(如果您使用rtmp)或其他试试你的运气。

总会有明显的延迟,特别是如果您使用像 h264 这样的编码进行传输。但是几秒钟它不需要处于受控环境中。您应该能够将其降低到几分之一秒。

于 2014-12-28T23:04:29.973 回答