Ich schreibe einen Mediaplayer in Delphi, der meine MP3s von einem NAS-Server auf meinen Mediarendererer spielt.
Das funktioniert ziemlich gut, aber ich habe ein Problem, dass der Seek-Befehl auf jedem System funktioniert,
aber nicht auf meinem Marantz NA6005!
Ich habe getestet:
Medion-NAS via MyApplication auf verschiedene Renderer (Mobile:bubbleupnpPlayer, PC:mediamonkeyPlayer, Sony Bravia TV und Marantz NA6005)
da kann ich:
-Spielen
-Stoppen
-Pause
-Unpause
-Suchen (außer auf Marantz dort bekomme ich den Fehler:
OLE-Fehler 80040365)
Dasselbe auf QNAP mit Twonky über MyApplication zu verschiedenen Renderern (Mobile:bubbleupnpPlayer, PC:mediamonkeyPlayer, Sony Bravia TV und Marantz NA6005)
da kann ich:
-Spielen
-Stoppen
-Pause
-Unpause
-Suchen (außer auf Marantz da bekomme ich den Fehler
OLE-Fehler: 80040365)
Hier einige Codeschnipsel (der erste funktioniert auf allen Geräten, der zweite erzeugt den Fehler auf Marantz):
Code:
procedure TAVTransportService.Play;
VAR ovIn,ovOut : OleVariant;
begin
ovIn := VarArrayCreate([0, 1], varVariant);
ovIn[0]:= 0;
ovIn[1]:= '1';
ovOut := null ;
try
AVTransportService.InvokeAction('Play',ovIn,ovOut);
Log.Add('Play: OK');
FStateOK:=true;
except
Log.Add('Error in Play');
FStateOK:=false;
end;
end;
Code:
function TAVTransportService.SetPosition(position:string):boolean;
VAR ovIn,ovOut : OleVariant;
begin
result:=false;
if isPaused then Play;
if not IsPlaying then exit;
ovIn:=VarArrayCreate([0, 2], varVariant);
ovin[0]:=0;
ovin[1]:='REL_TIME';
ovin[2]:=position; //eg: '00:01:30'
ovOut:=null;
try
AVTransportService.InvokeAction('Seek',ovIn,ovOut); //here the error occurs
result:=true;
TUpnpDMC.Log.Add('Seek ok');
except
on e:
Exception do TUpnpDMC.Log.Add('Seek failed:' + E.message);
end;
end;
Inzwischen habe ich alle möglichen und unmöglichen Kombinationen ausprobiert, um diesen Fehler zu umgehen. Ich habe den Playstate mit is ok (Playing) und so weiter überwacht.
Nach einer Woche Lesen im Netz bin ich mit den Nerven am Ende.
Hatte jemand das gleiche Problem und eine mögliche Lösung oder einen Workaround zB. ein alternativer Befehl?
Hilfe dringend gesucht.