问题 VLC远程控制VLC


我正试图从C#控制VLC媒体播放器。我尝试使用.Net的FindWindow()命令在窗口上获取句柄,但是当我发现每次播放文件时窗口的名称都会改变。我遇到的最大问题是将wm_commands发送到vlc ..这种方法适用于Winamp和Windows Media Player但是使用VLC似乎无法正常工作。

我读到VLC可以通过浏览器进行控制,但我不打算...我已经在其设置中看到它有一些可以调用的热键..但是它们可以被更改,如果我从中调用它们我的代码以某种方式...并且用户更改它们... bummer ...

我有点卡住......任何帮助都会很棒...... 索林


1300
2018-04-24 13:22


起源

你的目标是什么?驱动VLC?集成到应用程序中? - Sam Saffron
你好,我想控制VLC ..就像在我的应用程序中按下一个停止按钮,VLC播放器停止。 VLC没有集成在我的应用程序中。我的应用程序将像一个遥控器... libvlc一个libvlc-sharp看起来像一个解决方案..我必须深入了解.. - Sorin Antohi
你好sambo,想法是控制(驱动)VLC,而不是将其集成到另一个应用程序中。 VLC应该在Windows中正常运行并从C#应用程序接收WM命令。 - Sorin Antohi


答案:


我有一些能够的代码 使用套接字控制它 在...上 RC接口。这在一定程度上有效,但有很多怪癖。在调用播放后的几秒钟内,进入全屏似乎什么都不做。总的来说它有点工作。

其他选择是:

编写一个DirectDraw过滤器(非常难),但一旦完成,可以使用VLC代替FFMPEG或与FFMPEG一起使用。驱动媒体播放器的现有代码可以使用vlc。

写一个interop包装器 libvlc最近,VLC团队分道扬.. libvlccore 从 libvlc 所以尽我所知 互操作 已过期。编写包装器后,可以在Windows应用程序中嵌入vlc。 (如果需要支持x64,则需要在x64下编译这些库。

查看VLC代码,找出是否有办法发送这些Windows消息。

编辑  出现了 本周出来了。


9
2018-04-24 13:33



这种技术要求用户使用一些标志启动VLC(如果我错了,通过命令行纠正我)。如果我的用户从Windows启动了VLC,我也面临这个问题。我不能要求我的用户进入RC模式。 VLC不提供任何其他方式来控制自己吗?像Windows媒体播放器或iTunes中的COM接口? - MaX
MaX我认为有一个libvlc但是它没有管理 - Sam Saffron


正如Eoin所说, libvlc 可用于与VLC交互。作为C#用户,您可能想要尝试由.NET提供的.NET绑定 libvlc-sharp 项目。

编辑: 似乎这个项目多年来一直没有维护。无论如何,我会留下链接,以防你想看看它,也许可以使用它的一些来源。


3
2018-04-24 13:31



这个图书馆3天前已经过时了 - Sam Saffron
更像是3年;-)但无论如何,发布更新警告。 - Tormod Fjeldskår
不,我认为Sam意味着由于团队将代码库拆分为单独的库,现有的interop包装器不再起作用。您需要一个新的libvlc库中的函数包装器。 - Anonymous Type
此外,它似乎没有通过API处理视频(不确定这是否是一个要求)。从read-me:“目前只有api的音频部分已经完成。”作为附注,您可能想看看这篇文章: stackoverflow.com/questions/584147/... - Aaron Newton


你看过了吗? libvlc

您可以将其包装在库中并通过它与VLC进行交互。


2
2018-04-24 13:29





如何在C ++中使用libvlc http://unick-soft.ru/art/files/libvlcProject.zip 我认为,在C#中使用libvlc非常相似。


1
2017-11-10 22:46





还有 RC 接口,甚至是一个telnet: http://wiki.videolan.org/Console

但是,如果可能的话,我更喜欢libvlc。


0
2018-04-24 13:33





如果您要执行的操作是控制以前运行的可执行文件,请查看 处理 通过所有的类来枚举 目前的进程 或者做 名称。检查可执行文件是否匹配 vlc.exe。然后,您可以获取主窗口的句柄,并在执行其他可执行文件时执行一些P / Invoke来发送消息。这显然充满了潜在的问题,例如键盘切割是否有变化。


0
2018-04-24 13:37



这是一种非常冒险的方法,因为您无法准确跟踪播放状态。 - Sam Saffron
我同意。我只是给出了如何找到窗口/过程的选项。 - Erich Mirabal
另外,请参阅我的代码,它显示了如何查找vlc子进程。它比通过名称搜索有点棘手 - Sam Saffron