ich brauche etwas um ein "verzögertes hängenbleiben" zu verhindern.
Wenn ich im Mediaplayer eine Mediadatei lade so wird zunächste der
passende Codec geladen. Genau dabei kann es aber passieren das der
Mediaplayer "hängen" bleibt.
Es bringt grundsätzlich nichts wenn ich einen BEGIN SEQUENCE /
RECOVER Konstruktion benutze den der Xbase++ Thread läuft im
Code ja weiter während das activeX ein eigener Thread ist.
Leider hab ich noch nicht raus bekommen ob der Mediaplayer zu dem
Zeitpunkt irgendeine ErrorMsg absetzt die ich auswerten kann, also
denke ich über eine andere Lösung nach.
z.Z. versuche ich mich mit sowas, aber es scheint (noch) nicht das
richtige timeing zu sein ...
Code: Alles auswählen
::oThread := Thread():new()
::oThread:setStartTime(SECONDS()+6)
::oThread:start( "LogOut",1)
DO WHILE nAgain < 3
// some WMP Property
//
::oWMP:stretchToFit := .T. // fit video into Dialog. NEED resize !
::oWMP:Settings:AutoStart := .T. // start to play after load
// now we load media via :URL
// depending what Codec is need
// it will invoke WMP Event :
// wmppsTransitioning
//
* BEGIN SEQUENCE
::oWMP:URL := cFile // play via :URL
* RECOVER
// "resize" parent to same size
//
::oWMP:setparent():setPosAndSize( aPosi ,{aSize[1],aSize[2]} )
// reset fail counter
//
::failcount := 0
DO WHILE .T.
// is playing ?
//
IF ::oWMP:PlayState = wmppsPlaying
//
// is Media open ?
IF ::oWMP:openState = wmposMediaOpen
//
// ok now we can exit loop
EXIT
ENDIF
ENDIF
SLEEP(10)
::failcount++
IF ::failcount > 10*5
//
// 1st stop it
::oWMP:Controls:stop()
RETURN .F.
ENDIF
ENDDO
//
// "resize" player to same ::drawingArea size
//
::oWMP:setPosAndSize({0,0}, ::drawingArea:currentsize() )
SLEEP(10)
IF ::oWMP:currentpos()[1] = 0 .AND. ::oWMP:currentpos()[2] = 0
::oWMP:Controls:pause()
EXIT
ELSE
//
// some Error on open Media, try again
//
::oWMP:Controls:stop()
nAgain++
ENDIF
ENDDO
IF ::oThread = NIL
ELSE
::oThread:setInterval( NIL )
::oThread := NIL
ENDIF
gruss by OHR
Jimmy