基于 VLCKit 的应用程序阻止屏幕保护程序

VLCKit-based app prevents screensaver

我最近基于 VLCKit 构建了一个简单的 Swift macOS 应用程序;它的目的主要是通过 RTSP 在 window 中播放 IP 摄像机流,该流在屏幕上始终可见(即监视门)。

考虑到应用程序的用途,我会一直播放流媒体,除非用户在 Dock 中将其最小化(这意味着我只在 viewDidDisappear 中调用 mediaPlayer?.stop)。

该应用程序运行良好,但我最近发现,除非它被最小化(因此,播放已经停止),否则某些东西会阻止屏幕保护程序 运行.

我试过订阅所有 NSNotificationCenter com.apple.screensaver.* 通知,我意识到当播放 运行、none 被解雇; 如果我最小化应用程序并停止播放,一切正常(屏幕保护程序在正常延迟后启动,所有 com.apple.screensaver 通知都被正确检测到)。

我也试过 运行 pmset -g 检查我的应用程序是否被列为防止睡眠,但事实并非如此。

我的印象是,我的 VLCMediaPlayer 实例默认情况下会阻止启动屏幕保护程序。

我知道在 VLC Mac 应用程序中可以通过高级设置手动阻止屏幕保护程序,但我似乎无法在我的代码中找到要设置的参数来告诉 VLCKit停止阻止屏幕保护程序。

据您所知,默认情况下 VLCKit 会阻止屏幕保护程序 运行?有没有办法改变这种行为?

如果您需要任何进一步的详细信息,请告诉我...在此先感谢您!

在 VLC 中,有名为“--disable-screensaver”和“--no-disable-screensaver”的选项。默认情况下,使用“--disable-screensaver”。

如果您想启用屏幕保护程序,请执行以下操作:

NSArray *options = @[@"--no-disable-screensaver"];
_mediaPlayer1 = [[VLCMediaPlayer alloc] initWithOptions:options];

您的 VLC 库中还有哪些可用选项?将选项“--help”传递给您的 VLC,它将列出所有可用选项。

完整的选项列表是什么? https://wiki.videolan.org/VLC_command-line_help/

事实证明,VLCKit 实际上确实在默认情况下 运行 阻止屏幕保护程序,并且它不使用 libvlc 来这样做,所以 libvlc 选项“--no-disable-screensaver”我是有一次试图通过没有受到尊重。

解决方案是在 VLCMediaPlayer.m 的第 1409 行注释掉 UpdateSystemActivity() 函数调用,正如我所建议的 here.