abcxiawei 发表于 2024-1-18 18:56

串流引发的疑问:视频解码能力的上限由谁决定?

本帖最后由 abcxiawei 于 2024-1-18 19:00 编辑

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

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

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

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

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

我不知道这个推论对不对,所以求教一下更专业的人。谢谢

leafleaf 发表于 2024-1-18 19:40

显卡:占用不满!=我没尽力

—— 来自 S1Fun

Xerxes_2 发表于 2024-1-18 20:01

感觉是内存瓶颈了

JetBrains 发表于 2024-1-18 20:10

真上限不存在,假上限比如 ffmpeg 一直都是单线程之类的,显卡调用,各种各样的的原因都有可能造成,具体看环境

abcxiawei 发表于 2024-1-18 20:57

Xerxes_2 发表于 2024-1-18 20:01
感觉是内存瓶颈了

内存瓶颈?无论是控制端还是被控端都没有发现爆内存啊

czgasd 发表于 2024-1-18 21:14

abcxiawei 发表于 2024-1-18 20:57
内存瓶颈?无论是控制端还是被控端都没有发现爆内存啊

他应该说的是内存带宽,不太了解云游戏,不过要排除这个,你下个hwinfo打开传感器页看看dram读取/写入是不是很高?再用adia64跑下内存带宽测试?

iou90 发表于 2024-1-18 21:56

简单的没啥用的废话就是

不能性能的终端 对网络io 解码协议 这些的表现自然有差距
而 gpu 性能没有用尽当然是软件没有把硬件用尽的问题 就是涉及到的串流/云游戏服务与解码的协议那的问题了或许

日日夜夜 发表于 2024-1-18 22:24

说明那个百分比只能代表某一种运算模式的占用达到了这个值,正如你任务管理器里cpu到了100%的时候,也可能cpu里计算单元过半的逻辑管没有在工作一样这个百分比数值是把那么多计算模式压缩成一维的映射,在很多情况下并没有参考意义

也就是说,当你没有拿到他们是怎么详细得到这个百分比数值的算法时,什么都是白谈,唯一可以确定的仅仅是到了100%的时候你一定得等着它而已

楚轩 发表于 2024-1-19 09:00

显卡还兼顾渲染这块工作画面渲染不过来解码再快也没用 用过,madvr看hdr视频就知道了 23.976视频随便看 59.94就开始掉帧

noahhhh 发表于 2024-1-19 09:03

也有可能是串流软件的原因,比如算法上为了保延迟,超过多少毫秒就强制丢帧

hourousha 发表于 2024-1-19 09:56

abcxiawei 发表于 2024-1-19 14:10

noahhhh 发表于 2024-1-19 09:03
也有可能是串流软件的原因,比如算法上为了保延迟,超过多少毫秒就强制丢帧
...

如果是丢帧,那画面应该会有卡顿,毕竟丢帧后帧和帧之间差别过大。

但问题是,我的一点卡顿都没有,动态画面的过渡是非常自然的,就是慢,比声音慢很多,我想来想去,只有可能是我这边播放的慢导致的,比如对面1秒送了144帧过来,我这边1秒只能解码60帧,还剩下84帧在排队等着,那画面岂不就是慢了吗
页: [1]
查看完整版本: 串流引发的疑问:视频解码能力的上限由谁决定?