Autor Beitrag
gijoe72
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 07.08.07 15:45 
Erstamal Hallo zusammen!

(Alles C#)
Ich möchte gerne eine Video Datei in die Exe mit Kombilieren und zur Laufzeit des Programms abspielen!
Jetzt habe ich die Video Datei in mein Projektordner gezogen und unter Eigenschaften (Buildaktion) Eingebettete Resource angegeben.
Wenn ich jetzt das Programm Kombiliere, sieht es so aus als hätte es die Video Datei mit integriert.
Den die Exe Datei ist einwenig größer als die Video Datei!

Mein Problem ist es jetzt: Ich möchte dieses Video Temp auf dem System Speichern und dann Abspielen.

Ich finde leider nicht den geringsten Ansatz wie ich das machen könnte.
Kann mir da bitte jeman helfen?

Gruß, Joachim


Moderiert von user profile iconChristian S.: Topic aus Freeware Projekte verschoben am Di 07.08.2007 um 17:02
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 07.08.07 16:09 
Hallo,

von Videos habe ich keine Ahnung. Suche einmal in der Doku nach GetResource. Vielleicht hilft Dir mein Code-Schnipsel, mit dem ich die Bitmap "folder" aus einer Resourcen-DLL hole:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private ResourceSet resourceFamFamFam;
ResourceManager resMan = new ResourceManager("JThomas.VSClient.Properties.FamFamFam"
                              typeof(FamFamFam).Assembly);
resourceFamFamFam = resMan.GetResourceSet(System.Windows.Forms.Application.CurrentCulture, 
                                     truetrue);
Bitmap value = (Bitmap)resourceFamFamFam.GetObject("folder"true);

FamFamFam ist eine eigene Klasse (im Namespace JThomas.VSClient.Properties), die alle FamFamFam-Icons enthält.

Ob Du auf die gleiche Weise einen Stream holen kannst, den Du dann temporär speichern und abspielen kannst, weiß ich allerdings nicht.

Gruß Jürgen

Nachtrag: Es gibt noch viele andere Wege, auf eingebettete Ressourcen zuzugreifen, z.B. den von Christian.


Zuletzt bearbeitet von JüTho am Di 07.08.07 17:58, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 07.08.07 17:08 
Mit Resourcen hab ich das letztens so gemacht:

(1) Im Solution Explorer im Projekt unter "Properties" Doppelklick auf "Resources.resx".
(2) In dem Resourceneditor gibt's ne Symbolleiste, da wählst Du beim ersten DropDown (steht wahrscheinlich noch "Strings") wählst Du "Files" aus.
(3) Dann unter "Add Resource" den Eintrag "Add existing file" wählen und Dein Video hinzufügen.
(4) Dem Teil noch einen anständigen Namen geben, z.B. "MyVideo"

Jetzt generiert Dir das Visual Studio eine Klasse, um ganz einfach auf alles zuzugreifen.

Wenn Du die Resource jetzt speichern willst, machst Du das so:
ausblenden C#-Quelltext
1:
2:
            using (StreamWriter sw = new StreamWriter(filename))
                sw.BaseStream.Write(ApplicationNamespace.Properties.Resources.MyVideo, 0, ApplicationNamespace.Properties.Resources.MyVideo.Length);


"ApplicationNamespace" ist dabei der Namespace, in dem z.B. auch Deine Form steckt.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 07.08.07 18:30 
Hört sich gut an!

Aber der bringt mir jedesmal die Fehlermeldung fehlender Assemblyverweis für Properties!

Ansonsten könte ich mir schon vorstellen das dies geht!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 07.08.07 18:31 
Ohne mehr Informationen kann man Dir da nicht so gut helfen.

Wichtig ist natürlich der Quellcode und die genaue Fehlermeldung und in welcher Zeile die erscheint.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 07.08.07 18:54 
Zitat:
F:\Visual Studio Projects\VideoPlayer\MDI.cs(1198): Der Typ oder Namespacename 'Properties' ist in der Klasse oder dem Namespace 'VideoPlayer' nicht vorhanden (fehlt ein Assemblyverweis?)


Und das ist das was ich eingegeben habe:
Wobei "Video.wmv" der Name der Datei ist, VideoPlayer der Namespace und MyVideo das was du mir gesagt hast unter Resouce einfügen.

ausblenden C#-Quelltext
1:
2:
using (StreamWriter sw = new StreamWriter("Video.wmv"))  
sw.BaseStream.Write(VideoPlayer.Properties.Resources.MyVideo, 0, VideoPlayer.Properties.Resources.MyVideo.Length);


Moderiert von user profile iconChristian S.: C#- und Quote-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 07.08.07 19:06 
Hm. Im Solution Explorer gibt es zur "resources.resx" einen Unterpunkt namens "Resources.Designer.cs". Poste doch mal bitte,was in der Datei drin steht.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 07.08.07 19:22 
Da is nix, ich glaube ich mach da irgend etwas von anfang an falsch!
Ich hab noch die C# Version 2003, vieleicht liegt es ja daran?

Ich gehe unter Projekt Explorer auf die rechte Maustaste Hinzufügen/Neues Element hinzufügen/Assebly Ressoursen Datei

Dann erstellt er mir eine Resource1.resx

Was mach ich da nur falsch?

Vorher hab ich natürlich noch die Videodatei in den Projekt Explorer unter C# gezogen.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 07.08.07 19:41 
user profile icongijoe72 hat folgendes geschrieben:
Ich hab noch die C# Version 2003, vieleicht liegt es ja daran?

Das ist in der Tat ein Problem, sodass solche Tipps nicht direkt helfen. Ab NET 2.0 gibt es partial class; alle Klassen mit einer zugeordneten Datei "Designer" nutzen dies.

Hast Du die Video-Datei in die Resource1.resx einbezogen? Wenn das erledigt ist, dann untersuche einmal (soweit vorhanden) Dateien, die sich darauf beziehen; dort könnte es einen Namespace mit "Properties" geben - dann kannst Du Dich an Christians Vorschlag orientieren.

Gruß Jürgen
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 07.08.07 19:54 
Wen ich die Resource1.resx doppelt anklicke kommt das was das Bild darstellt.

Und unter der Rechten Maustaste finde ich auch keinen Eintrag zum Hinzufügen einer Resoure(Videodatei).
Einloggen, um Attachments anzusehen!
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 08.08.07 03:04 
Ok, jetz hab ich entlich die Viedeo Resource in einem Stream.

Nicht FileStream,WriteStream und ReadStream. Einfach nur in einem Steam s

Jetzt muß ich nur noch rausfinden wie ich diesen Stream also sprich als Video auf der Festplatte Speichern kann!


Vielen vielen Dank für eure Hilfe!

Vieleicht könnt ihr mir da ja auch noch weiter helhen?

Gruß, Joachim


Ps: Wünsch euch ne gute Nacht!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 08.08.07 09:54 
Hallo,

gib doch bitte den Quellcode an, mit dem Du das Video aus den Ressourcen in einen Stream holst; dann können wir Deine Überlegungen nachvollziehen und Änderungen vorschlagen. Vielleicht genügt einfach ein Casting:
ausblenden C#-Quelltext
1:
FileStream stream = (FileStream)GetResource...					

Zur Not kannst Du auf jeden Fall Deinen einfachen Stream in einen FileStream kopieren und diesen mit Flush und Dispose speichern. Aber ich nehme an, dass dieser Umweg vermieden werden kann.

Gruß Jürgen
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 08.08.07 11:47 
Guten Morgen!

Das ist der Quellcode:
ausblenden C#-Quelltext
1:
Stream str = (this.GetType().Assembly.GetManifestResourceStream("VideoPlayer.Video.wmv"));					


Hab es schon versucht mit
ausblenden C#-Quelltext
1:
2:
FieleStream fs = new FileStrem(@"c:\Video.wmv", FileMode.Create,  FileAccess.Write);
fs = str (FileStream) fs;


und so hab ich es auch versucht:
ausblenden C#-Quelltext
1:
FileStream fs = (FileStream) (this.GetType().Assembly.GetManifestResourceStream("Bewerbung1.Foto_Joachim.jpg"));					


Fehlermeldung:

Die angegebene Umwandlung ist ungültig!
ausblenden C#-Quelltext
1:
FileStream fs = (Reflection.FileStrem) (this.GetType().Assembly.GetFile("Bewerbung1.Foto_Joachim.jpg"));					


Geht nicht weil GetFiele() eine Reflegtion FileStrem übergibt und FileStream ein IO FileStrem ist!

Aber das geht nicht!

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 08.08.07 13:06 
Ich habe zwar nur die "Standarderfahrungen" mit Ressourcen; mir kommt es aber so vor, dass Deine Referenzen den Compiler durcheinander bringen. Es sieht so aus, als ob in den using-Direktiven sowohl System.IO als auch System.Reflection hast; dadurch weiß der Compiler nicht, welcher FileStream gemeint ist.

Ich wollte nun folgendes Verfahren vorschlagen:
ausblenden C#-Quelltext
1:
2:
3:
4:
//  gewünschte Assembly bereitstellen
Assembly asm = Assembly.GetAssembly(this.GetType());
//  hole daraus den Stream
System.IO.FileStream fs = (System.IO.FileStream)asm.GetManifestResourceStream("VideoPlayer.Video.wmv"));

