Multimediawiedergabe z.B. über VLC

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

Es gibt da meines Wissens eine Extra Funktion für Fehler Meldung. Irgendetwas mit Error.
MFG
Michael Springwald

t-z
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

Beitrag von t-z »

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):

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);


Wenn ich alles am laufen habe werde ich die fertig abgewandelte Komponente mal hochladen.

Vielen Dank für eure Hilfe!

t-z
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

Beitrag von t-z »

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:

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;

Antworten