Video aus Resource abspielen

mgheinz1001

Grünschnabel
Hallo,

ich möchte eine Art Video-Player mittels VB.NET programmieren, der nach Start eine avi-Video-Datei abspielt. Diese avi-Datei soll aus den Resourcen des Programms geladen werden. Wichtig dabei ist, dass die Datei nicht auf der Festplatte gespeichert wird (weder vor, während oder nach dem Abspielen). Ich habe bereits versucht das Problem mittels eines Streams und dem MS TV Video Control (AxMSVidCtlLib.AxMSVidCtl) zu lösen - leider ohne Erfolg. Nachfolgend mein Code.

Code:
Private Sub frmVideoPlayer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim objResourceStream As Stream = System.Reflection.Assembly.GetExecutingAssembly(). _
                                            GetManifestResourceStream("MyProject.MyVideo.avi")

        Dim objStreamReader As StreamReader = New StreamReader(objResourceStream, System.Text.Encoding.Default)
        m_ctrlMoviPlayer.View(objStreamReader.ReadToEnd)
End Sub

Private Sub m_ctrlBtnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        m_ctrlMoviPlayer.Run()  ' HIER KOMMT ES ZUM FEHLER: "Die angeforderte Datei kann nicht wiedergegeben werden."
End Sub

Hat vielleicht jemand eine Idee oder kennt einen anderen Lösungsweg? Bin für jede Hilfe dankbar!
 
Sers,
geht das überhaupt eine Datei abzuspielen ohne diese auf dem Rechner zu speichern?
Selbst bei youtube oder ähnlichem wird doch die Datei temporär auf dem Rechner gespeichert.
Grüße Nico
 
Das weiß ich leider auch nicht genau. Aus anderen Quellen kann ich zumindest schon mal sagen, dass es bei exe-Dateien aus den Resourcen nicht funktioniert. Die muss man vorher auch auf der Festplatte zwischenspeichern.
Falls aber trotzdem jemand noch eine Idee hat, wie ich mir das Zwischenspeichern auf der Platte bei Videos sparen kann, wäre ich sehr dankbar. Vielleicht geht es ja auch irgendwie die Datei in einem temporären Objekt zwischenzuspeichern.
 
Also ich kenne auch nur die Lösung, dass man die Datei irgendwo zwischenspeichert.
Was wäre denn so schlimm daran? Man kann die Datei ganz gut in einem temp-Ordner speichern (muss nicht mal die richtige Endung haben) und danach wieder löschen.
Nichtsdestotrotz...
Ich meine mich vage zu erinnern dass es mit C# (VB kenn ich nicht wirklich aber sollte dort auch irgendwie möglich sein) möglich ist, einen anonymen Speicher einer bestimmten Größe zu allokieren (Stichwort dynamic memory allocation), dort könntest du die Daten reinkopieren und versuchen ob du es so irgendwie zum laufen kriegst. Dann hättest du keine Datei auf der Festplatte sondern nur im Speicher. Aber da muss man achtgeben, weil dieser Speicher nicht vom GC automatisch gelöscht wird.
Allgemein finde ich diese Lösung (sofern sie überhaupt funktioniert, keine Garantie!) recht dirty und umständlich. Sieht man auch daran, dass eben die meisten professionellen Programme die temp-Datei Lösung verwenden.
Gruß
Ringelsocke
 
  • Warum verwendest du einen TextReader? StreamReader implementiert TextReader:
    Verwenden Sie diese abgeleiteten Klassen, um eine Textdatei [...] zu öffnen [...]
  • Theoretisch gesehen ist es definitiv möglich ein Video aus einer Resource abzuspielen, ohne sie als einzelne Datei auf der Festplatte zwischenzuspeichern. Praktisch habe ich kein brauchbares Tutorial dazu im Netz gefunden.
  • Hast du mal nachgeschaut was die Fehlermeldung genau bedeutet? Vielleicht ist lediglich das Videoformat falsch (avi nicht unterstützt?)
 
Zuletzt bearbeitet:
Zurück