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

Macos 基于VLCKit的应用程序阻止屏幕保护程序,macos,cocoa,vlc,libvlc,nsnotifications,Macos,Cocoa,Vlc,Libvlc,Nsnotifications,我最近基于VLCKit构建了一个简单的Swift macOS应用程序;其目的主要是通过RTSP在屏幕上始终可见的窗口中播放IP摄像机流(即监控闸门) 鉴于应用程序的用途,我一直在播放流媒体,除非用户在Dock中将其最小化(这意味着我只调用mediaPlayer?.stop in ViewDidDemove) 这个应用程序运行得很好,但我最近发现,除非最小化(因此,播放已经停止),否则屏幕保护程序将无法运行 我尝试订阅了所有NSNotificationCenter com.apple.screen

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

鉴于应用程序的用途,我一直在播放流媒体,除非用户在Dock中将其最小化(这意味着我只调用mediaPlayer?.stop in ViewDidDemove)

这个应用程序运行得很好,但我最近发现,除非最小化(因此,播放已经停止),否则屏幕保护程序将无法运行

我尝试订阅了所有NSNotificationCenter com.apple.screensaver.*通知,我意识到当播放运行时,没有一个通知被触发如果我最小化应用程序并停止播放,一切正常(屏幕保护程序在正常延迟后启动,所有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,它将列出所有可用选项

选项的完整列表是什么


在VLC中,有两个选项,分别称为“-disable screensaver”和“-no disable screensaver”。默认情况下,使用“--disable screensaver”

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

NSArray *options = @[@"--no-disable-screensaver"];
_mediaPlayer1 = [[VLCMediaPlayer alloc] initWithOptions:options];
VLC库中还有哪些可用选项?将选项“-help”传递给您的VLC,它将列出所有可用选项

选项的完整列表是什么


事实证明,VLCKit确实在默认情况下阻止了屏幕保护程序的运行,而且它不使用libvlc来执行此操作,因此libvlc选项--“no disable screensaver”(无禁用屏幕保护程序)在某一点上我试图通过,但没有得到尊重


解决方案是按照我的建议,在VLCMediaPlayer.m的第1409行注释掉UpdateSystemActivity()函数调用。

结果表明,VLCKit确实在默认情况下阻止了屏幕保护程序的运行,并且它不使用libvlc来执行此操作,因此libvlc选项--“no disable screensaver”我曾一度试图通过考试,但没有得到尊重


解决方案是按照我的建议,在VLCMediaPlayer.m的第1409行注释掉UpdateSystemActivity()函数调用。

非常感谢您的回答。它显然应该是正确的,因为它解释了如何通过自定义初始值设定项准确传递我需要的参数,这是我没有弄明白的。奇怪的是,传递这个参数并不会改变我的应用程序的行为,即使我传递了这个参数,屏幕保护程序也不会启动。我会更深入地研究它,并检查我是否在其他地方引起了这个问题。我会等几天再接受它,直到我明白这一点,但我相信你的答案是完全有道理的。这应该是好的,因为我从上面的链接得到了这个选项:]如果它不起作用,那么我们需要向VLC团队发射bug!有些选项确实有效,例如,如果我通过“无视频”,它将保持黑色;其他的,如“-grayscale”和“-disable screensaver”似乎被忽略了。这其实很奇怪。你试过把“-help”传递到你的VLC库吗?你能在列表中看到“--禁用屏幕保护程序”吗?如果没有,它可能无法工作,VLC将忽略它。事实证明,只有在macOS上,库才会忽略传递给libvlc的参数,并直接处理屏幕保护程序管理,正如我所解释的那样。我必须手动编辑VLCMediaPlayer.m以更改UpdateSystemActivity()行为。我将在这里发布我尝试的结果,以防万一,这将有助于其他人在未来。再次感谢您的支持!非常感谢你的回答。它显然应该是正确的,因为它解释了如何通过自定义初始值设定项准确传递我需要的参数,这是我没有弄明白的。奇怪的是,传递这个参数并不会改变我的应用程序的行为,即使我传递了这个参数,屏幕保护程序也不会启动。我会更深入地研究它,并检查我是否在其他地方引起了这个问题。我会等几天再接受它,直到我明白这一点,但我相信你的答案是完全有道理的。这应该是好的,因为我从上面的链接得到了这个选项:]如果它不起作用,那么我们需要向VLC团队发射bug!有些选项确实有效,例如,如果我通过“无视频”,它将保持黑色;其他的,如“-grayscale”和“-disable screensaver”似乎被忽略了。这其实很奇怪。你试过把“-help”传递到你的VLC库吗?你能在列表中看到“--禁用屏幕保护程序”吗?如果没有,它可能无法工作,VLC将忽略它。事实证明,只有在macOS上,库才会忽略传递给libvlc的参数,并直接处理屏幕保护程序管理,正如我所解释的那样。我必须手动编辑VLCMediaPlayer.m以更改UpdateSystemActivity()行为。我将在这里发布我尝试的结果,以防万一,这将有助于其他人在未来。再次感谢您的支持!