Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von CaptainIglo
Thema: Empfangsfunktion beschleunigen
Am im Forum: Netzwerktechnologien

Ich muss das aber irgendie "geteilt" senden, da ich auch unterm senden z.B. die Position im File ändern muss...

Thema: Problem mit TcpListner und TcpClient ...
Am im Forum: Netzwerktechnologien

Zitat
Original von thejudge
dann haste aber im client nen tcplistener und tcpclient laufen.

Nein, im Server .

Aber das ist nur für das Anmelden neuer Clients und beeinflusst die Performance nicht oder nicht spürbar.
Denn wähernd dem Pending schäft der Thread ja und braucht eigentlich gar keine Systemleistung.
Meine TCP-Kommunikation ist aufjedenfall schneller als die Routine, welche die Pakete zerlegt und analysiert...

Thema: Problem mit TcpListner und TcpClient ...
Am im Forum: Netzwerktechnologien

Das kannst du schon mit TCPClient machen.

Du musst dir hald ein "Kommunikationsprotokoll" überlegen, dass der Server z.B. wenn er "1111" o.ä. empfängt dir alle Clients zurückschickt und z.B. bei "2222#4#Message" die Message an Client 4 schickt.

So in der Art kommuniziere ich zw. Client und Server und das funktioniert ganz gut...

Thema: Empfangsfunktion beschleunigen
Am im Forum: Netzwerktechnologien

Hi,

ich habe hier eine TCP-Verbindung bei welcher ich Pakete empfange, die mit "%@%" abgeschlossen werden.
Momentan lese ich diese mit folgeder Funktion ein:

            for (i = 0; i < data.Length; i++)
            {
                byte[] tmp = new byte[1];
                client.Client.Receive(tmp, 1, SocketFlags.None);

                if (System.Text.Encoding.ASCII.GetString(tmp) == "%")
                {
                    if (j == 0 || j == 2)
                        j++;

                    if (j == 3)
                        break;
                }
                else if (System.Text.Encoding.ASCII.GetString(tmp) == "@")
                {
                    if (j == 1)
                        j++;
                }
                else
                {
                    j = 0;
                    data[i] = tmp[0];
                }
            }

Wenn ich jetzt aber ein größeres File in mehreren Paketen schicke, kommen ca. alle 25-50ms ein Paket mit ~10kB an und das Auslesen mit der Schleife dauert dann auch etwa diese 25ms und ich habe deshalb 100% CPU-Last.

Kann ich das irgendwie optimierne, das das schneller geht?

mfg
Capt.Iglo

Thema: FullDuplex oder 2. Verbindung bei TCP-Verbindung
Am im Forum: Netzwerktechnologien

Habe das Problem gelöst.
Es lag nicht an einem Fehlenden Full-Duplex, sonder war ein schwer zu findender Fehler in meiner Funktionsabfolge (Receive() wurde erst nach abschluss der erwähnten Send() wieder aufgerufen)...

Thema: FullDuplex oder 2. Verbindung bei TCP-Verbindung
Am im Forum: Netzwerktechnologien

Hallo,

ich habe in meine Projekt eine TCP-Verbindung mittels TCPListener und TCPClient.
Diese funktioniert auch ganz gut, aber wenn ich größere Dateien sende wird daweil der Empfang nicht verarbeitet.
D.h. ich habe einen Thread der laufend mit TCPClient.Client.Receive() am emfangen ist, aber wenn ich gerade eine Größere Datei mittels TCPClient.Client.Send() sende bekomme ich nichts aus der Receive()-Funktion raus.
Empfangen wird es aber schon, denn sobald das Senden fertig ist, wird das schon vorher Empfangene verarbeitet.
Ich dachte mir dann, dass ich einfach eine 2. Verbindung zum senden der großen Datei verwende, doch wenn ich den TCPListener für die 2. Verbindung (auf einem anderen Port als der 1.) starte, bekomme ich die Exception "Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.".

Wie kann ich mein Problem lösen, das ich auch während dem Senden empfangen kann?
Ob nun mit einer 2. Verbindung oder ein Full-Duplex-Modus für 1. erste Verbindung ist mir egal, ich muss nur unbedingt auch empfangen können, während ich sende.

mfg
CaptainIglo

