jul*_*enj 11 python video multiple-monitors fullscreen libvlc
我正在尝试为小型影院制作一个简单的视频播放脚本,以自动播放视频和控制投影仪,声音和照明系统.我有两个视频输出,一个到投影室的监视器,另一个直接到投影仪.我希望在监视器上放置控件和小(~1/4屏幕)预览时,将全屏视频(并且仅视频)播放到投影仪.这将允许放映员观看正在输出的视频并从展位中的监视器控制回放,而所有观众都看到的是视频输出.
我目前正在使用Python来控制VLC播放器(使用libvlc Python绑定)来播放视频.我的一切工作正常,除了我无法弄清楚如何在投影机输出上全屏播放的视频预览(直接复制)到我的GUI中.
我尝试过使用克隆过滤器,但我无法让克隆窗口自动显示全屏,也不能在我的GUI中显示.克隆过滤器似乎是合乎逻辑的选择,但在指定目标屏幕,全屏等时似乎非常不灵活.我必须能够在投影仪显示器上全屏打开视频窗口.职业化是关键,如果放映员不得不拖动一个窗口并在电影开始时双击它,那将会很糟糕.
目前使用:
我想继续使用Python,因为我已经拥有控制投影仪,声音处理器,照明和窗帘编写和测试的代码.我之所以选择VLC是因为它在视频播放方面确实看起来很防弹,但我还没有继续使用它.由于过去的经验,我还为我的GUI选择了wxWidgets,但我也没有坚持.
这描述了直接解决方案,并不集中于任何替代方案或应用程序的整体设计。
由于您的应用程序和 VLC 媒体播放器是独立的进程,因此您将无法直接获得您想要的内容,因为这两个应用程序之间没有“共享内存”。从 VLC“复制”解码帧的最佳方式是发送 RAW Video .mts 流(ts 通常用于此类用例)并将例如发送到 udp://localhost:1234。
在您的应用程序中,您需要能够接收 ts 流,对其进行“解码”并显示在感兴趣的位置。
首先,如果您能够使用手动控制的 2 个 vlc 播放器来完成此操作,我会尝试一下。当您实现第一个 VLC 流传输到 udp 并同时在主显示器上输出,并且另一个 VLC 播放器接收并播放 udp 流时,您可以继续:
找到一个可以直接在 wxpython 应用程序中使用的播放器库,并检查它是否也可以接收 udp 流,例如
https://wxpython.org/Phoenix/docs/html/wx.media.MediaCtrl.html
例如,这个播放器库需要 gstreamer 作为基础。
因此,应用程序中的主显示和图片可能会有几秒钟的延迟。为了解决这个延迟问题,我目前知道的最好方法是使用 WebRTC,但这比上面的设置复杂得多。
https://www.sipwise.org/news/technical/tv-over-webrt/
当然,如果您对 WebRTC 甚至 UDP 进行一些“编码”,您将需要使用一些硬件编码器,例如 Nvidia NVENC,以便能够保证所需的资源始终存在。