尝试使用 ffplay 和窗口管理器命令在 Pi 4B 上构建 CMS。IP 摄像机流通过 rtsp 和 UDP 传输,可以成功打开流并以不到半秒的延迟播放,并进行几次缓冲和帧调整(确切的命令选项可能与全屏切换情况无关)。
尝试双击 ffplay 窗口切换全屏。全屏模式完全空白。切换回来导致原始 ffplay 窗口消失。
使用 xwininfo 定位 ffplay 窗口,该窗口仍然存在于 X 服务器中。使用 xdotool 搜索并将 ffplay 窗口移动到 0 0 位置不会导致 ffplay 窗口出现。xdotool windowmap 导致屏幕空白一闪,然后什么都没有。
那么,ffplay 窗口消失是窗口管理器的问题、ffplay 的问题,还是两者的问题?
Pi 4B 板上的两个 HDMI 输出未使用,DisplayLink USB 加密狗用于提供单个基于 VGA 的显示器。安装了 DisplayLink 驱动程序,并手动编写了 xorg.conf 以支持单个 1366x768 显示器。
2022年6月4日进一步调查
在 DisplayLink USB 加密狗供电的显示器和 xrdp 远程会话上,使用 -v 详细选项运行 ffplay。输出类似;但是,在 DisplayLink USB 加密狗上打开会导致出现额外的消息Xlib:显示“:0.0”时缺少扩展名“RANDR”。因此,这似乎是 DisplayLink 驱动程序的 X11 兼容性问题,而不是 ffplay 问题。
2022年6月6日进一步调查
读https://wiki.archlinux.org/title/DisplayLink,我正在为 DisplayLink 加密狗使用 udlfb 驱动程序,它不支持 xrandr 扩展。因此,我对 xorg.conf 进行了硬编码,以手动配置 DisplayLink 显示器以及原生 HDMI0 显示器。这对于除 ffplay 之外的其他全屏应用程序非常有效。udl 驱动程序是 udlfb 的 DRM 重写,它支持通过 xrandr 配置。我看到系统中已加载 udl 模块,因此我将加密狗从 udlfb 解除绑定并将 new_id 添加到 udl。使用 xrandr 启用 DisplayLink 显示器,屏幕刷新率仅为 1fps,非常慢。这无法使用。DisplayLink 论坛上有 xorg 补丁,但据说都没有在 RPi4 上成功测试过。我不敢尝试,因为 Pi 正在用于其他用途。
我似乎陷入了两难境地。要让 ffplay 正确全屏,我需要 xrandr 扩展。要顺利使用 DisplayLink,不能使用支持 xrandr 的驱动程序。所以我要么挖出 ffplay 的源代码来禁用双击,要么将程序更改为使用 xwintool 来最大化窗口。