AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DMO: DirectShow Media Player (Video und Audio wiedergabe)

DMO: DirectShow Media Player (Video und Audio wiedergabe)

Ein Thema von lbccaleb · begonnen am 23. Sep 2009 · letzter Beitrag vom 19. Dez 2010
Antwort Antwort
Benutzerbild von lbccaleb
lbccaleb
Registriert seit: 25. Mai 2006
Hallo Community,

da ich in letzter Zeit des öfteren drauf angesprochen wurde, habe ich mal einen kleinen Media Player programmiert, der komplett auf die Microsoft Schnittstelle DirectShow abgestimmt ist!

Man brauch keine weiteren Bibliotheken für die Benutzung des Players! (Natürlich müssen aber die Codecs des abspielenden Formates installiert sein)
Es handelt sich hierbei um einen einfachen MediaPlayer der nur die Benutzung demonstrieren soll. Wer intresse hat den weiter zu entwickeln, kann das gerne tun

Sollte noch irgendwo ein Fehler sein, so würde ich euch bitten, den hier zu posten damit ich den Fehler noch beheben kann. Hab leider nicht so viel Zeit im mom um daran groß weiter zu arbeiten, oder Ihn weiter zu entwickeln.


Hoffe es kann der ein oder andere was damit Anfangen, und brauch nun nicht mehr auf externe Dll´s zurück zu greifen.

(Falls Ihr irgendwo Rechtschreibfehler findet einfach ignorieren) oO


Source und Screener sind angehangen.


Was kann er?

-Abspielen von Audio und Video Dateien (Codecs?)
-Lautstärke Regelung
-Ballance Regelung
-Standart Player Steuerung
-Automatische TrackBar aktualisierung
-DirectShow Fehler auswertung


Was benötige Ich?

-Zum compilieren braucht Ihr natürlich die Header Dateien von DirectShow
-Ihr braucht die DSUtils.pas (Fehler auswertung) von dem DSPack (Hänge ich hier mit an)


Links

-DirectX Headers
-DSPack
-Nützliche DS Tools für Audio und Video und Visualisation
Miniaturansicht angehängter Grafiken
pure_ds_screener_195.jpg  
Angehängte Dateien
Dateityp: zip directshow_demo_project_212.zip (11,7 KB, 377x aufgerufen)
Dateityp: pas dsutil_188.pas (199,9 KB, 254x aufgerufen)
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
 
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#2
  Alt 24. Sep 2009, 14:10
Vielen Dank erst einmal.

Vorweg, ich kenne mich mit DX nicht wirklich aus, bin also ein richtiger Anfänger.
Schickes Demo, auch das man gleich ein paar Kontrols wie Audio-Volume dazu bekommt.

Leider hilft mir das pers. nicht unbedingt viel weiter da ich hoffte das es möglich währe
eine MP3-Soundwiedergabe zu realisieren die eine geringe Applicationsgrösse erzeugt.
Mein Testdemobeisieldingsbums brauch zB. ~150KB,
wobei eigentilch nur eine Messagebox enthalten ist. Leider benötigen die DX-Units, Sysutils, Classes, Variants etc.
Matti
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

 
Delphi 7 Enterprise
 
#3
  Alt 24. Sep 2009, 17:12
Mhh also du willst quasi auch die DirectShow Unit einsparen?
Oder hab ich da jetzt was falsch verstanden?

Um MP3´s abzuspielen kannst du es genau so machen, wenn du nur MP3´s abpielen willst, kannst du das zB. auch ohne das laden des IVideoWindow Interfaces!
Die anderen Interfaces sind ja halt nur für Lautstärke und spulen und so.
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#4
  Alt 26. Sep 2009, 12:10
Du verwendest die DSUtils.pas nur wegen der Funktion GetErrorString?
Delphi-Quellcode:
function GetErrorString(hr: HRESULT): string;
var buffer: array[0..254] of char;
begin
  AMGetErrorText(hr,@buffer,255);
  result := buffer;
end;
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

 
Delphi 7 Enterprise
 
#5
  Alt 26. Sep 2009, 14:21
