H.264 / WebRTC
H.264 介绍
H.264,也被称为 MPEG-4 AVC(Advanced Video Coding),是一种广泛使用的视频压缩标准,尤其适用于需要高效压缩比的应用场景,比如互联网流媒体传输、蓝光光盘视频等。
H.264 视频相较 MJPEG 视频拥有完整音频和低码率的特点,可以在更低的带宽下运行。由于 PiKVM 官方的H.264视频功能仅适配树莓派 GPU,所以在其它设备上使用H.264功能暂时无法硬编码(对于玩客云设备,Armbian 系统也没有可用的 VPU 驱动)。
下面是 One-KVM 项目中关于 H.264 视频的两种解决方案:libx264、ffmpeg。
Libx264
Libx264 是一个用于编码 H.264 视频的开源库,是由 VideoLAN 和其他贡献者开发的,并且由于其高效的编码质量和速度,在很多视频处理软件中都有使用。
作者已将其与 ustreamer 集成,在 Docker 版容器中默认启用此功能,相比后面的 ffmpeg 方案性能更好使用更加方便。此 ustreamer 分支可查看 https://github.com/mofeng-git/ustreamer。
H.264/WebRTC 网页视频可能需要额外映射 20000-40000 UDP 端口。
Ffmpeg
此方法已停止维护仅做归档使用
此功能由群友 自.知 设计,使用 ffmpeg 进行软编码。由于为 CPU 软件编码,在玩客云设备上此功能效果较差。
使用
整合包 One-KVM_Armbian_by-SilentWind_for-Onecloud_24.6.18 中已预装此功能,更早的版本中没有预装此功能(若需要手动安装可参照文末教程)。由于玩客云 CPU 性能较差,所以 kvmd-ffmpeg
服务默认为关闭状态(网页表现如下),避免影响其他服务的流畅性。
如需要可执行如下命令可手动开启。
在玩客云上,H.264 视频非常卡顿,使用体验较差。
安装
H.264/WebRTC
MJPEG 视频流传输使用网页访问相同的 HTTP 连接。相比之下,WebRTC 是一种完全不同的视频传输方式,使用 P2P 连接和 UDP 传输数据,这可以降低网络负载和网络延迟,不过增加了配置难度。
为此,One-KVM 会检查哪个网络接口是默认网关,并尝试使用 Google STUN 服务器查找外部地址。这在使用 Tailscale 或从外部互联网连接到 One-KVM 时是必要的。如果你不喜欢使用 Google(出于可靠性考虑,将其作为默认设置),你可以自行选择其他 STUN 服务器,或设置你自己的 STUN 服务器。
/etc/kvmd/override.yaml
中的默认配置:
如需异地访问,端口映射、异地组网两种方式任选其一即可,推荐使用异地组网方式。
端口映射
在防火墙映射 20000-40000 udp 端口,演示站就是使用的这个方法。
此方法局限性较大,需要映射太多端口,不推荐使用。
异地组网
这里以 Tailscale 异地组网为例,首先安装客户端:Download · Tailscale,这里可以直接在 One-KVM 主机上安装 Tailscale,安装命令如下。
然后进行多设备组网,下图是一个实例。
然后使用虚拟局域网 IP 访问即可使用 One-KVM 的 H.264/WebRTC 功能。
由于 Tailscale 官方中继服务器位于境外,网络联通性比较差,推荐使用自建中键服务器,可以参考这篇文章: 自建 Tailscale 中继服务器 | Anubis的小窝
视频演示
如果实际使用中感觉 H.264 视频质量不理想,可以尝试网页右上角系统菜单调整增加 H.264 比特率。