DirectShow MediaPlayer 1.1

    • Release
    • Open Source

    Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

      DirectShow MediaPlayer 1.1

      Beschreibung:
      DirectSchow MediaPlayer ist ein leistungsstarker Mediaplayer auf Basis von DirectShow.NET. Dank DirectShow ist der Player Threadsicher und in der Lage alle auf dem System installierten Codecs für die Wiedergabe zu verwenden. Dabei kapselt die Klasse alle aufwändigen Interopaufrufe und COM-Interfaces auf eine leicht zu bedienende Art und Weise.

      Klassendiagramm:


      Programmbeispiel:

      VB.NET-Quellcode

      1. Imports DirectShow
      2. Public Class Form1
      3. Private WithEvents player As MediaPlayer
      4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      5. player.play()
      6. End Sub
      7. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      8. player.pause()
      9. End Sub
      10. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      11. player.stop()
      12. End Sub
      13. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
      14. player.stop()
      15. End Sub
      16. Private Sub Form1_HandleCreated(sender As Object, e As EventArgs) Handles Me.HandleCreated
      17. player = New MediaPlayer
      18. player.handle = Panel1.Handle
      19. End Sub
      20. Private Sub Panel1_Resize(sender As Object, e As EventArgs) Handles Panel1.Resize
      21. If player IsNot Nothing Then player.resize(Panel1.ClientRectangle)
      22. End Sub
      23. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
      24. Dim ofd As New OpenFileDialog
      25. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
      26. player.mediaFile = ofd.FileName
      27. End If
      28. End Sub
      29. Private Sub player_started(sender As Object, e As EventArgs) Handles player.started
      30. player.resize(Panel1.ClientRectangle)
      31. End Sub
      32. End Class


      Verwendete Programmiersprache und IDE:
      Visual Basic .NET (IDE: VS 2012 Ultimate)

      Systemanforderungen:
      .NET Framework 4.0
      DirectShow.NET (liegt dem Download bei)

      Changelog:

      Version 1.1
      - Eigenschaft "Length": geändert in TimeSpan
      - Eigenschaft "Position": geändert in TimeSpan
      - eingestellte Geschwindigkeit bleibt jetzt nach Stop erhalten
      - Event "PositionChanged" hinzugefügt
      - Fehler bei der Wiedergabe von audio-only gefixt
      - Fehler in der "HasVideo"-Eigenschaft gefixt
      - seltenen RCW Fehler bei Wiedergabeende (hoffentlich) gefixt
      - Beispielanwendung hinzugefügt

      Download:
      DirectShowPlayer.zip (132 kB)
      DirectShowPlayer_Project.zip (739 kB)

      Lizenz/Weitergabe:
      Opensource

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Artentus“ ()

      Find ich gut. Ich nehme an es wird Video und Audio unterstützt(bin mir nicht ganz sicher wegen der GetCurrentImage-Methode). Was auch noch interessant wäre, wäre das Ganze WPF-Kompatibel zu machen. Dort gibt es keine Handles. Gibt es also vll. trotzdem eine Möglichkeit dies über WPF zu verwenden?
      Leider muss man auch sagen, dass an solchen Multimediabibliotheken leider nicht wirklich viel Interesse besteht(siehe Signatur). Das ist aber nicht weiter tragisch -> mir gefällt. Aber besser fänd ichs noch wenns nur eine Dll wäre. Aber naja Cominterfaces importieren ist nicht immer ein Spaß von dem her passt schon :thumbsup:


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      Ja, es sowohl Video als auch Audio möglich. Bei einem Audiofile gibt die Methode Nothing zurück. Siehe auch die Eigenschaft HasVideo.

      Edit:
      Ich hab mich mal zu WPF schlau gemacht. Mit dieser Methode kommst du an das Handle deines Fensters. Anders als über ein Handle kann man es bei DirectShow leider nicht machen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

      Du kannst über die Resize-Methode eine beliebige Region des Fensters zur Wiedergabe auswählen. Ist zwar nicht die schönste Art aber es sollte funktionieren und was anderes fällt mir auch nicht ein.

      Edit:
      Doch noch was gefunden: HwndHost

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

      Gibts nen Grund, dass du Englisch schreibst? Du scheinst doch Deutsch zu können.

      Ich fürchte aber, es gibt zumindest bei DirectShow keine Möglichkeit, jeden Frame ein Event zu feuern, da DirectShow selbst schon keine solchen Informationen zur Verfügung stellt. Ich könnte natürlich die Framerate auslesen und dann selbst im Intervall was auslösen, das wäre aber vermutlich viel zu ungenau.
      DirectShow ist nunmal eine veraltete API, mit MediaFoundation und DirectX11 kommst du vermutlich weiter.
      Ach was. Das hier sollte doch eig. genau das sein was du brauchst: msdn.microsoft.com/en-us/libra…op/dd376992(v=vs.85).aspx


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.