C#使用VLC插件开发播放器小结

最开始使用WMP(window media player)开发的播放器,可以正常播放暂停!

但是有局限性:

1.视频暂停后,快速定位,画面没有跟新,还停留在暂停的位置

这里我想既然你不主动切换,我把这一帧画面取处理,贴上去,点播放就隐藏,我用FFmpeg命令取帧画面的后,发现很慢,并且随定位的位置增大而越来越慢。遂放弃!

2.没有上一帧和下一帧的功能接口,不满足我的开发要求

采用VLC播放器完美的解决我的问题:

1.设置播放器的position属性后,画面能跟着切换

2.提供了下一帧的接口

这里提示下:vlc提供的视频时长单位时毫秒级别的

 

VLC简单播放器的开发流程:

第一步:安装VLC.net插件

C#使用VLC插件开发播放器小结

搜索VlC,安装VLC.DotNet.Forms,会安装关联的其他包

C#使用VLC插件开发播放器小结

 

第二步:添加VLC到工具箱:

C#使用VLC插件开发播放器小结

点击浏览将Vlc.DotNet.Forms.dll添加进来。这样工具箱就会有VLC插件了

 

C#使用VLC插件开发播放器小结

 

第三步:添加VLC播放器,添加DLL依赖

在设计器界面添加VLC播放器,添加事件VlcLibDirectoryNeeded

这里标红的位置是设置VLC依赖文件的位置IntPtr.Size == 4 表示当前程序是32位 x86的

C#使用VLC插件开发播放器小结

 

        private void vlcControl1_VlcLibDirectoryNeeded(object sender, Vlc.DotNet.Forms.VlcLibDirectoryNeededEventArgs e)
        {
            var currentAssembly = Assembly.GetEntryAssembly();
            var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;

            if (currentDirectory == null)
                return;
            if (IntPtr.Size == 4)
                e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@"..\"));
            else
                e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@".\libvlc\"));

            if (!e.VlcLibDirectory.Exists)
            {
                var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
                folderBrowserDialog.Description = "Select Vlc libraries folder.";
                folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
                folderBrowserDialog.ShowNewFolderButton = true;
                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    e.VlcLibDirectory = new DirectoryInfo(folderBrowserDialog.SelectedPath);
                }
            }
        }

 

第四步:根据需要添加事件,播放暂停视频

 vlcControl1.SetMedia(new System.IO.FileInfo(file));

vlcControl1.Play();

vlcControl1.Pause();

 

 

问题:这里我需要实时的获取当前视频播放的进度,但是VLC的Position传递出来的结果并不是实时的。会间隔一段时间,所以实时刷新播放进度的有点卡顿,希望有大佬可以解决!