Ich habe aber festgestellt, dass fs nachträglich keinen Dateinamen/Pfad erhalten kann. Deshalb musst Du vermutlich den von mir schon vorgeschlagenen Umweg gehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//  gewünschte Assembly bereitstellen
Assembly asm = Assembly.GetAssembly(this.GetType());
//  hole daraus den Stream
System.IO.Stream str = (System.IO.Stream)asm.GetManifestResourceStream("VideoPlayer.Video.wmv"));
//  erzeuge den FileStream
using(System.IO.FileStream 
            fs = new System.IO.FileStream(fileName, FileMode.Create))
{   //  alle Bytes aus str in fs kopieren; das musst Du selbst heraussuchen
    fs.Flush();
}

Viel Erfolg! Jürgen

PS. Bitte gewöhne Dir an, Quelltext selbst zu formatieren, damit das nicht immer Christian erledigen muss: über der Textbox den Button "Bereiche" anklicken, dann in der Textbox den Quellcode markieren und hinter "C#" auf das Plus-Zeichen klicken. Das macht die Anzeige lesbarer; und Du selbst hast die Vollmacht über die Darstellung.
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 08.08.07 15:39 
So einfach kann es gehen!

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
          //Assembly erzeugen
          Assembly asb = Assembly.GetAssembly(this.GetType());   
          //Resource aus der Anwendung in den Stream laden
          Stream str = (System.IO.Stream)asb.GetManifestResourceStream("VideoPlayer.Video.wmv");  
          //FieleStream erzeugen
          using(System.IO.FileStream   
                fs = new System.IO.FileStream(@"c:\Video.wmv", FileMode.Create))  
          {   
            //ByteArray für das Lesen und schreiben erzeugen
            byte[] byteArray = new byte[str.Length];
            //ByteArray aus Stream füllen
            str.Read(byteArray, 0, byteArray.Length);
            //ByteArray mit FileStrem in Datei schreiben
            fs.Write(byteArray,0,byteArray.Length); 
            fs.Flush();
          }


Dank eurer hilfe und 2 zwei Tage Nervenstress hab ich es entlich geschaft.

Jetzt sollte der Pfad anstatt c:\ nur noch ein Temp. Pfad sein und dann ist die Welt wieder rund.


Nochmals vielen Dank!

Gruß, Joachim
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 08.08.07 17:42 
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 08.08.07 17:50 
Jo, Danke!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 08.08.07 18:19 
@Joachim: Es wäre Deine Aufgabe, diese Threads mit einander zu verlinken und zu sagen, wenn Du bereits eine Antwort bekommen hast! Es ist sehr unhöflich, die Leute hier Zeit investieren zu lassen, wenn es gar nicht mehr nötig ist. :mahn:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
gijoe72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 09.08.07 19:30 
@Christian S.!

Ich habe doch die Lösung hier reingestellt!

Meinst du einfach nur den Link von myCSharp als Antwort hier einfügen?

In etwar so:

www.mycsharp.de/wbb2...80&hilight=Video

Wenn ja, dann werde ich das in Zukunft so machen!


Gruß, Joachim