<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Invalid-password</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Invalid-password"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Invalid-password/"/>
	<updated>2026-11-04T16:27:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21166</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21166"/>
		<updated>2012-01-09T06:48:42Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Implementations  ===&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Get VLC installation path  ===&lt;br /&gt;
&lt;br /&gt;
Normally, the library libvlc.dll is in &amp;quot;C:\Program files\Videolan\VLC\&amp;quot;. This function read registry to get the correct VLC installation path, stored in key HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Load libvlc library into memory ===&lt;br /&gt;
&lt;br /&gt;
Next, load library libvlc.dll into memory&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Get address of libvlc functions ===&lt;br /&gt;
&lt;br /&gt;
This will get address of libvlc functions. Only neccessary functions loaded for this sample code, please refer to libvlc document if you need more functions&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr := GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result := 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result := -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result := failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Create form  ===&lt;br /&gt;
&lt;br /&gt;
Load library on form create. If you use a incompartible libvlc version (older or newer than this demo), some functions may not be correct (obsolete or agruments changed). In this case, program will display a list of functions failed to load, and you must rewrite these function prototype according to your libvlc version. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Close form ===&lt;br /&gt;
&lt;br /&gt;
Remember to unload libvlc library when exit&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Play a media&amp;lt;br&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Play a media (file or MURL) when user clicks on button &amp;quot;Play&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance := libvlc_new(0, nil);&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia := libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia := libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer := libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Stop a media ===&lt;br /&gt;
&lt;br /&gt;
And stop playing when user clicks on button &amp;quot;Stop&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer := nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]] [[Category:Delphi]]&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21165</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21165"/>
		<updated>2012-01-09T06:47:10Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Implementations  ===&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Get VLC installation path  ===&lt;br /&gt;
&lt;br /&gt;
Normally, the library libvlc.dll is in &amp;quot;C:\Program files\Videolan\VLC\&amp;quot;. This function read registry to get the correct VLC installation path, stored in key HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Load libvlc library into memory ===&lt;br /&gt;
&lt;br /&gt;
Next, load library libvlc.dll into memory&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Get address of libvlc functions ===&lt;br /&gt;
&lt;br /&gt;
This will get address of libvlc functions. Only neccessary functions loaded for this sample code, please refer to libvlc document if you need more functions&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr := GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result := 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result := -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result := failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Create form  ===&lt;br /&gt;
&lt;br /&gt;
Load library on form create. If you use a incompartible libvlc version (older or newer than this demo), some functions may not be correct (obsolete or agruments changed). In this case, program will display a list of functions failed to load, and you can correct these according to your libvlc version. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Close form ===&lt;br /&gt;
&lt;br /&gt;
Remember to unload libvlc library when exit&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Play a media&amp;lt;br&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Play a media (file or MURL) when user clicks on button &amp;quot;Play&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance := libvlc_new(0, nil);&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia := libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia := libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer := libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Stop a media ===&lt;br /&gt;
&lt;br /&gt;
And stop playing when user clicks on button &amp;quot;Stop&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer := nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]] [[Category:Delphi]]&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21164</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21164"/>
		<updated>2012-01-09T06:43:51Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Implementations  ===&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Get VLC installation path  ===&lt;br /&gt;
