这是一个创建于 309 天前的主题,其中的信息可能已经有所发展或是发生改变。
最近折腾了串流,主要是想云游戏,也试用了不少云游戏平台,这类串流软件都是基于差不多的原理,在被控端实时采集视频然后编码,传输到主控端解码。然后我发现了一个现象:
随着被控端上传的带宽(码率)和帧数的提升,控制端的电脑会因为无法及时的解码,而画面开始延迟(画面声音不同步,画面比声音慢的多,可以达到几秒甚至十几秒),主控端的输入要半天才能反应。但是很有趣的是,它不卡顿,一点都不卡,就是影音不同步。
这个现象我仔细研究过,目前的结论是,是由不同的硬件配置导致的,一开始我还以为是网络,后来一个偶然的契机,我在同一网络条件下使用了不同硬件配置的电脑来做主控端,控制端是相同的电脑,结果发现它们在同一网络下,性能表现不一样。
简单的说就是,硬件性能越高的的电脑,就能承受更高的带宽(码率)和展示更高的帧数。配置越低,你就不能开高帧数,否则很快就画面声音不同步了。
我对这个问题刚开始很不理解,因为有另外一个现象,出现影音不同步的时候,不管主控端这边的解码,是通过 CPU 的软解,还是通过 GPU 的硬解,CPU 占用率或 GPU 硬编码器的占用率,都没有满载,甚至只有最多 20%不到。这让我产生了一个怀疑,就是视频解码这个工作,是否存在一个内定的上限,它并不是如同其它计算工作一样,会吃掉所有计算资源来完成计算,而是达到一定上限后就不再提升,就像游戏中的限制最大帧率一样。比如它就限死了,解码每秒只能 60 帧,可被控端那边源源不断的输送着每秒 144 帧的数据过来,那可不就画面越来越慢于声音了。
有这个怀疑是因为视频这个东西长期都是用在电视和电影领域的,而这些领域长期以来都有自身的行业标准,比如 30 帧,60 帧之类的。那么仅仅是把这些软件化的东西,会不会也带有这个限制?
我自己去搜了一下相关的东西,可能我不是视频领域的专业人员,找 ffmpeg 没有找到可能相关的资料。然后我就又转头去找各家显卡的硬解码资料,但是各家显卡,都只写了它们对各种编码,在某个分辨率下的支持,但是并没有资料证明它们对解码这些视频数据的时候存在,或不存在限制最大帧数的东西?
我不知道这个推论对不对,所以求教一下更专业的人。谢谢
1 条回复 • 2024-01-18 23:56:09 +08:00