我最近基于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会阻止屏幕保护程序运行?有没有办法改变这种行为?
如果您需要任何进一步的细节,请告诉我......并提前致谢!
答案 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/
答案 1 :(得分:1)
事实证明,VLCKit确实阻止了屏幕保护程序默认运行,并且它不使用libvlc这样做,所以libvlc选项“--no-disable-screensaver”我曾经试图通过没有得到尊重。
解决方案是在VLCMediaPlayer.m 的第1409行注释掉UpdateSystemActivity()函数调用,正如我所建议here。