seit längerer Zeit schlage ich mich mit dem Problem herum, einen Film auf einem geöffneten Screen abspielen zu wollen. Ich habe bereits sämtliche in den Foren geschriebenen Ersatzlösungen mit Hilfe von etwaigen Media/Movie Plugins genauso wie die PB interne Implementierung der Movie Library ausprobiert, aber es treten immer folgende Fehler auf:
Bei der DshowMedia.pbi wird z.B. nur der Sound abgespielt, bei der internen Implementierung der Movie Library von PB wird bei Übergabe der ScreenID() als Zieloberfläche ein "weiterer Screen" über meinen Screen gelegt, d.h. wenn ich die Windowstaste drücke werden mir zwei Fenster in der Taskleiste angezeigt.
Deshalb nun einmal die Frage nach einer konkreten Implementierung bei geöffnetem Screen, BEVOR es zur repeat-Schleife des Screens selber geht. D.h. es soll ein Intro abgespielt werden auf dem geöffneten Screen, wobei der Film auf die Screenauflösung skaliert werden soll.
So öffne ich meinen Screen:
Code: Alles auswählen
If OpenScreen(myGraphics\width,myGraphics\height,32,#SCREEN_MAIN_TITLE,#PB_Screen_SmartSynchronization)
;CEGUI init
SetGUITheme3D(#CEGUI_THEME,#CEGUI_FONT);
;create front camera first (replace with camera.pb file if finished)
CreateCamera(0, 0, 0, 100, 100);
;intro
showIntro();HIER SOLL DAS PROGRAMM EINEN FILM ABSPIELEN UND
;ERST NACH DESSEN BEENDIGUNG SOLL AUS DER METHODE GESPRUNGEN WERDEN
;init windows
initMenuWindow();
initSettingsWindow();
;show menu window
showMenuWindow();So sah z.B. mein Versuch mit der DshowMedia.pbi aus, der mir jedoch nur den Sound abspielt und ein schwarzes Bild liefert (wird derselbe Film in einem Fenster anstatt auf einem Screen abgespielt, funktioniert er einwandfrei):
Code: Alles auswählen
Procedure showIntro()
;TODO
CompilerIf #PB_OS_Windows
If InitMedia(#INTRO_MOVIE) And LoadMedia(#INTRO_MOVIE,"Media/Movies/testmovie.avi", ScreenID())
PlayMedia(#INTRO_MOVIE);
ResizeMedia(#INTRO_MOVIE,0,0,myGraphics\width,myGraphics\height);
Repeat
Delay(5);
ExamineKeyboard();
Until MediaState(#INTRO_MOVIE) = #State_Stopped Or KeyboardPushed(#PB_Key_Escape) Or KeyboardPushed(#PB_Key_Space)
CloseMedia(#INTRO_MOVIE);
FreeMedia(#INTRO_MOVIE);
EndIf
CompilerEndIf
EndProceduredas Intro Windows Usern vorbehalten, was eigentlich nicht meine Absicht ist.
Vielen Dank im Voraus
Loejen