&lt;br /&gt;
Normally, the library libvlc.dll is in &amp;quot;C:\Program files\Videolan\VLC\&amp;quot;. This function read registry to get the correct VLC installation path, stored in key HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Load libvlc library into memory ===&lt;br /&gt;
&lt;br /&gt;
Next, load library libvlc.dll into memory&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result := LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Get address of libvlc functions ===&lt;br /&gt;
&lt;br /&gt;
This will get address of libvlc functions. Only neccessary functions loaded for this sample code, please refer to libvlc document if you need more functions&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr := GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result := 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result := -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result := failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Create form ===&lt;br /&gt;
&lt;br /&gt;
Load library on form create. If you use a incompartible libvlc version (older or newer than this demo), some functions may not be correct (obsolete or agruments changed). In this case, program will display a list of functions failed to load, and you can correct these according to your libvlc version.&lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib := LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL := TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load : &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Coding]] [[Category:Delphi]]&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21163</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21163"/>
		<updated>2012-01-09T06:36:54Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: /* Full source code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Implementations  ===&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Get VLC installation path  ===&lt;br /&gt;
&lt;br /&gt;
Normally, the library libvlc.dll is in &amp;quot;C:\Program files\Videolan\VLC\&amp;quot;. This function read registry to get the correct VLC installation path, stored in key HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC. &lt;br /&gt;
&amp;lt;pre&amp;gt;// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Category:Coding]] [[Category:Delphi]]&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21160</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21160"/>
		<updated>2012-01-09T06:21:53Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr&amp;amp;nbsp;:= GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result&amp;amp;nbsp;:= 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result&amp;amp;nbsp;:= -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result&amp;amp;nbsp;:= failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance&amp;amp;nbsp;:= libvlc_new(0, nil);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia&amp;amp;nbsp;:= libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia&amp;amp;nbsp;:= libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Category:Libvlc]][[Category:Coding]][[Category:Delphi]]&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21159</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21159"/>
		<updated>2012-01-09T06:17:55Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11).&lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr&amp;amp;nbsp;:= GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result&amp;amp;nbsp;:= 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result&amp;amp;nbsp;:= -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result&amp;amp;nbsp;:= failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance&amp;amp;nbsp;:= libvlc_new(0, nil);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia&amp;amp;nbsp;:= libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia&amp;amp;nbsp;:= libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21157</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21157"/>
		<updated>2012-01-09T06:17:19Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: moved User talk:Invalid-password to Using libvlc with Delphi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using libvlc with Delphi ==&lt;br /&gt;
&lt;br /&gt;
This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11). &lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr&amp;amp;nbsp;:= GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result&amp;amp;nbsp;:= 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result&amp;amp;nbsp;:= -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result&amp;amp;nbsp;:= failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance&amp;amp;nbsp;:= libvlc_new(0, nil);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia&amp;amp;nbsp;:= libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia&amp;amp;nbsp;:= libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21156</id>
		<title>Using libvlc with Delphi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Using_libvlc_with_Delphi&amp;diff=21156"/>
		<updated>2012-01-09T06:15:30Z</updated>

		<summary type="html">&lt;p&gt;Invalid-password: Using libvlc with Delphi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using libvlc with Delphi ==&lt;br /&gt;
&lt;br /&gt;
This is a sample code to play media files using libvlc with Delphi (test with Delphi XE2 VCL form, VLC 1.1.11). &lt;br /&gt;
&lt;br /&gt;
== Form design  ==&lt;br /&gt;
&lt;br /&gt;
Use a simple form with 3 control&amp;amp;nbsp;:&amp;amp;nbsp;Panel1 (TPanel) to display video,&amp;amp;nbsp;btnPlay (TButton) to play media, and&amp;amp;nbsp;btnStop (TButton) to stop playing &lt;br /&gt;
&lt;br /&gt;
== Full source code  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;unit Unit1;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,&lt;br /&gt;
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TForm1 = class(TForm)&lt;br /&gt;
    btnPlay: TButton;&lt;br /&gt;
    btnStop: TButton;&lt;br /&gt;
    Panel1: TPanel;&lt;br /&gt;
    procedure btnPlayClick(Sender: TObject);&lt;br /&gt;
    procedure btnStopClick(Sender: TObject);&lt;br /&gt;
    procedure FormCreate(Sender: TObject);&lt;br /&gt;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  plibvlc_instance_t        = type Pointer;&lt;br /&gt;
  plibvlc_media_player_t    = type Pointer;&lt;br /&gt;
  plibvlc_media_t           = type Pointer;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Form1: TForm1;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{$R *.dfm}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  libvlc_media_new_path             &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: Plibvlc_instance_t; path&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_new_location         &amp;amp;nbsp;: function(p_instance&amp;amp;nbsp;: plibvlc_instance_t; psz_mrl&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_media_t; cdecl;&lt;br /&gt;
  libvlc_media_player_new_from_media&amp;amp;nbsp;: function(p_media&amp;amp;nbsp;: Plibvlc_media_t)&amp;amp;nbsp;: Plibvlc_media_player_t; cdecl;&lt;br /&gt;
  libvlc_media_player_set_hwnd      &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t; drawable&amp;amp;nbsp;: Pointer); cdecl;&lt;br /&gt;
  libvlc_media_player_play          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_stop          &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_release       &amp;amp;nbsp;: procedure(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t); cdecl;&lt;br /&gt;
  libvlc_media_player_is_playing    &amp;amp;nbsp;: function(p_media_player&amp;amp;nbsp;: Plibvlc_media_player_t)&amp;amp;nbsp;: Integer; cdecl;&lt;br /&gt;
  libvlc_media_release              &amp;amp;nbsp;: procedure(p_media&amp;amp;nbsp;: Plibvlc_media_t); cdecl;&lt;br /&gt;
  libvlc_new                        &amp;amp;nbsp;: function(argc&amp;amp;nbsp;: Integer; argv&amp;amp;nbsp;: PAnsiChar)&amp;amp;nbsp;: Plibvlc_instance_t; cdecl;&lt;br /&gt;
  libvlc_release                    &amp;amp;nbsp;: procedure(p_instance&amp;amp;nbsp;: Plibvlc_instance_t); cdecl;&lt;br /&gt;
&lt;br /&gt;
  vlcLib: integer;&lt;br /&gt;
  vlcInstance: plibvlc_instance_t;&lt;br /&gt;
  vlcMedia: plibvlc_media_t;&lt;br /&gt;
  vlcMediaPlayer: plibvlc_media_player_t;&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Read registry to get VLC installation path&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetVLCLibPath: String;&lt;br /&gt;
var&lt;br /&gt;
  Handle: HKEY;&lt;br /&gt;
  RegType: Integer;&lt;br /&gt;
  DataSize: Cardinal;&lt;br /&gt;
  Key: PWideChar;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= &#039;&#039;;&lt;br /&gt;
  Key&amp;amp;nbsp;:= &#039;Software\VideoLAN\VLC&#039;;&lt;br /&gt;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then&lt;br /&gt;
  begin&lt;br /&gt;
    if RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then&lt;br /&gt;
    begin&lt;br /&gt;
      SetLength(Result, DataSize);&lt;br /&gt;
      RegQueryValueEx(Handle, &#039;InstallDir&#039;, nil, @RegType, PByte(@Result[1]), @DataSize);&lt;br /&gt;
      Result[DataSize]&amp;amp;nbsp;:= &#039;\&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    else Showmessage(&#039;Error on reading registry&#039;);&lt;br /&gt;
    RegCloseKey(Handle);&lt;br /&gt;
    Result&amp;amp;nbsp;:= String(PChar(Result));&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Load libvlc library into memory&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCLibrary(APath: string): integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlccore.dll&#039;));&lt;br /&gt;
  Result&amp;amp;nbsp;:= LoadLibrary(PWideChar(APath + &#039;\libvlc.dll&#039;));&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function GetAProcAddress(handle: integer; var addr: Pointer; procName: string; failedList: TStringList): integer;&lt;br /&gt;
begin&lt;br /&gt;
  addr&amp;amp;nbsp;:= GetProcAddress(handle, PWideChar(procName));&lt;br /&gt;
  if Assigned(addr) then Result&amp;amp;nbsp;:= 0&lt;br /&gt;
  else begin&lt;br /&gt;
    if Assigned(failedList) then failedList.Add(procName);&lt;br /&gt;
    Result&amp;amp;nbsp;:= -1;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
// Get address of libvlc functions&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
function LoadVLCFunctions(vlcHandle: integer; failedList: TStringList): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_new, &#039;libvlc_new&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_location, &#039;libvlc_media_new_location&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_new_from_media, &#039;libvlc_media_player_new_from_media&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_release, &#039;libvlc_media_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_set_hwnd, &#039;libvlc_media_player_set_hwnd&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_play, &#039;libvlc_media_player_play&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_stop, &#039;libvlc_media_player_stop&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_release, &#039;libvlc_media_player_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_release, &#039;libvlc_release&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_player_is_playing, &#039;libvlc_media_player_is_playing&#039;, failedList);&lt;br /&gt;
  GetAProcAddress(vlcHandle, @libvlc_media_new_path, &#039;libvlc_media_new_path&#039;, failedList);&lt;br /&gt;
  // if all functions loaded, result is an empty list, otherwise result is a list of functions failed&lt;br /&gt;
  Result&amp;amp;nbsp;:= failedList.Count = 0;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnPlayClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  // create new vlc instance&lt;br /&gt;
  vlcInstance&amp;amp;nbsp;:= libvlc_new(0, nil);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media from file&lt;br /&gt;
  vlcMedia&amp;amp;nbsp;:= libvlc_media_new_path(vlcInstance, &#039;e:\udp\239.10.10.9.ts&#039;);&lt;br /&gt;
&lt;br /&gt;
  // if you want to play from network, use libvlc_media_new_location instead&lt;br /&gt;
  // vlcMedia&amp;amp;nbsp;:= libvlc_media_new_location(vlcInstance, &#039;udp://@225.2.1.27:5127&#039;);&lt;br /&gt;
&lt;br /&gt;
  // create new vlc media player&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= libvlc_media_player_new_from_media(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // now no need the vlc media, free it&lt;br /&gt;
  libvlc_media_release(vlcMedia);&lt;br /&gt;
&lt;br /&gt;
  // play video in a TPanel, if not call this routine, vlc media will open a new window&lt;br /&gt;
  libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));&lt;br /&gt;
&lt;br /&gt;
  // play media&lt;br /&gt;
  libvlc_media_player_play(vlcMediaPlayer);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.btnStopClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  if not Assigned(vlcMediaPlayer) then begin&lt;br /&gt;
    Showmessage(&#039;Not playing&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // stop vlc media player&lt;br /&gt;
  libvlc_media_player_stop(vlcMediaPlayer);&lt;br /&gt;
  // and wait until it completely stops&lt;br /&gt;
  while libvlc_media_player_is_playing(vlcMediaPlayer) = 1 do begin&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  end;&lt;br /&gt;
  // release vlc media player&lt;br /&gt;
  libvlc_media_player_release(vlcMediaPlayer);&lt;br /&gt;
  vlcMediaPlayer&amp;amp;nbsp;:= nil;&lt;br /&gt;
&lt;br /&gt;
  // release vlc instance&lt;br /&gt;
  libvlc_release(vlcInstance);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
  // unload vlc library&lt;br /&gt;
  FreeLibrary(vlclib);&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var sL: TStringList;&lt;br /&gt;
begin&lt;br /&gt;
  // load vlc library&lt;br /&gt;
  vlclib&amp;amp;nbsp;:= LoadVLCLibrary(GetVLCLibPath());&lt;br /&gt;
  if vlclib = 0 then begin&lt;br /&gt;
    Showmessage(&#039;Load vlc library failed&#039;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // sL will contains list of functions fail to load&lt;br /&gt;
  sL&amp;amp;nbsp;:= TStringList.Create;&lt;br /&gt;
  if not LoadVLCFunctions(vlclib, sL) then begin&lt;br /&gt;
    Showmessage(&#039;Some functions failed to load&amp;amp;nbsp;: &#039; + #13#10 + sL.Text);&lt;br /&gt;
    FreeLibrary(vlclib);&lt;br /&gt;
    sL.Free;&lt;br /&gt;
    Exit;&lt;br /&gt;
  end;&lt;br /&gt;
  sL.Free;&lt;br /&gt;
end;&lt;br /&gt;
// -----------------------------------------------------------------------------&lt;br /&gt;
end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Invalid-password</name></author>
	</entry>
</feed>