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

时间:2018-03-26 14:53:01

标签: macos cocoa vlc libvlc nsnotifications

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

考虑到应用程序的目的,我一直保持流式播放,除非用户在Dock中最小化它(意味着我只在mediaDidDisappear中调用mediaPlayer?.stop)。

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

我已经尝试订阅所有NSNotificationCenter com.apple.screensaver 。*通知,我意识到当播放正在运行时,它们都没有被触发; 如果我最小化应用并停止播放,则一切正常(屏幕保护程序在常规延迟后启动,所有com.apple.screensaver通知都被正确检测到。)

我还尝试运行 pmset -g 来检查我的应用是否被列为阻止睡眠,但事实并非如此。

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

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

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

如果您需要任何进一步的细节,请告诉我......并提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

enter image description here

答案 1 :(得分:1)

事实证明,VLCKit确实阻止了屏幕保护程序默认运行,并且它不使用libvlc这样做,所以libvlc选项“--no-disable-screensaver”我曾经试图通过没有得到尊重。

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