Ja, verwende ich...
Natürlich kann man die Funktion auch noch extrahieren und in das Programm einbinden..
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#6
  Alt 27. Sep 2009, 10:53
Naja. Ich halte das Kopieren schon für sinnvoll. Denn dann genügen die Header von Clootie. Wenn die Unit DSUtil verwendet wird, wird zumindest noch die Unit WMF9 aus der vom DSPack verwendeten DirectX-Version benötigt.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#7
  Alt 29. Sep 2009, 10:10
Was bewirkt eigentlich das MediaControl.StopWhenReady? Ich meine ausser dass das ActiveMovie Window geöffnet wird.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#8
  Alt 30. Sep 2009, 11:23
Wenn die Interfaces mit
GraphBuilder.QueryInterface(IID_I*, *); verbunden werden, werden Pointer gesetzt, auch wenn die Interfaces nicht genutzt werden können. So ergibt die Abfrage
Delphi-Quellcode:
    // Kann die autstärke und Ballance geändert werden?
    if Assigned(BasicAudio) then
auch True, wenn kein Audio vorhanden ist. Dasselbe gilt für
Delphi-Quellcode:
    // Hat die Datei ein VideoStream?
    if Assigned(VideoWindow) then
Deshalb sollte jeweils eine weitere Abfrage erfolgen. Zum Beispiel
Delphi-Quellcode:
function IsAudio: Boolean;
var
  Int : Integer;
begin
  {
  *  HRESULT get_Volume(
  *  [out]  long *plVolume          Pointer to a variable that receives the volume.
  *  );
  }

  Result := Assigned(FBasicAudio) and
            not(Failed(FBasicAudio.get_Volume(Int)));
  {
  *  Results:
  *    E_NOTIMPL            The filter graph does not contain an audio renderer filter.
  *                          (Possibly the source does not contain an audio stream.)
  *    E_POINTER            Null pointer argument.
  *    S_OK                  Success.
  }

end;
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Delphi-Quellcode:
function IsVideo: Boolean;
var
  vis : longBool;
begin
  {
  *  HRESULT get_Visible(
  *    [out]  long *pVisible          Pointer to a variable that receives the
  *                                    value OATRUE if the window is visible, or
  *                                    OAFALSE if the window is hidden.
  *  );
  }

  Result := Assigned(FBasicVideo) and
            Assigned(FVideoWindow) and
            not(Failed(FVideoWindow.get_Visible(vis)));;
  {
  *  FBasicVideo ist auch verbunden, wenn kein Video vorhanden ist. Deshalb wird
  *  der Zustand des VideoWindow abgefragt. Die Abfrage ergibt nur Wahr, wenn
  *  Video vorhanden ist.
  *
  *  Results:
  *    E_POINTER                      NULL pointer.
  *    S_OK                            Success.
  *    VFW_E_NOT_CONNECTED            The video renderer filter is not connected.
  }

end;
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
  Mit Zitat antworten Zitat
mz23
 
#9
  Alt 19. Dez 2010, 10:25
Ja, verwende ich...
Natürlich kann man die Funktion auch noch extrahieren und in das Programm einbinden..
Hallo,
ich finde ganz toll, daß du uns hier so viel
Quellcodes zur Verfügung stellst - und jeder
von uns weiß, daß es viele Möglichkeiten gibt,
ein Problem (bzw. eine Aufgabe) zu lösen.

So wie MultiKulti schätze ich auch MultiMakeIt
und versuche mich in den Lösungsansatz eines
netten Menschen hineinzulesen.

Für mich dazugelerntes übernehme ich und sage
dankeschön, aber GrundlagenDiskussionen über
Geschmacksfragen finde ich zwar wichtig aber
nicht zwingend.

Wir sind Arbeiter (Ing.'s) und keine Compilerbauer.
Gott habe ich die zwei Semester CompilerBau gehaßt!

Mein Dank allen, die hier keine Scheu haben,
ihre Lösungen anzubieten. Vielen Dank Leute.

MfG Manfred Zenns

PS: Manchmal muß man sich Dinge von der Seele reden dürfen.
Vielleicht nur ein Zeichen, daß ich alt werde
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz