libVLC 4 FB
Projektzusammenfassung | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Schon öfter wurde im Forum die Frage gestellt: "Wie kann ich mit freeBasic eine Mediendatei abspielen?"
Hier ist nun eine (weitere) mögliche Antwort, zunächst als Beta - Version: libVLC, die eierlegende Wollmilchsau unter den Open Source Mediaplayern, zur Nutzung mit FB. Ich habe versucht, das ganze als "rundum - sorglos - Paket" zu gestalten: Installieren -> aufrufen -> läuft. In dem Installationspaket sind alle benötigten Dateien enthalten. Keine zusätzlichen Downloads von anderen Webseiten, keine Installation von irgendeinem anderen Programm als Voraussetzung, keine Versionskonflikte. Ob das gelungen ist, wird sich zeigen.
Die freeBasic - Installation enthält bereits eine Sammlung von VLC - Headerdateien, deren Portierung allerdings -so mein Eindruck- nicht beendet wurde. Mit diesen Dateien als Grundlage habe ich die Portierung fortgeführt und auf den Stand von libVLC - Version 2.1.5 gebracht. Da ich das komplett von Hand gemacht habe, hat sich mit Sicherheit der eine oder andere Fehler eingeschlichen (darum erst mal Beta). Ich bitte daher um entsprechende Hinweise an den zugehörigen Forum - Thread.
Ein installierter VLC - Player auf dem Zielsystem ist nicht notwendig, stört aber auch nicht.
Nutzung der Headerbibliothek
Zunächst ein Hinweis: Wer die libVLC - API benutzen möchte, sollte sich einigermaßen mit Pointern auskennen, da die Kommunikation mit den API - Funktionen in beide Richtungen fast ausschließlich über Pointer erfolgt.
Installation:
1) http://users.freebasic-portal.de/grindstone/libVLC4FB/VLC4FB.zip herunterladen.
2) Zip - Archiv entpacken
3) <FB-Installationspfad>\inc\vlc umbenennen, beispielsweise in vlc_alt
4) Ordner vlc aus dem Archiv nach <FB-Installationspfad>\inc\ kopieren
fertig.
Inhalt:
Im Verzeichnis vlc befinden sich die übersetzten Headerbibliotheken (.bi), deren Originale (.h) sowie noch einige weitere Dateien:
- description.txt enthält eine Liste aller implementierten libVLC - API - Funktionen mit einer kurzen (englischen) Beschreibung.
- libvlc.dll.a ist die statische Bibliothek, die in das FB - Programm eingebunden wird.
- libvlc.lib ist die Original - Bibliothek.
- LICENSE.txt enthält den Text der LGPL - Lizenz, unter der VLC und auch dieses Projekt stehen.
- THANKS.txt enthält u. a. eine Auflistung der Lizenzen, unter denen die einzelnen Plugins stehen.
Im Unterverzeichnis examples befindet sich neben der englischen Version des weiter unten aufgelisteten Beispielprogramms die Datei libvlccore.dll
Das Unterverzeichnis plugins enthält die VLC - Plugins, die zum Abspielen der verschiedenen Mediendateien notwendig sind.
Im Unterverzeichnis tools finden sich veschiedene Hilfsprogramme, die beim Erstellen dieses Projekts behilflich waren:
- extract.bas erstellt die Datei description.txt aus den in den .h - Dateien enthaltenen Kommentaren.
- lib2dlla.bas konvertiert die libvlc.lib nach libvlc.dll.a.
- libvlc.def enthält die Namen aller Prozeduren der libvlc.lib in alphabetischer Reihenfolge.
- libvlc.lib ist die API - Bibliothek, wie sie von er VLC - Website heruntergeladen werden kann.
- reimp.exe wird beim Konvertieren der libvlc.lib von lib2dlla.bas aufgerufen.
Erste Schritte
Ob die Installation gelungen ist, kann mit diesem kleinen Programm getestet werden. Damit das Programm laufen kann, muß sich die Datei libvlccore.dll (zu finden in <FB-Installationspfad>\inc\vlc\examples) im selben Verzeichnis wie das compilierte Programm oder im Suchpfad (PATH - Umgebungsvariable) befinden.
'Beispiel für ein SEHR einfaches Abspielprogramm unter Verwendung von libVLC
#define VLCpath "C:\Programme\freeBasic-1_03_0\inc\vlc" 'Durch den Pfad ersetzen, in dem
'sich die "libvlc.dll.a" und das "plugin" - Verzeichnis befinden
#LibPath VLCpath
#Include "vlc\vlc.bi" 'libVLC Headerdateien einbinden
Dim instance As libvlc_instance_t Ptr
Dim media As libvlc_media_t Ptr
Dim mediaPlayer As libvlc_media_player_t Ptr
Dim myMediaFile As String
Print "libVLC version: "; *libvlc_get_version() 'Verwendete libVLC - Version
Print
SetEnviron ("VLC_PLUGIN_PATH=" + VLCpath + "\plugins")
Print "Plugin path: "; Environ ("VLC_PLUGIN_PATH")
Print
instance = libvlc_new (0, NULL) 'VLC - Instanz erzeugen
If instance = 0 Then
Print "*** libVLC initialisation failed ***"
Print "press any key"
Sleep
End
EndIf
myMediaFile = "C:\myTestingMediaFile.mp3" 'Durch die abzuspielende Mediendatei ersetzen. Kann
' jede Datei sein (Audio oder Video), die libVLC verarbeiten kann (d.h.
' für die ein funktionierendes Plugin existiert).
Print "Media file: ";myMediaFile
Print
media = libvlc_media_new_path(instance, myMediaFile) 'Mediendatei laden
mediaPlayer = libvlc_media_player_new_from_media(media) 'Mediaplayer - Umgebung erzeugen
libvlc_media_release(media) 'Mediendatei entladen
libvlc_media_player_play(mediaPlayer) 'Wiedergabe starten
Print " press any key to quit"
Sleep 'Wartet auf Tastendruck
libvlc_media_player_stop(mediaPlayer) 'Wiedergabe beenden
libvlc_media_player_release(mediaPlayer) 'Mediaplayer - Umgebung freigeben
libvlc_release(instance) 'VLC - Instanz entladen
Beispiele zur Anwendung einiger VLC - API - Funktionen
libvlc_video_filter_list_get
libvlc_audio_filter_list_get
Liefert eine Liste der verfügbaren Video- bzw. Audiofilter.
Rückgabewert ist ein Pointer auf den ersten Record einer verketteten Liste.
#Include "vlc\vlc.bi"
Dim instance As libvlc_instance_t Ptr
Dim As libvlc_module_description_t Ptr filterListPtr
'Umgebungsvariable mit Pfad auf Plugin - Liste setzen
SetEnviron ("VLC_PLUGIN_PATH=C:\Programme\freeBasic_1_03_0\inc\vlc\plugins") 'Durch den
'aktuellen Installationspfad ersetzen
instance = libvlc_new (0, NULL) 'VLC - Instanz erzeugen
If instance = 0 Then
Print "*** libVLC initialisation failed ***"
Print "press any key"
Sleep
End
EndIf
filterListPtr = libvlc_video_filter_list_get(instance) 'Liste der verfügbaren Videofilter erstellen
'filterListPtr = libvlc_audio_filter_list_get(instance) 'Liste der verfügbaren Audiofilter erstellen
Do
Print
Print " NAME: ";*filterListPtr->psz_name
Print "KURZNAME: ";*filterListPtr->psz_shortname
Print "LANGNAME: ";*filterListPtr->psz_longname
Print " HILFE: ";*filterListPtr->psz_help
filterListPtr = filterListPtr->p_next 'Pointer auf den nächsten Record setzen
Sleep 1000
Loop Until filterListPtr = 0
Print "OK"
libvlc_module_description_list_release(filterListPtr) 'Liste entladen
libvlc_release (instance) 'VLC - Instanz entladen
Sleep
wird fortgesetzt...
Dateimanager |
---|
Es wurden bisher keine Sources abgelegt. |