Thema: Dvb-t
Am im Forum: Grafik und Sound

Hi,

ich habe eine TechniSAT SkyStar 2 und bei mir geht die Demoanwendung auch nicht. DVBViewerTE + BDA-Treiber geht, die Karte ist als BDA-Device im Gerätemanager aber wenn ich bei DTV Viewer einen Sender einstellen will, kommt folgende Exception.
Was kann ich dagegen tun?

mfg
Capt.Iglo

Thema: Datei lesen, die ständig beschrieben wird
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Original von Borg
Aber wenn du doch selbst in die Datei schreibst, kannst du die zu schreibenden Daten doch einfach weiterleiten...

Eben nicht, da die Klasse, welche die Daten weiterverarbeitet eine Datei haben will (kommt nicht von mir, die Klasse)...

Thema: Datei lesen, die ständig beschrieben wird
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe gerade das selbe Problem.
Ich muss aus einer Datei lesen, in die zur gleichen Zeit auch geschrieben wird.
Gelesen wird dabei immer an einer Stelle, wo schon "lange" geschrieben wurde, also müsste es theoretisch funktionieren.

Ich bekomme allerdings bei FileShare.xxx immer eine Zugriff-Verweigert-Exception und wenn ich über den gleichen Stream (mit FileOptions.WriteThrough) lese und schreibe, wird nichts gelesen...

Kann mir da jemand helfen, denn kopieren und dann lesen geht bie mir nicht, da das zu langsam bzw. zu "Anstrengung" für die HDD ist?

Thema: Video Streaming mit c# realisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Original von dr4g0n76
Meine benötigen keinen...

Und die wären?

Thema: Video Streaming mit c# realisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Meine Abspielklassen/-funktionen wollen alle einen string mit einem Filename haben...

Thema: Video Streaming mit c# realisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich glaube ihr habt mein aktuelles Problem noch nicht verstanden (oder ich habs noch nicht klar ausgedrückt):
Ich habe kein Problem mit dem Senden oder Empfangen (kann in allen Variationen Senden/Empfangen, wie z.B. Stream oder byte[]) aber ich kann es NICHT ABSPIELEN.
Alle Abspielvareanten die ich habe, wollen eine Datei als Quelle und ich habe aber nur ein byte[], Stream o.ä. und wenn ich diese Daten in eine Datei schreibe, kann ich diese zwar abspielen, aber nicht gleichzeitig schreiben (Zugriffsverweigerung), was ich aber müsste, da ja gleichzeitig empfangen und abgespielt wird.
Ich suche also eine Möglichkeit ein byte[] oder Stream mit Videodaten abzuspielen.
Bei den Audiodaten habe ich es z.B. mit byte[] + BASS.net gelöst, was TipTop funktioniert.

P.S.: Ein Kommunikationsprotokoll zwischen Server und Client, wo alles "ausgemacht" wird habe ich bereits (größtenteils) erstellt und funktioniert auch in den Teilen, wo es schon implementiert ist.

Thema: Video Streaming mit c# realisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

1. Zurückspulen o.ä. erledigt der Server also kein Problem.
2. Wenn ich dem Client den vollen Filestream übergeben könnte, müsste auch dass funktionieren.
3. Wieso Remoting, ist doch viel langsamer als TCP/UDP.
4. Mein Problem ist nicht das übertragen des Streams sondern das Abspielen.

Thema: Video Streaming mit c# realisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Sehe ich das richtig, dass ihr das Video in Einzelbilder zerlegen würdet und diese sendet?

Ich hätte mir gedacht, das ich das VideoFile in ein (Netzwerk)Stream lade und der Client diesen abspielt.
Empfangen kann das mein Client schon, aber ich bekomme in nicht zum abspielen, da ich keine Klasse habe, welche Video aus einem Stream abspielt oder wenn ich den Stream in eine tmp-Datei schreibe, kann ich wärend dem schreiben nicht schon abspielen...

Thema: Video aus Stream oder byte[] abspielen
Am im Forum: Grafik und Sound

Nein, nicht wirklich, da wie in allen Beispielen die ich gefunden habe nur Files abgespielt werden...

Thema: Video aus Stream oder byte[] abspielen
Am im Forum: Grafik und Sound

Hi,

