有没有人注意到串流类远程桌面的画面声音不同步问题?

113 天前
 abcbuzhiming
最近折腾了串流,主要是想云游戏,也试用了不少云游戏平台,这类串流软件都是基于差不多的原理,在被控端实时采集视频然后编码,传输到主控端解码。然后我发现了一个现象:
随着被控端上传的带宽(码率)和帧数的提升,控制端的电脑会因为无法及时的解码,而画面开始延迟(画面声音不同步,画面比声音慢的多,可以达到几秒甚至十几秒),主控端的输入要半天才能反应。但是很有趣的是,它不卡顿,一点都不卡,就是影音不同步。


这个现象我仔细研究过,目前的结论是,是由不同的硬件配置导致的,一开始我还以为是网络,后来一个偶然的契机,我在同一网络条件下使用了不同硬件配置的电脑来做主控端,控制端是相同的电脑,结果发现它们在同一网络下,性能表现不一样。
简单的说就是,硬件性能越高的的电脑,就能承受更高的带宽(码率)和展示更高的帧数。配置越低,你就不能开高帧数,否则很快就画面声音不同步了。


我对这个问题刚开始很不理解,因为有另外一个现象,出现影音不同步的时候,不管主控端这边的解码,是通过 CPU 的软解,还是通过 GPU 的硬解,CPU 占用率或 GPU 硬编码器的占用率,都没有满载,甚至只有最多 20%不到。这让我产生了一个怀疑,就是视频解码这个工作,是否存在一个内定的上限,它并不是如同其它计算工作一样,会吃掉所有计算资源来完成计算,而是达到一定上限后就不再提升,就像游戏中的限制最大帧率一样。比如它就限死了,解码每秒只能 60 帧,可被控端那边源源不断的输送着每秒 144 帧的数据过来,那可不就画面越来越慢于声音了。

有这个怀疑是因为视频这个东西长期都是用在电视和电影领域的,而这些领域长期以来都有自身的行业标准,比如 30 帧,60 帧之类的。那么仅仅是把这些软件化的东西,会不会也带有这个限制?

我自己去搜了一下相关的东西,可能我不是视频领域的专业人员,找 ffmpeg 没有找到可能相关的资料。然后我就又转头去找各家显卡的硬解码资料,但是各家显卡,都只写了它们对各种编码,在某个分辨率下的支持,但是并没有资料证明它们对解码这些视频数据的时候存在,或不存在限制最大帧数的东西?

我不知道这个推论对不对,所以求教一下更专业的人。谢谢
558 次点击
所在节点    问与答
1 条回复
journalist
113 天前
https://jchuynh.medium.com/how-fast-can-you-decode-videos-into-frames-with-ffmpeg-part-1-d12a267f9b13 很明显没有,起码不可能限制到 60 帧。你用的软件如果有缓冲区大小的设置可以尝试调节一下。性能不够只能丢包和增加延迟二选一,另外画面和声音不同步可以选择给音频额外增加延迟。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1009771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX