プロジェクトの作成
mkdir プロジェクト名
cd プロジェクト名
dotnet new winfomrs -f net6.0
dotnet add package Vlc.DotNet.Forms --version 3.1.0
dotnet add package VideoLAN.LibVLC.Windows --version 3.0.18
サンプルソース
using System.Reflection;
using Vlc.DotNet.Forms;
namespace VlcCample;
public partial class Form1 : Form
{
VlcControl _vlc = new()
{
Dock = DockStyle.Fill,
AllowDrop = true,
};
FlowLayoutPanel _bottomPanel = new()
{
Dock = DockStyle.Bottom,
};
Button _pasueButton = new()
{
AutoSize = true,
Text = "一時停止",
Enabled = false,
};
Button _playButton = new()
{
AutoSize = true,
Text = "停止",
Enabled = false,
};
public Form1()
{
InitializeComponent();
//var dirName = @"C:\Users\karet\scoop\apps\vlc\current";
var dirName = @"F:\csharp\VlcCample\bin\Debug\net6.0-windows\libvlc\win-x64";
var libDir = new DirectoryInfo(dirName);
_vlc.BeginInit();
_vlc.VlcLibDirectory = libDir;
_vlc.EndInit();
_bottomPanel.Controls.AddRange(new Control[]{_playButton, _pasueButton,});
Controls.AddRange(new Control[]{_vlc, _bottomPanel});
string? path = null;
_vlc.DragEnter += (o, e) => {e.Effect = DragDropEffects.Copy; };
_vlc.DragDrop += (o, e) =>
{
if (null == e.Data) return;
var obj = e.Data.GetData(DataFormats.FileDrop, false);
if (null == obj) return;
path = ((string[])obj)[0];
if (!File.Exists(path)) return;
_pasueButton.Enabled = true;
_playButton.Enabled = true;
_vlc.Play(new FileInfo(path));
};
_pasueButton.Click += (o, e) =>
{
if (_vlc.IsPlaying)
{
_vlc.Pause();
_pasueButton.Text = "再開";
}
else
{
_vlc.Play();
_pasueButton.Text = "一時停止";
}
};
_playButton.Click += (o, e) =>
{
if (_vlc.IsPlaying)
{
_vlc.Stop();
_playButton.Text = "再生";
}
else
{
_vlc.Play();
_playButton.Text = "停止";
}
};
}
}
説明
はじめscoopでインストールしたvlcのディレクトリを指定したところ動作することが確認出来ました。
その後、libvlcはVideoLAN.LibVLC.Windowsパッケージを追加するとbinフォルダ下に作成されることが確認できました。
実行環境によってwin-x64とwin-x86のいずれかを使うことになりますので、環境に合わせてパスを生成してあげるとよさそうです。
参考にしたサイトではAssembly.GetEntryAssembly()からディレクトリを取得し、IntPtrのサイズが4の場合「win-x86」環境、それ以外は「win-x64」と判定してました。
Vlc.DotNet/src/Samples at develop · ZeBobo5/Vlc.DotNet
.NET control that hosts the audio/video capabilities of the VLC libraries - ZeBobo5/Vlc.DotNet
実行
とりあえず「再生」「一時停止」ボタンは用意してみましたが、文字の表示が矛盾することがあります。
コメント