ich habe hier eine Server/Client-Applikation die miteinander kommunizieren und der Server schickt Streams oder byte[] mit Multimediadaten welche ich abspielen sollte.
Bei Music habe ich es über ein byte[]-Array und BASS.net gelöst, was auch TipTop funktioniert, aber wie kann ich dass mit Videos lösen?

mfg
CaptainIglo

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Original von Borg
Wenn dich der Speicherverbrauch so stört, warum nutzt du dann nicht das gleiche Array mehrmals?

Tu ich ja, aber ich initialisiere es jedesmal neu, da ich immer eine etwas andere Größe brauche...

Thema: Audio/Video streamen mit C#?
Am im Forum: Web-Technologien

Zitat
Original von Rainbird
Vielleicht hilft Dir das hier weiter:

http://blogs.msdn.com/drnick/archive/2006/03/31/565558.aspx

Nicht wirklich, da ich noch nichts mit WCF gemacht habe und mir das Vidoe nicht wirklich einen Einstieg bot...

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dann bleib ich eim GC.

@anderer Algorithums:
Hier nicht möglich, da ich die Daten in dieser Form in einem byte[] benötige, um sie weiterzuverarbeiten.
Um genau zu sein, sind es Musikdateien welche "gestreamt" werden, d.h. die Netzwerkklasse schreibt die erhaltenen Daten in das byte[] und die Soundklasse beginnt daweil schon das byte[] abzuspielen...

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mit "nichtsahnender User" meine ich keine DAU's sondern, solche wo den Ramverbrauch beobachten, aber nicht wissen, das die 100MB freigegeben werden, wenn sie benötigt werden und mit der "Auslagerungslust" von Windows ist das sicher auch nicht gut gepaart...

Thema: Audio/Video streamen mit C#?
Am im Forum: Web-Technologien

Habe mir nun das Video angeschaut, aber Videostreaming wird da nicht gezeigt.
Nur mal kurz erwähnt, dass WCF auch streamen könnte...

Hat jemand eine andere Möglichkeit (oder ein Bsp für WCF) für Streaming?

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es sieht für den nichtsahnenden User eben nicht schön aus, wenn ein kleines Programm, was "fast nix" tut >100MB RAM verbraucht...

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja, aber mein Programm schaufelt sich schön langsam immer mehr RAM zu, obwohl es ihn nicht braucht.
Brauchen tut es ~20MB, wenn ich es aber ~1h ohne das GC.Collect() laufen lasse, hat es lt. TaskManager ~100MB...

Thema: byte[]-Array aus dem Speicher löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich habe ein byte[]-Array, welches sehr groß ist (3-10MB) und mehrmals neu (mit etwas anderer Größe) instanziert wird, aber der benötigte Speicher, von der alten Instanzierung wird nicht freigegeben.
Wenn ich vor der neuen Instanzierung ein "byte[]" = null und GC.Collect() aufrufe, wird der Speicher freigegeben, aber ich habe gelesen, man sollte GC.Collect() möglichst nicht einsetzen.
Was gibt es noch für Möglichkeiten den Speicher freizugeben?

mfg
CaptainIglo

Thema: Verzerrungen bei mehrmaliger Soundwiedergabe aus byte[] buffer mit BASS.net
Am im Forum: Grafik und Sound

Problem gelöst!
Fehler war in einer anderen Funktion und der FillQueue-Thread lief mehrmals parallel...

Thema: Verzerrungen bei mehrmaliger Soundwiedergabe aus byte[] buffer mit BASS.net
Am im Forum: Grafik und Sound

Hi,

ich verwende momentan BASS.net 2.3 zur Soundwiedergabe und bekomme von einer 2. Klasse ein byte[]-Array übergeben, in welchem die Musik liegt.
Aus diesem Array erstelle ich dan einen BASS_Stream welcher auch problemlos abspielt (ich kann soger das Array erst zu ende füllen, wenn schon abgespielt wird, solange die Daten an der aktuellen Position schon vorhanden sind).
Wenn ich aber ein neues Lied lade (oder auch das selbe nochmals) kommt es beim Abspielen zu sehr merkwürdingen Verzerrungen und ganzen Aussetzern. Dies passiert manchmal aber auch erst nach einem 3. oder 4. Neustart der Abspielroutine.
Weiß jemand was ich dagegen tun kann, oder auch eine andere Sound-Library welcher ich ein byte[]-Array übergeben kann, wo MP3/WAV/WMA-Daten gespeichert sind und diese auch abspielt, wenn das Array noch nicht "voll" ist (Daten kommen erst per Networkstream an)?

