Multimediawiedergabe z.B. über VLC
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Multimediawiedergabe z.B. über VLC
Es gibt da meines Wissens eine Extra Funktion für Fehler Meldung. Irgendetwas mit Error.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 49
- Registriert: So 22. Nov 2009, 18:12
- OS, Lazarus, FPC: Windows 7 Professional 64Bit / Kubuntu 10.04 (Lazarus 0.9.28.2 64 Bit FPC 2.2.4)
- CPU-Target: Intel i5-760
Re: Multimediawiedergabe z.B. über VLC
Vermutlich meist du libvlc_errmsg:pchar.
Ich habe jetzt den Fehler beheben können. Das Problem lag darin, dass das Programm anscheinend zuvor die libvlccore.dll laden muss. Ich habe das Programm jedenfalls so abgeändert, dass diese geladen wird und danach erst die libvlc. So bekomme ich ein handle und kann sogar auf die Kopie der DLLs verzichten.
Auf diese oder ähnliche Art und Weise funktioniert es dann auch mit der Wiedergabe (hier nur Ton):
Wenn ich alles am laufen habe werde ich die fertig abgewandelte Komponente mal hochladen.
Vielen Dank für eure Hilfe!
Ich habe jetzt den Fehler beheben können. Das Problem lag darin, dass das Programm anscheinend zuvor die libvlccore.dll laden muss. Ich habe das Programm jedenfalls so abgeändert, dass diese geladen wird und danach erst die libvlc. So bekomme ich ein handle und kann sogar auf die Kopie der DLLs verzichten.
Auf diese oder ähnliche Art und Weise funktioniert es dann auch mit der Wiedergabe (hier nur Ton):
Code: Alles auswählen
Medialist:=libvlc_media_list_new(VLC);
Media:=libvlc_media_new_location(VLC,PChar(FileName));
libvlc_media_list_add_media(Medialist,Media);
Medialistplayer:=libvlc_media_list_player_new(VLC);
libvlc_media_list_player_set_media_list(Medialistplayer,Medialist);
libvlc_media_list_player_play(Medialistplayer);
Vielen Dank für eure Hilfe!
-
- Beiträge: 49
- Registriert: So 22. Nov 2009, 18:12
- OS, Lazarus, FPC: Windows 7 Professional 64Bit / Kubuntu 10.04 (Lazarus 0.9.28.2 64 Bit FPC 2.2.4)
- CPU-Target: Intel i5-760
Re: Multimediawiedergabe z.B. über VLC
ich habe nun Zeit an dem Programm / an der Komponente weiter zu machen. Da ich nun allerdings unter Win 7 (64 Bit) und nicht mehr unter Win XP arbeite hatte ich zum einen das Problem, dass der zur Pfadauffindung verwendete Regestry-Key "HKEY_LOCAL_MACHINE\'Software\VideoLAN\VLC" unter Win 7 nicht existiert. Ich versuche es nun also mit einem Schlüssel, der auf beiden Systemen existiert. Hier bekomme ich aber den Fehlercode 5 (Zugriff verweigert) zurückgegeben. Ich muss das Programm als Admin ausführen, damit dies nicht passiert. Hat jemand ne Idee, wie man das umbauen kann, sodass keine Admin-Rechte notwendig sind? Dort muss ich allerdings erst den noch richtigen String extrahieren. Alternativ könnte ich den Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VideoLAN\VLC" benutzen. Allerdings weiß ich nicht, ob bei einem 32-Bit-System der Schlüssel wie unter Win XP lautet.
Hier der Code der Problematischen Funktion:
Hier der Code der Problematischen Funktion:
Code: Alles auswählen
function GetLibPath: boolean;
var
Applikation_Path : string;
Handle: HKEY;
RegType: integer;
DataSize: integer;
begin
Result := False;
// verifie si libvlc.dll existe
Applikation_Path := ExtractFilePath(Application.ExeName);
//if FileExists(racine + 'VLC\libvlc.dll') then
if FileExists(Applikation_Path + 'libvlc.dll') then
begin
result := true;
libPath := Applikation_Path;
// libPath := racine + 'VLC\' ;
end
else
begin
showMessage('durchlaufen');
//if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'Software\VideoLAN\VLC', 0, KEY_ALL_ACCESS, Handle) = ERROR_SUCCESS) then
ShowMessage('E_ID:'+IntToStr(RegOpenKeyEx(HKEY_CLASSES_ROOT, 'Applications\vlc.exe\shell\Open\command', 0, KEY_ALL_ACCESS, Handle))); //Fehlernummer Ausgeben --> hier wird ohne Admin-Rechte 5 zurückgegeben
if (RegOpenKeyEx(HKEY_CLASSES_ROOT, 'Applications\vlc.exe\shell\Open\command', 0, KEY_ALL_ACCESS, Handle) = ERROR_SUCCESS) then
begin
ShowMessage('durchlaufen2');
//if RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then
if RegQueryValueEx(Handle, '', nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then
begin
SetLength(LibPath, Datasize);
showMessage('v:'+LibPath);
//RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, PByte(@LibPath[1]), @DataSize);
RegQueryValueEx(Handle, '', nil, @RegType, PByte(@LibPath[1]), @DataSize);
LibPath[DataSize] := '\'; //Hier müssen noch weitere Bearbeitungsschritte folgen
showMessage('n:'+LibPath);
Result := True;
end;
RegCloseKey(Handle);
end;
end;
end;