如何将 ffplay 作为无窗口进程运行?

Posted

技术标签:

【中文标题】如何将 ffplay 作为无窗口进程运行?【英文标题】:How to run ffplay as a window-less process? 【发布时间】:2012-08-06 15:25:01 【问题描述】:

我将 ffplay 作为后台进程运行,它为我的主 UI 进程提供图像数据。我设置了“SDL_VIDEODRIVER = dummy”来禁止在 SDL 窗口中显示 ffplay 视频。

问题是即使视频输出窗口没有显示,ffplay 进程仍然显示为应用程序窗口(停靠、CMD+TAB 条目等)。我怎样才能避免这种情况?

【问题讨论】:

【参考方案1】:

-nodisp 选项对我来说效果很好(与 -autoexit 一起使用)。

在 Ubuntu 18.04、ffmpeg 3.4.6 中测试:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

来源:[FFmpeg-user] ffplay for audio only

【讨论】:

【参考方案2】:

Dock 条目由 SDLMain.m 添加,needs to be compiled 到 ffplay 中,以便在 Mac 上播放。在 SDLMain.m 中注释以下行后,ffplay 正在作为无窗口进程运行。

//#ifdef SDL_USE_CPS
//    
//        CPSProcessSerNum PSN;
//        /* Tell the dock about us */
//        if (!CPSGetCurrentProcess(&PSN))
//            if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
//                if (!CPSSetFrontProcess(&PSN))
//                    [NSApplication sharedApplication];
//    
//#endif /* SDL_USE_CPS */

/* Set up the menubar */
//[NSApp setMainMenu:[[NSMenu alloc] init]];
//setApplicationMenu();
//setupWindowMenu();

编辑这只会影响 Mac,因为我们在其他平台上不需要 int main() 周围的 SDLMain.m 包装器

【讨论】:

以上是关于如何将 ffplay 作为无窗口进程运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OS X 上将进程窗口置于前台?

在新进程中运行时窗口标题中的“无响应”

WIN7 计划任务 指定的开机时运行程序(例如uTorrent等),无交互式窗口?

如何在脚本中获取进程ID

如何将 Node.js 作为后台进程运行并且永不死亡?

将 Pyqt GUI 主应用程序作为单独的非阻塞进程运行