LibVLCSharp:播放器关闭时如何停止应用程序

LibVLCSharp: how to stop the application when player closes

我正在尝试使用 LibVLCSharp 编写一个简单的播放器应用程序,我想知道如何在播放器关闭时停止该应用程序。目前,即使我添加了 SetExitHandler 回调,它也只是冻结并且不会停止应用程序。

using System;
using System.Threading;
using LibVLCSharp.Shared;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Core.Initialize();

            using var libVlc = new LibVLC();
            using var mediaPlayer = new MediaPlayer(libVlc);
            libVlc.SetExitHandler(() =>
            {
                Environment.Exit(1);
            });

            var media = new Media(libVlc, "v4l2:///dev/video0", FromType.FromLocation);
            media.AddOption(":v4l2-standard=ALL :live-caching=300");

            mediaPlayer.Play(media);
            Thread.Sleep(TimeSpan.FromSeconds(10));
        }
    }
}

关闭后登录 window:

[00007fa164004790] gl gl: Initialized libplacebo v2.72.0 (API v72)
[00007fa17400a7c0] main decoder error: buffer deadlock prevented
[00007fa1600429a0] xcb_window window error: X server failure

来自 LibVLCSharp GitHub Page 的以下代码示例展示了如何在控制台应用程序中播放视频。

Core.Initialize();

using var libvlc = new LibVLC(enableDebugLogs: true);
using var media = new Media(libvlc, new Uri(@"C:\tmp\big_buck_bunny.mp4"));
using var mediaplayer = new MediaPlayer(media);

mediaplayer.Play();

Console.ReadKey();

请注意使用 Console.ReadKey() 等待用户在关闭应用程序并随后关闭播放器之前按下某个键。

要在视频结束时自动退出应用程序,您可以使用 MediaPlayer.EndReached 事件,如下所示:

Core.Initialize();

using var libvlc = new LibVLC(enableDebugLogs: true);
using var media = new Media(libvlc, new Uri(@"C:\tmp\big_buck_bunny.mp4"));
using var mediaplayer = new MediaPlayer(media);
mediaplayer.EndReached += (s, e) => Environment.Exit(0);

mediaplayer.Play();

Console.ReadKey();