(Gelöst) Videos abspielen

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Sereyanne

Betreff: (Gelöst) Videos abspielen

BeitragMo, Nov 30, 2015 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

bin auch mal wieder aus der Versenkung gekrochen Very Happy

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

Holzchopf

Meisterpacker

BeitragMo, Nov 30, 2015 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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 BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Sereyanne

BeitragDi, Dez 01, 2015 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

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 Very Happy

Das flip 0 hab ich testweise mal auskommentiert, wirklich brauchen tu ich das nicht oder?

DAK

BeitragMi, Dez 02, 2015 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 02, 2015 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Dez 02, 2015 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 03, 2015 8:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

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

BeitragDo, Dez 03, 2015 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Gewinner der 6. und der 68. BlitzCodeCompo

Sereyanne

BeitragDo, Dez 03, 2015 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Was ich getan habe Very Happy
Hat mich halt nur gewundert, warum das so ist.

Danke an alle fürs Helfen und Erklären Smile

Thunder

BeitragDo, Dez 03, 2015 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst aber eine Userlib schreiben/suchen, die mit h.264 oder webm (irgendwelche modernen formate) umgehen kann Wink
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Sereyanne

BeitragDo, Dez 03, 2015 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas kann ich leider nicht ^^

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group