我正在将桌面捕获从 Windows 10 计算机的两个显示器间接显示流式传输到 Raspberry Pi 4 的两个 HDMI 输出端口。
现在,RPi 4 在运行两个流时 CPU 已达到最大负荷。延迟也各不相同,难以测量。
我的设置是从手册和各种帖子中收集到的基本设置,但仍然需要大量调整。
为了执行此调整,我需要准确测量每个步骤的延迟,并且如果可能的话,还要知道每个步骤使用了多少 CPU。
大致步骤为截屏、硬件编码、打包SRT容器、网络发送、网络接收、解包SRT、硬件解码显示。
各种设置,例如更改容器格式、更改缓冲区长度、更改视频质量以及可能还有更多我尚未发现的设置,都会影响延迟、CPU 使用率和帧速率,这就是我询问如何衡量这些方面的原因。
这样我就可以调整大量的 ffmpeg 参数并以客观准确的方式观察它们所产生的差异。
以下是我当前的设置
在 Windows 电脑上
ffmpeg -f gdigrab -framerate 30 -video_size 1680x1050 -offset_x 1920 -offset_y +525 -i Desktop -vcodec hevc_nvenc -f mpegts srt://mypi.lan:6667
在树莓派上
ffplay -fs -f mpegts srt://:6666?mode=listener
当两个软件运行时,它们会输出基本指标
(ffmpeg)帧=85 fps=28 q=21.0 大小=343kB 时间=00:00:03.03 比特率=926.2kbits/s 重复=0 丢弃=1 速度=0.996x
(ffplay)83869.57 MV: 0.036 fd=1330967 aq= 0KB vq= 0KB sq= 0B f=0/0
这些信息在终端中不断被覆盖,我看不出有什么办法可以将其变成直方图,而且这些信息也不完整,例如 ffplay 没有关于帧速率或比特率的信息,vq 是对延迟的粗略估计,但随着比特率的变化,很难一眼就估计出延迟是多少。此外,vq 是视频队列大小,并不代表整个系统的延迟。