对于我的学校项目,我必须在实时中将屏幕抓取从1个站点(即服务器)流向另一个站点(即客户端),两者都运行linux(ubuntu)。 我正在使用libav-tools(avconv作为服务器端的编码器,avplay作为客户端的播放器)
avconv使用x11grab格式从屏幕抓取。
我的问题是:avconv需要几秒钟才能输出编码视频。这种等待对于RT来说太长了。
我已经尝试过流式传输到localhost以避免网络对速度的影响,似乎avconv负责漫长的等待。 此外,流媒体视频文件似乎更快,几乎立即。
该项目在C ++中实现,并在fork中执行avconv。
有关缩短程序的任何建议吗?
答案 0 :(得分:0)
这很可能是由于内部缓冲造成的。通常有一个缓冲区,默认情况下太大了。这是因为没有延迟不是大多数软件的主要关注点,他们更关心的是错误的连接和那些问题,这就是缓冲区的用途。
请参阅https://libav.org/avconv.html,搜索“nobuffer”或“-analyzeduration”或“-rtbufsize”或“-max_delay”或“-fpsprobesize”或“rtmp_buffer”(如果您使用rtmp)或其他人并尝试运气。
总会有明显的延迟,特别是如果您使用像h264这样的编码进行传输。但是几秒钟它不需要在受控环境中。你应该可以把它降低到几分之一秒。