ich möchte ein speziell für meine Zwecke angepasstes Präsentationsprogramm schreiben. Aus diesem heraus soll es auch möglich sein Audio-Dateien und Videos wiederzugeben. Dabei sollten möglichst viele Formate unterstützt werden. Dieser Programmteil muss auf Windows lauffähig sein, es wäre aber auch schön, wenn es auch unter Linux laufen würde.
Also habe ich mir gedacht: Warum das Rad neu erfinden? Ich benutze einfach VLC. Dieser frisst so gut wie alles, ist auf den meisten PCs installiert - zumindest in meinem Umfeld - und ich habe ihn auch unter Linux.
So weit so gut. Jetzt kommt das eigentliche Problem: Ich bekomme es weder hin VLC über TProcess zu starten und dann per pipe zu steuern, noch mit der vlclib.
Über TProcess kommt der Befehl entweder nicht an (es passiert gar nichts) oder es kommt die Fehermeldung "Stream write error". Dies ist der dazugehörige Quelltext (Entsprechende zusätzliche Versuche sind auskommentiert):
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
P := TProcess.Create(nil);
P.CommandLine := 'C:\Programme\VideoLAN\VLC\vlc.exe --extraintf rc';
P.Options := [poUsePipes];
P.Execute;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
P.Input.WriteAnsiString('help');
//P.Stderr.WriteAnsiString('help');
end;
Code: Alles auswählen
procedure TForm1.Button4Click(Sender: TObject);
begin
PLT:=TProcessLineTalk.Create(Self);
PLT.CommandLine := 'C:\Programme\VideoLAN\VLC\vlc.exe -I rc';
//PLT.CommandLine := 'C:\Programme\VideoLAN\VLC\vlc.exe --extraintf rc';
//PLT.CommandLine := 'C:\Programme\VideoLAN\VLC\vlc.exe --rc-host localhost:4212';
PLT.Options := PLT.Options + [poUsePipes];
PLT.Execute;
end;
procedure TForm1.Button5Click(Sender: TObject);
var commandstr:String;
begin
//commandstr:='help'+LineEnding;
//PLT.Input.write(commandstr[1], length(commandstr));
PLT.WriteLine('help');
//PLT.WriteLine('add F:\XXXXXXX\Eigene Dateien\Eigene Musik\XXXXXXXXXXX\XXXXXXXXXXXXXXX.mp3');
end;
Ich habe eine leicht abgewandelte Version (um die Kompatibilität zu fpc/lazarus herzustellen) von IceVLCPlayer angewendet. Hier bekomme ich die Bibliothek nicht geladen, obwohl die Datei unter diesem Pfad existiert (überprüft mit FileExists). Die Funktion LoadLibrary gibt immer das Handle 0 zurück. Dabei ist es unerheblich, ob die Version aus der Unit Windows, oder aus der Unit DynLibs verwendet wird.
Ach so: Statisch gelinkt schmiert das Programm beim Start ab, da die DLL ebenfalls nicht gefunden wird.
Hat jemand eine Idee, wie ich das Problem lösen kann?
Und noch etwas: Zur Zeit programmiere ich mit der aktuellsten Version unter Windows XP SP3.