Как управлять libvlc dotnet из другого окна в C# WPF
Пожалуйста, кто-нибудь может помочь? Я уже несколько дней чешу голову!
Я пытаюсь создать приложение, которое будет воспроизводить видео на втором экране, но с элементами управления Play/Pause/Stop и индикатором прогресса на основном мониторе.
Я использую библиотеку LibVLC с оболочкой vlc. dotnet.
Пожалуйста, извините за любой небрежный и скопированный/вставленный код, но в данный момент я все еще нахожусь на стадии "давайте попробуем".
Вот что у меня есть для кода за вторым окном экрана (в значительной степени поднятого непосредственно из примера кода vlc. dotnet):
public void Select(String ytURL, String ytControl) { if (ytURL == "") { ytURL = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov"; } if (ytControl == "Play") { ytPlayVideo(ytURL); } else if (ytControl == "Stop") { // ??? } else if (ytControl == "Pause") { // ??? } } private void ytPlayVideo(String playURL) { if (IntPtr.Size == 4) { // Use 32 bits library this.MyControl.MediaPlayer.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(Environment.CurrentDirectory, "libvlc-x86")); } else { // Use 64 bits library this.MyControl.MediaPlayer.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(Environment.CurrentDirectory, "libvlc-x64")); } var options = new string[] { // VLC options can be given here. Please refer to the VLC command line documentation. "--fullscreen" }; this.MyControl.MediaPlayer.VlcMediaplayerOptions = options; // Load libvlc libraries and initializes stuff. It is important that the options (if you want to pass any) and lib directory are given before calling this method. this.MyControl.MediaPlayer.EndInit(); this.MyControl.MediaPlayer.Play(playURL); }
А вот кодовый клип, который вызывает видеоокно из окна управления:
YTPlayer YTwin = new YTPlayer(); int s2 = Screen.AllScreens.Count(); if (s2 > 1) { Screen s1 = Screen.AllScreens[1]; System.Drawing.Rectangle r1 = s1.WorkingArea; YTwin.WindowState = System.Windows.WindowState.Normal; YTwin.WindowStartupLocation = WindowStartupLocation.Manual; YTwin.Top = r1.Top; YTwin.Left = r1.Left; YTwin.Show(); } YTwin.Select("", "Play");
Пока все хорошо. Это отлично воспроизводит видео, и я даже могу передавать ему различные видеосвязи, когда создается новое окно, но я ни за что на свете не могу понять, как передавать команды элементу управления VLC WPF на втором экране, когда он уже работает для паузы, остановки и т. д., или передавать данные обратно из видеоокна в окно контроллера для индикатора выполнения.
Это должно быть сделано с двумя отдельными окнами, так как вторичный экран должен быть максимизирован, в то время как поверхность управления на первичном должна быть увеличена.
Что я уже пробовал:
Я проверил довольно много тем здесь и на других форумах о том, как обращаться к элементам управления WPF в одном окне из другого и как передавать переменные между классами.
Например, создание пользовательского события и его отображение при создании экземпляра:
YTPlayer YTwin = new YTPlayer(); YTwin.RaiseCustomEvent += new EventHandler<CustomEventArgs>(YTwin_RaiseCustomEvent);
с:
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
Проблема в том, что все, что я пытаюсь сделать, выдает ошибку с vlc.dotnet "Select" и говорит, что он не существует.
Мне нужно иметь возможность позвонить в YTPlayer.Select () from YTControl window while ytplayer window is open and running, without instantiating a new instance of YTPlayer.
Есть идеи?