Autor |
Beitrag |
gijoe72
Beiträge: 16
|
Verfasst: 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 Christian S.: Topic aus Freeware Projekte verschoben am Di 07.08.2007 um 17:02
|
|
JüTho
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
|
Verfasst: 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:
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, true, true); 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.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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:
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
Beiträge: 16
|
Verfasst: 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.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
Beiträge: 16
|
Verfasst: 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.
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 Christian S.: C#- und Quote-Tags hinzugefügt
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
Beiträge: 16
|
Verfasst: 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
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
|
Verfasst: Di 07.08.07 19:41
gijoe72 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
Beiträge: 16
|
Verfasst: 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
Beiträge: 16
|
Verfasst: 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
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
|
Verfasst: 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:
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
Beiträge: 16
|
Verfasst: Mi 08.08.07 11:47
Guten Morgen!
Das ist der Quellcode:
C#-Quelltext 1:
| Stream str = (this.GetType().Assembly.GetManifestResourceStream("VideoPlayer.Video.wmv")); |
Hab es schon versucht mit
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:
C#-Quelltext 1:
| FileStream fs = (FileStream) (this.GetType().Assembly.GetManifestResourceStream("Bewerbung1.Foto_Joachim.jpg")); |
Fehlermeldung:
Die angegebene Umwandlung ist ungültig!
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 Christian S.: C#-Tags hinzugefügt
|
|
JüTho
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
|
Verfasst: 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:
C#-Quelltext 1: 2: 3: 4:
| Assembly asm = Assembly.GetAssembly(this.GetType()); 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:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Assembly asm = Assembly.GetAssembly(this.GetType()); System.IO.Stream str = (System.IO.Stream)asm.GetManifestResourceStream("VideoPlayer.Video.wmv")); using(System.IO.FileStream fs = new System.IO.FileStream(fileName, FileMode.Create)) { 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
Beiträge: 16
|
Verfasst: Mi 08.08.07 15:39
So einfach kann es gehen!
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Assembly asb = Assembly.GetAssembly(this.GetType()); Stream str = (System.IO.Stream)asb.GetManifestResourceStream("VideoPlayer.Video.wmv"); using(System.IO.FileStream fs = new System.IO.FileStream(@"c:\Video.wmv", FileMode.Create)) { byte[] byteArray = new byte[str.Length]; str.Read(byteArray, 0, byteArray.Length); 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
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
|
Verfasst: Mi 08.08.07 17:42
|
|
gijoe72
Beiträge: 16
|
Verfasst: Mi 08.08.07 17:50
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
gijoe72
Beiträge: 16
|
Verfasst: 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
|
|