Hier meine Routinen:

Die File-Load-Routine:

        private void btnLoad_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Stop();
                Bass.BASS_PluginFree(0);
                Bass.BASS_Stop();
                Bass.BASS_Free();
                Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, 0, null);

                fillQueue = new Thread(new ThreadStart(FillQueue));
                fillQueue.Start();

                while (bytesRead < size)
                    Thread.Sleep(10);

                Play();
            }            
        }

Der Thread, der das Array füllt (Simulation des Networkstreams):

private void FillQueue()
        {
            Stream inp = File.OpenRead(openFileDialog1.FileName);
            bytesRead = 0;
            buffer = new byte[inp.Length];
            inp.Seek(0, SeekOrigin.Begin);
            while (inp.ReadByte() != -1)
            {
                inp.Seek(-1, SeekOrigin.Current);
                buffer[bytesRead] = Convert.ToByte(inp.ReadByte());
                bytesRead++;
                if (bytesRead > size && bytesRead % 100 == 0)
                {
                    Thread.Sleep(1);
                }
            }

            inp.Close();
        }

Die Abspielroutine:

        private void Play()
        {
            if (stream == 0)
            {
                stream = Bass.BASS_StreamCreateFile(buffer, 0, buffer.Length, BASSStream.BASS_DEFAULT);

                length = (int)(Bass.BASS_ChannelGetLength(stream) / 1000);

                trackBarPos.Maximum = length;
                trackBarPos.Value = 0;
            }

            if (stream != 0 && Bass.BASS_ChannelPlay(stream, false))
            {
                //playing...
                timerUpdate.Start();
                playing = true;
            }
            else
            {
                MessageBox.Show(this, "Error: " + Enum.GetName(typeof(BASSErrorCode), Bass.BASS_ErrorGetCode()));
            }
        }

Thema: Bitmap per Remoting übertragen?
Am im Forum: Netzwerktechnologien

Hast du da vielleicht ein paar Beispiele?
Muss der MeidaPlayer installiert sein, wenn ich das Streaming über diesen mache, denn dass möchte ich vermeiden?

Für das normale Videostreaming würde das gehen, ich muss aber auch das Bild bzw. den Ton einer TV-Karte übertragen und die Klasse, die ich gefunden habe um mir das TV-Bild auszugeben will ein Panel übergeben haben, in welche sie dann das Bild "malt".
Da dachte ich, dass ich einfach per Remoting das Panel im Remoteobject übergeben kann und das dann das Bild in der anderen Anwendung ausgegeben wird.

Thema: Bitmap per Remoting übertragen?
Am im Forum: Netzwerktechnologien

Das Problem ist nicht die Übertragungszeit sondern die gesamte Zeit die zum senden des Bildes benötigt wird und die wird durch eine zusätliche komprimierung sicher nicht schneller.
Die <40ms brauche ich, da ich mind. 25fps übertragen muss (Video).
Falls da jemand eine bessere Lösung hat, nehme ich diese auch gerne an...

Thema: Bitmap per Remoting übertragen?
Am im Forum: Netzwerktechnologien

Zitat
Original von Ifoko
Probier mal

panel.BackGroundImage = (Image)(new Bitmap("xxx.jpg"));

Selbe Exception...

Thema: Bitmap per Remoting übertragen?
Am im Forum: Netzwerktechnologien

Nein, ist nichts abgeleitetes o.ä.
Die Exception kommt z.B. wenn ich bei meinem Panel, welches im Remote-Object liegt panel.BackGroundImage = new Bitmap("xxx.jpg"); ausführe, aber alle "normalen Properties" wie z.B. BackColor oder Size kann ich ändern und das Panel in der anderen Anwendung ändert sich auch entsprechent.
Auch wenn ich aus dem Bitmap ein byte[]-Array mache, das in den panel.Tag lege und es in der anderen Anwendung wieder rauslese, zurückwandle und dann als BackGroundImage setzte geht es.