开发背景

  工作中遇到媒体播放模块,就研究了下,Vlc播放器。昂,这个小玩意就诞生了

简短介绍下,不做过多赘述,相信会阅这篇文章的人,对于基础性的都掌握了 😃 若是没掌握,随你咯

开发流程

框架选型

  • 因是WPF程序,这里选用 DotNet Core3.1
  • 为什么没有选用 DotNet5 个中缘由懂的都懂哈

Nugget 包

  • 这里我们使用 Vlc 官方包
  • 首先是 Windows 平台的目标包
    VideoLAN.LibVLC.Windows
  • Vlv 的 C# 核心包
    LibVLCSharp
  • WPF 开发包
    LibVLCSharp.WPF
  • Vlc官方开源地址

开发包的用法说明都在Vlc的官方开源地址中

效果

在这里插入图片描述

VS诊断工具资源使用分析
   1.8GB的视频文件进行播放内存使用率稳定在400MB到450MB之间;
   11.0GB的视频文件进行播放内存使用率稳定在1.3GB到1.4GB之间。
   CPU资源使用率几乎可以忽略。

代码实例

播放器内核初始化

/// <summary>
/// 播放器内核初始化
/// </summary>
private void Init()
{
    Dispatcher.Invoke(() =>
    {
        Core.Initialize();
        VLCMediaPlayer.MediaPlayer = new MediaPlayer(VLCMedia);
        VLCMediaPlayer.MediaPlayer.Stop();
    });
}

导入播放列表

/// <summary>
/// 播放列表
/// </summary>
private string[] PlayList { get; set; }

/// <summary>
/// 播放序列
/// </summary>
private int PlayerIndex { get; set; } = 0;

/// <summary>
/// 导入播放列表
/// </summary>
/// <param name="list"></param>
private void ImportPlayerList(string[] filelist, string[] nameList)
{
    PlayList = filelist;
    TitleList = nameList;
    PlayerIndex = 0;
    VLCMediaPlayer.MediaPlayer.Play(new Media(_libvlc, PlayList[PlayerIndex], FromType.FromPath));
    LabelTitle.Content = string.Format("{0} - VLCMediaPlayer", TitleList[PlayerIndex]);
    VLCMediaPlayer.MediaPlayer.EndReached += MediaPlayer_EndReached;
}

是否循环播放

/// <summary>
/// 播放列表
/// </summary>
private string[] PlayList { get; set; }

/// <summary>
/// 播放序列
/// </summary>
private int PlayerIndex { get; set; } = 0;

/// <summary>
/// 是否循环播放
/// </summary>
private bool IsLoop { get; set; } = false;

/// <summary>
/// 是否循环播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MediaPlayer_EndReached(object sender, EventArgs e)
{
    Dispatcher.BeginInvoke(new Action(() =>
    {
        // 单文件定义是否循环播放
        if (PlayList.Length is 1 && IsLoop is true)
        {
            PlayerIndex = ++PlayerIndex % PlayList.Length;
            VLCMediaPlayer.MediaPlayer.Play(new Media(_libvlc, PlayList[PlayerIndex], FromType.FromPath));
            LabelTitle.Content = string.Format("{0} - VLCMediaPlayer", TitleList[PlayerIndex]);
            return;
        }

        #region 多文件播放模式

        if (IsLoop)
        {
            PlayerIndex = ++PlayerIndex % PlayList.Length;
            VLCMediaPlayer.MediaPlayer.Play(new Media(_libvlc, PlayList[PlayerIndex], FromType.FromPath));
            LabelTitle.Content = string.Format("{0} - VLCMediaPlayer", TitleList[PlayerIndex]);
            return;
        }
        PlayerIndex++;
        if (PlayerIndex < PlayList.Length)
        {
            VLCMediaPlayer.MediaPlayer.Play(new Media(_libvlc, PlayList[PlayerIndex], FromType.FromPath));
            LabelTitle.Content = string.Format("{0} - VLCMediaPlayer", TitleList[PlayerIndex]);
        }

        #endregion
    }));
}

快捷键

  • 方向键 ⬆ 加声音
  • 方向键 ⬇ 减声音
  • 方向键 ➡ 快进
  • 方向键 ⬅ 快退
  • 全屏 鼠标右键双击焦点锁定 按 Enter 键
  • 退出全屏 鼠标右键双击焦点锁定 按 Enter 键焦点锁定 按 Esc 键

发布包下载地址

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