Seite 2 von 6

Verfasst: 08.11.2008 15:44
von RSBasic
Kann man eigentlich mit FMOD auch Videos streamen?

Verfasst: 08.11.2008 15:59
von Joel
Geil, das geht sogar, hier mein Proggy:

Code: Alles auswählen

Procedure Download()
URLDownloadToFile_(0, "http://test.de/test.wmv", "D:\test.wmv" ,0,0)
Delay (100000)
EndProcedure


If InitMovie() = 0
  MessageRequester("Error", "Can't initialize movie playback !", 0) 
  End
EndIf

aThread = CreateThread(@Download(), 88)
Delay(1000)
  If LoadMovie(0, "D:\test.wmv")
  
    OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "PureBasic - Movie")
    PlayMovie(0, WindowID(0))
      
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  Else
    MessageRequester("Error", "Can't load the movie...", 0)
  EndIf
Ich sage nur kompillieren udn staunen :mrgreen:

Verfasst: 08.11.2008 16:03
von ts-soft
@Joel
Versteh den Sinn Deines Codes nicht :freak:
Wenn Du die ganzen Delay sowie den Thread wegläßt, funktionierts
mindestens genauso schnell :lol:

Wozu überhaupt die API statt der nativen PB Funktion?

Verfasst: 08.11.2008 16:08
von Joel

Code: Alles auswählen

Procedure Download()
URLDownloadToFile_(0, "http://test.de/test.wmv", "D:\test.wmv" ,0,0)
Delay (100000)
EndProcedure
Wenn ich das Delay weglasse, dann sagt Pure-Basic: "Invalid Memory Access" bei Endprocedure.

Das andere Delay vor dem Abspielen des Videos ist sozusamen das Caching :mrgreen:

Verfasst: 08.11.2008 16:11
von ts-soft
URLDownloadToFile_ kehrt doch sowieso erst nach Fertigstellung zurück?
Muß mir mal ne reale Inetadresse zum testen suchen.

Dem Thread fehlt schon mal der Parameter, erster Crash

Verfasst: 08.11.2008 16:29
von Joel
Habe das jetzt etwas Optimiert:

Code: Alles auswählen

Procedure Download(x.l)
URLDownloadToFile_(0, "http://www.test.de/test.wmv", "D:\test.wmv" ,0,0)
EndProcedure


If InitMovie() = 0
  MessageRequester("Error", "Can't initialize movie playback !", 0) 
  End
EndIf

aThread = CreateThread(@Download(), 88)
Delay(500)
  If LoadMovie(0, "D:\test.wmv")
  
    OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "Film")
    PlayMovie(0, WindowID(0))
      
    Repeat
    Until WaitWindowEvent(1) = #PB_Event_CloseWindow
  EndIf 
Habe aber noch ein Problem: Wenn ich den Video gerade Abspiele, dann ein Fenster öffne, und dann Fenster dann wieder Minimiere, dann ist das Fenster mit dem Video wieder im Vordergrund aber der Video wird nicht angezeigt. Das Fenster ist dann weiß und erst, wenn ich das Fenster bewege, sehe ich den Video wieder....

Verfasst: 08.11.2008 16:47
von ts-soft
Bei Deinem Code wird nichts gestreamt, lediglich UrlDownloadToFile nutzt
den Cache, wenn die Datei bereits vorhanden ist.
Ohne "Streaming" ist es genauso schnell da:

Code: Alles auswählen

TempFile.s = GetTemporaryDirectory() + "test.mpeg" 

If InitMovie() = 0
  MessageRequester("Error", "Can't initialize movie playback !", 0)
  End
EndIf

If Not URLDownloadToFile_(0, "http://www.blitzbasement.net/bank/aliensong.mpeg", TempFile, 0, 0)

  If LoadMovie(0, TempFile)
 
    OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "Alien Song")
    PlayMovie(0, WindowID(0))
     
    Repeat
    Until WaitWindowEvent(1) = #PB_Event_CloseWindow
    
    DeleteFile(TempFile)
  EndIf 
EndIf

Verfasst: 08.11.2008 16:58
von Joel
Hmmm, es müsste eine Funktion geben, die Videos abspielt, die noch übertragen werden.

Verfasst: 09.11.2008 17:48
von Joel
Dann ist also Streaming mit PB gar nicht möglich oder?

Verfasst: 13.11.2008 17:23
von PMV
Mit nativen Befehlen nicht. PB hat nur Funktionen zum abspielen von
Videos von der Festplatte (Movielib) ... willst du Streamen oder sogar
Dateiformate verwenden, die diese Lib nicht unterstützt, bist du
gezwungen auf alternativen um zu steigen. Alternativen nicht zu PB,
sondern alternative Bibliotheken wie FMOD für Audio, das aber auch
Streamen kann :wink:

Welche da für Videos gut geeignet ist weis ich aber nicht.

MFG PMV