![]() |
TMediaplayer: Ruckeln bei XVid
Hallo,
ich möchte ein kleines Programm schreiben um meine Facharbeit, einen gerenderten Film zu verpacken. Mein Film liegt aus Platzgründen als Xvid vor. Um den Film in einem Panel abzuspielen verwende ich TMediaplayer. Klappt soweit auch alles ganz gut, nur nun kommt das eigentliche Problem, das ich mir eigentlich nicht erklären kann. In jedem Player von VLC bis WindowsMediaPlayer lässt sich mein Film problemlos und absolut ruckelfrei (hat 27fps) abspielen, nur über TMediaplayer ruckelt er, gerade so, als würden nur noch 15 fps angezeigt werden. Ich habe festgestellt, je stärker ich die Kompression in XVid stelle, genauer gesagt besonders die "Motion Search Precision" desto stärker ist das Ruckeln ausgeprägt. Eine hohe "Motion Search Precision" ist aber notwendig, da die Qualität sonst sehr stark leidet. Gibt es irgendeine Möglichkeit den Film in Delphi anständig (und möglichst unkompliziert) zum Laufen zu kriegen? Danke für die Antwort mfg Global Impact PS: Meine Delphiversion ist Turbodelphi Explorer Mein Computer: 2BG Ram, 3800+ X2 Dualcore und Geforce 7900 GT Ich sollte also eigentlich in der Lage sein einen Film mit der Auflösung 640 * 480 und 27 fps kodiert in XVid ruckelfrei über Delphi abzuspielen. Ich habs auch bei meinem Bruder mal probiert, er hat 3 Ghz, und auch da isses nur über Delphi ruckelig. |
Re: TMediaplayer: Ruckeln bei XVid
TMediaplayer ist so langsam weil er auf einer veralteten api basiert. Videos muss man mit directX oder vergleichbarem abspielen bzw mit DSpack wenn man nicht sobviel Aufwand betreiben will.
|
Re: TMediaplayer: Ruckeln bei XVid
Hallo,
eine andere Möglichkeit währe den VLC-Player über ActiveX einzubinden. Ein Gruß |
Re: TMediaplayer: Ruckeln bei XVid
Hallo,
erstmal danke für die Antworten! Gibt es denn eine Möglichkeit, mit Standard-Delphi-Komponenten Filme über DirectX abzuspielen? (Habe leider TurobDelphi Explorer, kann also keine externen Komponenten installieren) mfg Global Impact |
Re: TMediaplayer: Ruckeln bei XVid
Zumindest brauchst du die
![]() ![]() Eine primitivst Wiedergabe ohne Komponenten könnte so aussehen. Opendialog, Panel oben, darauf 2 Button und 2 Label, das Video wird einfach auf das Formular geknallt (bzw. per put_Owner() auf eine passende Komponente). Wie es sich für DirectShow gehört, schluckt es dann jede Mediendatei, die der Computer wiedergeben kann.
Delphi-Quellcode:
Welche Späße damit noch angestellt werden können, gibt es bei der
procedure TForm1.Button1Click(Sender: TObject);
var pGraph: IGraphBuilder; pMediaControl: IMediaControl; pEvent: IMediaEvent; pSeek: IMediaSeeking; pVidWin: IVideoWindow; evCode, x, y, lpParam1, lpParam2: Integer; tim, dim: Int64; begin if Not OpenDialog1.Execute then exit; CoCreateInstance(CLSID_FilterGraph, Nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, pGraph); pGraph.QueryInterface(IID_IMediaControl, pMediaControl); pGraph.QueryInterface(IID_IMediaEventEx, pEvent); pGraph.RenderFile(PWideChar(WideString(OpenDialog1.FileName)), Nil); pGraph.QueryInterface(IID_IMediaSeeking, pSeek); pSeek.GetDuration(tim); Label1.Caption:=IntToStr(tim div 10000000); pGraph.QueryInterface(IID_IVideoWindow, pVidWin); pVidWin.put_Owner(Handle); pVidWin.put_WindowStyle(WS_CHILD); pVidWin.get_Width(x); pVidWin.get_Height(y); pVidWin.SetWindowPosition(2, Panel1.Height+2, x, y); weiter:=true; pMediaControl.Run; while weiter do begin if pEvent.GetEvent(evCode, lpParam1, lpParam2, 0)<>E_ABORT then begin if evCode=EC_COMPLETE then weiter:=false; pEvent.FreeEventParams(evCode, lpParam1, lpParam2); end; pSeek.GetPositions(tim, dim); Label2.Caption:=IntToStr(tim div 10000000); Application.ProcessMessages; end; pVidWin.put_Visible(FALSE); pVidWin.put_Owner(0); pVidWin._Release; Pointer(pVidWin):=Nil; pMediaControl._Release; Pointer(pMediaControl):=Nil; pEvent._Release; Pointer(pEvent):=Nil; pGraph._Release; Pointer(pGraph):=Nil; end; procedure TForm1.Button2Click(Sender: TObject); begin weiter:=false; end; ![]() |
Re: TMediaplayer: Ruckeln bei XVid
Puhhh,danke für die Antwort.
Ich habe nur irgendwie Verständnisschwierigkeiten bei denem Code! Ich hab ne Delphi 5 Version aufgetrieben, und habs mal mit der probiert, doch auch da hab ich Schwierigkeiten: Mein Code zum abspielen:
Delphi-Quellcode:
Es erscheint imemr eine Meldung, der Vorgang kann nicht fortgesetzt werden, da die Filteranschlüsse nicht verbunden sind.
videowindow1.FilterGraph := filtergraph1;
filtergraph1.Active := true; filtergraph1.ClearGraph; filtergraph1.RenderFile('..\Filme\Intro.avi'); filtergraph1.Play; Habe ich Filtergraph und Videowindow nicht über: videowindow1.FilterGraph := filtergraph1; miteinander verbunden? Danke für die Antwort mfg Global Impact |
Re: TMediaplayer: Ruckeln bei XVid
Habs hinbekommen, das Ding kommt scheinbar nicht gut mit XVid zurecht.
Abspielen tut ers jetz, nur das Ruckeln is nach wie vor, woran kann das nur liegen? |
Re: TMediaplayer: Ruckeln bei XVid
Hallo,
wird die Datei den im normalen Player normal abgespielt? Hast Du noch irgendwas anderes rechenintensives im Programm laufen? Ein Gruß |
Re: TMediaplayer: Ruckeln bei XVid
Im normalen Player wird sie absolut ruckelfrei abgespielt.
Ich hab nichts anderes nebenbei laufen (immer maximal 3 % cpu last) und noch locker 1,5 gb ram frei. Das ganze is bei XVid eben nur, wenn diese Motion Search Precision eingestellt is, wenn ich das ausstelle isses ruckelfrei, aber dann wird die Datei so gross, dass ich gleich auf xvid verzichten kann. Es muss doch wohl möglich sein, eine XVid Datei ruckelfrei abzuspielen. Ich dachte erst, dass Delphi vllt den falschen Codec nimmt oder so, weil ich in letzter Zeit viele verschiedene Codecs ausprobiert hab und auch immer wieder verschiedene XVid-Versionen installiert und deinstalliert hab, habs dann bei meinem Bruder (3GHz, Computer vor ner woche erst frisch aufgesetzt) und noch nem Computer mit 1,7 Ghz ausprobiert, selbes Problem, je langsamer der Computer, desto ruckeliger die Wiedergabe. Aber meiner Meinung nach sollte ein 1,7 Ghz Computer oder zumindest eienr mit 3Ghz doch in der Lage sein einen Film flüssig darzustellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz