(Gelöst) Videos abspielen
Übersicht BlitzBasic BlitzPlus
SereyanneBetreff: (Gelöst) Videos abspielen |
Mo, Nov 30, 2015 17:22 Antworten mit Zitat |
|
---|---|---|
Hallo Leute,
bin auch mal wieder aus der Versenkung gekrochen Ich möchte ein paar kleine Videos mit B+ abspielen, aber ich finde die richtigen Befehle nicht. Anscheinend funktionieren die Befehle wie drawmovie usw ja nur unterm BackBuffer, und da ich ohne Graphics-Befehl arbeite (unter B+ halt mit CreateWindow, wo sich alles drin abspielen soll), funktioniert das nicht. Bin auf Canvas gestoßen, da wird mir das Video dann auch angezeigt, aber nur wenn ich die Maus bewege. Sonst steht das Video still. Bitte demütig um ein paar Anfängertipps ^^ |
||
- Zuletzt bearbeitet von Sereyanne am Do, Dez 03, 2015 18:21, insgesamt einmal bearbeitet
HolzchopfMeisterpacker |
Mo, Nov 30, 2015 19:17 Antworten mit Zitat |
|
---|---|---|
Wie sieht dein Code denn aus? Hast du ein WaitEvent drin? Dann bleibt das Programm daran hängen, solange nichts (wie z.B. eine Mausbewegung) registriert wird. Um dem entgegenzuwirken, könntest du einfach einen Timer erstellen mit CreateTimer, der löst dann mit der definierten Frequenz ein TimerTick-Event aus.
MfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Sereyanne |
Di, Dez 01, 2015 18:10 Antworten mit Zitat |
|
---|---|---|
Danke!
Dann war die grundsätzliche Idee ja doch nicht so falsch ^^ Jetzt wird das Video zumindest angezeigt, aber ich bin nicht sicher, auf welche Frequenz ich den Timer stellen soll. Hab ein bisschen rumprobiert, bin bei 10 angekommen, alles andere wirkt zu schnell. Außerdem ruckelt das Video und es tauchen grüne Blöcke auf. Ich brauche wohl noch ein bisschen Feinjustierung Also mein Code sieht jetzt so aus: Code: [AUSKLAPPEN] ;-----------------------------------------------------------------------------------------------------------------------------------------------------------
;Auflösung ermitteln und Fenster erstellen Global desktopbreite=ClientWidth(Desktop())/2 Global desktophoehe=ClientHeight(Desktop())/2 ;clientheight und -width ermittelt die Bildschirmauflösung, durch 2 um die Mitte zu bestimmen Global programmbreite=340 Global programmhoehe=600 Global tamagotchi_fenster=CreateWindow("timertest",desktopbreite-programmbreite/2,desktophoehe-programmhoehe/2,360,550,Desktop(),13) ;----------------------------------------------------------------------------------------------------------------------------------------------------------- ;Buttons erstellen Global ende=CreateButton("Speichern und Ende",programmbreite/2-60,430,120,30,tamagotchi_fenster) ;----------------------------------------------------------------------------------------------------------------------------------------------------------- ;Menüpunkte erstellen Global spielmenu=CreateMenu("Spiel",1,WindowMenu(tamagotchi_fenster)) Global einleitungmenu=CreateMenu("Einleitung ansehen",10,spielmenu) Global neueshaustiermenu=CreateMenu("Neues Haustier",2,spielmenu) Global speichernmenu=CreateMenu("Speichern",3,spielmenu) Global liniemenu=CreateMenu("",4,spielmenu) Global beendenmenu=CreateMenu("Beenden (ohne zu speichern)",5,spielmenu) Global infomenu=CreateMenu("Info",6,WindowMenu(tamagotchi_fenster)) Global uebermenu=CreateMenu("Über",7,infomenu) Global spezialmenu=CreateMenu("Spezial",8,WindowMenu(tamagotchi_fenster)) Global modusmenu=CreateMenu("aktivieren",9,spezialmenu) UpdateWindowMenu tamagotchi_fenster ;Menü updaten sonst wird nix angezeigt ;testcode Global videotimer=CreateTimer(10) Global videocanvas=CreateCanvas(10,10,320,350,tamagotchi_fenster) SetBuffer CanvasBuffer(videocanvas) videokatze=OpenMovie("gfx/videos/katze guckt an.avi") ;----------------------------------------------------------------------------------------------------------------------------------------------------------- ;Hauptprogramm Repeat If MoviePlaying(videokatze) = 0 Then CloseMovie videokatze videokatze= OpenMovie("gfx/videos/katze guckt an.avi") End If DrawMovie videokatze,0,0 WaitTimer (videotimer) ;Flip 0 FlipCanvas(videocanvas) WaitEvent() Select EventID() Case $803 ;WindowClose If EventSource()=tamagotchi_fenster Then End EndIf Case $1001 ;Menüevent (ob Menüs angeklickt werden) Select EventData() ;Case 2 ;Neues Haustier ;Auswahl() ;Case 3 ;Speichern ;Save() Case 5 ;Beenden (ohne zu speichern) End Case 7 ;Über Notify "test" ;Case 9 ; ;Case 10 ;Einleitung ansehen ;Einleitung() End Select Case $401: ;GadgetAction, Eingabe If EventSource()=ende Then ;Save() End EndIf End Select UpdateWindowMenu tamagotchi_fenster Forever End Den neuen Code, um das mit dem Timer und dem Video zu testen, hab ich einfach unter die Kategorie "testcode" und in der Schleife zwischen repeat und waitevent gesetzt Das flip 0 hab ich testweise mal auskommentiert, wirklich brauchen tu ich das nicht oder? |
||
DAK |
Mi, Dez 02, 2015 11:02 Antworten mit Zitat |
|
---|---|---|
Du solltest den Timer zumindest so schnell setzen, wie die Bildwiderholrate des Videos, nach Shannon-Nyquist aber eher doppelt so schnell. Mit 60 bist du ganz gut dabei. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Sereyanne |
Mi, Dez 02, 2015 12:29 Antworten mit Zitat |
|
---|---|---|
60? o.O
Dann rast das Video so schnell, dass man ja gar nix mehr sieht... Und das nächste Problem: Der Timer hält das ganze Programm auf. Wenn ich den Timer auf ca 10 setze, muss ich die Menüs schon meistens 2-3x anklicken bis es funktioniert. Wenn der Timer mit 60 läuft, hab ich gar keine Chance mehr, irgendeinen Input durchzukriegen... Ach ja und die hässlichen grünen Blöcke im Video gehen auch nicht weg. Wie würde denn so ein "Standard-Code" ansehen, wenn ich in B+ ein Video laufen lassen will? Wie gesagt ohne Graphics, da ich mit CreateWindow arbeite. Das Video soll in einer Dauerschleife laufen, bis der Nutzer dem Programm einen anderen Befehl gibt. |
||
RallimenSieger des 30-EUR-Wettbewerbs |
Mi, Dez 02, 2015 23:03 Antworten mit Zitat |
|
---|---|---|
War das nicht so das das Video einfach gespielt wird mit der normalen geschwindigkeit
und mann lediglich mit DrawMovie das aktuelle Bild einzeichnet bzw kopiert etwa so... Code: [AUSKLAPPEN] Startwindow = CreateWindow ("Movie Test",200,200,700,545,0)
canvas = CreateCanvas (0,0 ,ClientWidth(Startwindow),ClientHeight(Startwindow),Startwindow ) videostream%= OpenMovie("Video.avi") Repeat Ergebnis = WaitEvent (60) ; SetBuffer (CanvasBuffer (canvas )) DrawMovie (videostream%,0,0) FlipCanvas(Canvas) ; Select Ergebnis Case $803 End End Select Forever bei mir geht es ! |
||
Sereyanne |
Do, Dez 03, 2015 8:02 Antworten mit Zitat |
|
---|---|---|
Vielen Dank!
Hab das direkt mit meinem Video mal ausprobiert. Merkwürdig ist, dass die grünen Blöcke bei mir trotzdem auftauchen und auch von anderen Leuten bestätigt wurden (auf anderen PCs). Also was zum Geier mache ich falsch? Wenn ich das Video direkt öffne (zb über VLC), läuft es einwandfrei. Edit: Wenn ich es ganz genau betrachte, tauchen die grünen Blöcke nur bei den Übergängen auf. Ich lasse das Video ja in einer Dauerschleife laufen und immer, wenn es zuende ist und von vorn beginnt, wird es kurz grün. Und weil mein Video nur 5 Sekunden lang ist, fällt das eben besonders stark auf. Nochmal edit: Welche Videoformate kennt BB überhaupt? Ich hab grad rumgespielt und aus dem Original-Video (was einwandfrei läuft) testweise avi, wmv, h261, h264, mkv, mjpeg, mov, mp4 gemacht. Die einzigen, die laufen, sind avi und wmv (das avi mit grünen Blöcken und das wmv in Zeitlupe). Bei allen anderen krieg ich "Invalid Movie Graphics handle". Merkwürdig ist, dass das original Video auch ein avi ist. Codier ich bei der Videoumwandlung irgendwas falsch? Kenn mich damit leider absolut nicht aus. ----------------------------- Hat sich erledigt. Die mit XMedia konvertieren Videos laufen unter BB nur mit grünen Blöcken (aber im VLC einwandfrei). Bin nun umgestiegen auf den Microsoft Expression Encoder. Läuft erste Sahne Würde mich aber trotzdem mal interessieren, warum. Kommt BB mit dem Container oder irgendwelchen anderen Daten nicht klar? Was macht BB anders als VLC? |
||
DAK |
Do, Dez 03, 2015 18:12 Antworten mit Zitat |
|
---|---|---|
Also, erstmal, avi ist kein einzelner Codec sondern ein Container, in den haufenweise verschiedene Kodierungen verwendet werden können. Das Ganze ist dazu auch noch echt alt, und etwas gewachsen. Das heißt, viele von den Kodierungen haben auch noch leicht unterschiedliche Varianten.
Das heißt, einen Decoder schreiben, der mit absolut allen Varianten auskommt, das ist viel Arbeit. Blitz hat leider oft nur sehr schlechte Decoder, die grad auf eine spezielle Variante abgestimmt sind. Ähnliche Fehler gibt es auch beim Import von z.B. komprimierten .bmps. VLC hingegen ist explizit für Videos geschrieben und hat irre viele und echt gute Decoder drinnen, deswegen hast du dort prinzipiell weniger Probleme. Die grünen Blöcke klingen so, als würden die I-Frames nicht richtig gelesen werden. Die Lösung ist im Endeffekt so lang mit dem Codieren rum zu spielen, bis du was kriegst, was unter Blitz funktioniert |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Sereyanne |
Do, Dez 03, 2015 18:20 Antworten mit Zitat |
|
---|---|---|
DAK hat Folgendes geschrieben: Also, erstmal, avi ist kein einzelner Codec sondern ein Container
Jo, hab ich glaube auch geschrieben ^^ DAK hat Folgendes geschrieben: Blitz hat leider oft nur sehr schlechte Decoder, die grad auf eine spezielle Variante abgestimmt sind. VLC hingegen ist explizit für Videos geschrieben und hat irre viele und echt gute Decoder drinnen, deswegen hast du dort prinzipiell weniger Probleme.
Ok, das hört sich für mich nach ner sinnvollen Erklärung an. DAK hat Folgendes geschrieben: Die Lösung ist im Endeffekt so lang mit dem Codieren rum zu spielen, bis du was kriegst, was unter Blitz funktioniert
Was ich getan habe Hat mich halt nur gewundert, warum das so ist. Danke an alle fürs Helfen und Erklären |
||
Thunder |
Do, Dez 03, 2015 22:30 Antworten mit Zitat |
|
---|---|---|
Du kannst aber eine Userlib schreiben/suchen, die mit h.264 oder webm (irgendwelche modernen formate) umgehen kann | ||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Sereyanne |
Do, Dez 03, 2015 23:11 Antworten mit Zitat |
|
---|---|---|
Sowas kann ich leider nicht ^^ | ||
Übersicht BlitzBasic BlitzPlus
Powered by phpBB © 2001 - 2006, phpBB Group