【问题标题】:VLCKit-based app prevents screensaver基于 VLCKit 的应用程序可防止屏幕保护程序
【发布时间】:2018-03-26 14:53:01
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: macos cocoa vlc libvlc nsnotifications


    【解决方案1】:

    在 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/

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2012-01-11
      • 2020-07-04
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多