LibVLCSharp を利用した Windows Form アプリ作成の覚書

LibVLCSharp を使う際のポイントなどを自分なりにまとめてみようと思います。

LibVLCSharp は、VLC の LibVLC ライブラリをベースにした .NET 用のクロスプラットフォームのオーディオ・ビデオを扱う API です。
(libvlcsharp の Github ページにある説明文より)

基本的な情報

libvlcsharp

LibVLCSharp の Github ページ。
基本的なことはだいたいここに書かれているハズ。

ドキュメント関連

サンプルコード

各プラットフォームごとのサンプルコード。

かなりシンプルなコードなので、最初の一歩を踏み出す際の参考にはなるかもしれませんが、少しでも複雑なことをしようと考えているなら別の資料を探した方が良いかもしれないです。

libvlcsharp/src/LibVLCSharp/Shared/MediaPlayer.cs

MediaPlayer クラスのソースコード。再生・停止の実行、現在の再生位置などメディアプレイヤーとしての機能に関係するメソッドやプロパティの説明がここのコメントに書いてあります。

How Do I do X?

XX をしたい時はどうすればよいの? をまとめたページです。

LibVLC

LibVLC のドキュメント
LibVLC の Nuget

LibVLCSharp は LibVLC のラッパーなので、メソッドなどの詳細な仕様などを理解するには LibVLC のドキュメントやソースを見るのが良い場合もあるかもしれません。

始めの一歩

インストール

Nuget から以下の2つをインストールします。

  1. LibVLC をインストールする
  2. LibVLCSharp or LibVLCSharp.WinForms をインストールする

C で書かれた LibVLC を C# で扱えるようにしたラッパーが LibVLCSharp であり、LibVLCSharp で VLC の API を扱うには大本である LibVLC が必須です。

コントロール

ツールボックスに "LibVLCSharp.WinForms" という項目が追加されているので、そこから "VideoView" をフォームに追加します。

コード

参照する名前空間

LibVLCSharp.Shared;

初期化

はじめに LibVLCSharp.Shared.Core.Initialize() を呼んで初期化します。
 このメソッドを実行する時に、libvlc.dll と libvlccore.dll と plugins フォルダが必要です。plugins フォルダの中身については、何が必要最低限なのかまでは未確認。

そのプロジェクトで出力される .exe か .dll ファイルと同じフォルダに libvlc.dll と libvlccore.dll がある場合は Initialize() を引数無しで呼べば良いです。
 libvlc.dll と libvlccore.dll の場所を指定する場合はそのフォルダのパスを Initialize(path) のようにして引数で渡します。

再生位置

動画の再生位置は MediaPlayer.Time(ミリ秒、動画先頭からの経過時間)と MediaPlayer.Position(float 型で、動画先頭が 0f、動画末尾が 1f)の2種類があります。

再生中に Time に値を代入することでその位置に移動できます。
 playback が有効な状態で Position に値を代入することでその位置に移動できる、らしいです。(playback が有効な状態がどのような状態なのかがよく分かってない)

前後のフレームへの移動

MediaPlayer.NextFrame() を呼ぶと次のフレームを表示することができます。
 再生中に呼んだ場合は一時停止状態で次のフレームが表示され、一時停止中に呼んだ場合は一時停止状態を維持したまま次のフレームが表示されます。

前のフレームに戻る機能はありません。
 MediaPlayer.Fps の値を使って前のフレームに相当する時間を計算して MediaPlayer.Time に代入することでそれらしいことはできます、私が試した限りでは表示される映像が不正確な場合がありました。

ボリューム

再生停止後に再生するとデフォルト値に戻るので注意が必要です。

MediaPlayer.Volume に値を代入した後に MediaPlayer.Stop()MediaPlayer.Play() と呼ぶと MediaPlayer.Volume が 100 になりました。

ミュート

MediaPlayer.Mute に bool 値を代入することでミュートの切り替えができます。

LibVLCSharp 関連の日本語情報

Vlc.DotNet.Wpfの罠にはまった話
LibVLCSharpでVLC(RTSP)と戦った時のメモ
[Xamarin.Forms]VLCライブラリを使ってiOSでWebMを再生する方法

それぞれのライセンス

LibVLCSharp
LGPLv2.1
libVLC
LGPLv2.1
ただし、モジュールによっては GPLv2 のものもあるとのことです。

LibVLCSharp と Vlc.DotNet

VLC の API についてネットで検索すると Vlc.DotNet に関する情報が多くヒットします。
 しかし、Vlc.DotNet は LibVLCSharp とは別物なので注意。

Vlc.DotNet の Github のページを見ると、LibVLCSharp の使用が推奨されています。

As more and more effort is put into LibVLCSharp, fewer evolutions are expected to be made to this project. Bugfixes will still be fixed on the maintainer's free time, but as of 2020-05-06, support for libvlc 4 is not planned. You are encouraged to migrate and create new projects with LibVLCSharp

0 件のコメント:

コメントを投稿