T
tuxedo
Gast
Hallo zusammen,
Ich muss eine "Art" Voip/Skype/Teamspeak-Lösung basteln:
Das ganze soll eine Client-Server-Anwendung sein: Der Server wartet auf Verbindungen von Clients. Der Server soll sowas wie Channels ermöglichen. In Teamspeak kann ein Client immer nur in einen Channel joinen. Hier soll ein Client aber in mehrere Channels gleichzeitig können (zumindest reinhören, ist noch nicht sicher ob er auch in allen gleichzeitig sprechen können muss/soll).
Die Sprachverbindung soll mit diversen Codecs komprimiert werden. Ist aber ne andere Geschichte...
Ich überlege jetzt schon die ganze Zeit was wohl besser ist:
1te Variante)
Alle Clients bauen eine Verbindeung mit dem Server auf und senden diesem ireh Sprachstreams (bei 100 verbundenen Clients gehen beim Server 100 Sprachstreams ein). Der Server dekodiert die estmal (sind ja mit diversen Codecs komprimiert). Dann werden die Streams, je nach Channelzuteilung zusammengemischt (clients können gleichzeitig sprechen um z.B. den Gesprächspartner ggf. zu unterbrechen), wieder komprimiert und an die jeweils teilnehmenden Clients wieder ausgeliefert.
Ich seh darin nur folgendes Problem:
Der Server hat die ganze Arbeit: Er muss _alle_ Streams die er bekommen dekodieren, entsprechend mischen und wieder ausliefern. D.h. der meiste Traffik und die meiste Arbeit fällt beim Server an.
(Im komprimierten Zustand mischen geht nur dann wenn das pro Codec implementiert wird. Ist wohl extrem aufwendig und auch Codec-Abhängig. Ich denke in den allermeisten Fällen/Codecs wird man nicht drum rum kommen den Stream zu dekodieren bevor man ihn als PCM-Stream mischt und wieder komprimiert.)
2te Variante)
Der Server führt nur Buch darüber wer mit wem in welchem Channel spricht. Die Clients senden sich untereinander die Streams. D.h. jeder Client weiß die Adresse der anderen Clients im Channel und sendet an diese seinen Sprachstream:
Sind Beispielsweise 10 Leute in einem Channel und einer davon spricht, so muss dieser eine seinen Sprachstream an 9 Leute verteilen. Damit fällt die 9-fache Bandbreite des Sprachstreams an. Gehen wir von 5kbyte aus (und das ist wohl schon optimistisch gedacht), dann haben wir 9*5kbyte=45kbyte Upstream beim Sprecher. DSL3000 wäre damit schon überfordert.
Das ganze hätte jedoch den Vorteil dass der Server extrem viele Teilnehmer verkraftet da er selbst ja nur als Benutzerverzeichnis fungiert. Die Arbeit liegt dann verteilt auf den Clients.
Ergänzung/Notiz)
Wer Teamspeak schon mal benutzt hat weiß sicher wovon ich rede: Wenn in einem Channel 3 und mehr Leute gleichzeitig sprechen versteht man gar nix mehr. Man könnte sich also durchaus Bandbreite sparen wenn nur dann Traffgik anfällt wenn jemand spricht. Jedoch kommt dann ein neues Problem auf: Der Stream wird, wenn das eingestellt Level am Mikrofon nicht entsprechend überschritten wird, unterbrochen. D.h. die Gegenseite die den Stream empfängt kann da auch nichts mehr dekodieren. D.h. die dekodierung müsste ebenfalls unterbrochen werden. Hier hab ich aber noch nix getestet und mir noch nix überlegt. Wenn jemand hierzu ne Idee her: Als her damit
----
Leider weiß ich noch nichts über die Netzwerkanforderungen und ob die Sache im lokalen Netzwerk oder übers Internet laufen soll und welche Bandbreite zur Verfügung steht, bzw. welche mind. zur vergugung stehen sollte.
Ich weiß nur dass Teamspeak serverseitig die Streams mischt (1te Variante).
Wie Skype das macht weiß ich nicht genau. Ich weiß nur dass hier eine P2P Technik benutzt wird und so die Netzwerklast verteilt wird. Für ein 1-to-1 Gespräch fallen hier etwa 6kbyte/sek an. Wie das bei Konferenzen mit mehreren Teilnehmern ist weiß ich nicht (kann ich auch nicht testen, hab noch zu wenig Leute in Skype die gleichzeitig online sind).
Nun, was will ich jetzt von euch? Hmm. Gute Frage. Ich wollte hier nur mal ne Gesprächsrunde anzetteln wie man sowas am besten angeht. Vielleicht hat der eine oder andere ja noch einen brillianten Einfall oder Tipp, etc...
Hoffe dass sich hier der eine oder andere aufhält der hier gerne mitdiskutiert.
Gruß
Alex
Ich muss eine "Art" Voip/Skype/Teamspeak-Lösung basteln:
Das ganze soll eine Client-Server-Anwendung sein: Der Server wartet auf Verbindungen von Clients. Der Server soll sowas wie Channels ermöglichen. In Teamspeak kann ein Client immer nur in einen Channel joinen. Hier soll ein Client aber in mehrere Channels gleichzeitig können (zumindest reinhören, ist noch nicht sicher ob er auch in allen gleichzeitig sprechen können muss/soll).
Die Sprachverbindung soll mit diversen Codecs komprimiert werden. Ist aber ne andere Geschichte...
Ich überlege jetzt schon die ganze Zeit was wohl besser ist:
1te Variante)
Alle Clients bauen eine Verbindeung mit dem Server auf und senden diesem ireh Sprachstreams (bei 100 verbundenen Clients gehen beim Server 100 Sprachstreams ein). Der Server dekodiert die estmal (sind ja mit diversen Codecs komprimiert). Dann werden die Streams, je nach Channelzuteilung zusammengemischt (clients können gleichzeitig sprechen um z.B. den Gesprächspartner ggf. zu unterbrechen), wieder komprimiert und an die jeweils teilnehmenden Clients wieder ausgeliefert.
Ich seh darin nur folgendes Problem:
Der Server hat die ganze Arbeit: Er muss _alle_ Streams die er bekommen dekodieren, entsprechend mischen und wieder ausliefern. D.h. der meiste Traffik und die meiste Arbeit fällt beim Server an.
(Im komprimierten Zustand mischen geht nur dann wenn das pro Codec implementiert wird. Ist wohl extrem aufwendig und auch Codec-Abhängig. Ich denke in den allermeisten Fällen/Codecs wird man nicht drum rum kommen den Stream zu dekodieren bevor man ihn als PCM-Stream mischt und wieder komprimiert.)
2te Variante)
Der Server führt nur Buch darüber wer mit wem in welchem Channel spricht. Die Clients senden sich untereinander die Streams. D.h. jeder Client weiß die Adresse der anderen Clients im Channel und sendet an diese seinen Sprachstream:
Sind Beispielsweise 10 Leute in einem Channel und einer davon spricht, so muss dieser eine seinen Sprachstream an 9 Leute verteilen. Damit fällt die 9-fache Bandbreite des Sprachstreams an. Gehen wir von 5kbyte aus (und das ist wohl schon optimistisch gedacht), dann haben wir 9*5kbyte=45kbyte Upstream beim Sprecher. DSL3000 wäre damit schon überfordert.
Das ganze hätte jedoch den Vorteil dass der Server extrem viele Teilnehmer verkraftet da er selbst ja nur als Benutzerverzeichnis fungiert. Die Arbeit liegt dann verteilt auf den Clients.
Ergänzung/Notiz)
Wer Teamspeak schon mal benutzt hat weiß sicher wovon ich rede: Wenn in einem Channel 3 und mehr Leute gleichzeitig sprechen versteht man gar nix mehr. Man könnte sich also durchaus Bandbreite sparen wenn nur dann Traffgik anfällt wenn jemand spricht. Jedoch kommt dann ein neues Problem auf: Der Stream wird, wenn das eingestellt Level am Mikrofon nicht entsprechend überschritten wird, unterbrochen. D.h. die Gegenseite die den Stream empfängt kann da auch nichts mehr dekodieren. D.h. die dekodierung müsste ebenfalls unterbrochen werden. Hier hab ich aber noch nix getestet und mir noch nix überlegt. Wenn jemand hierzu ne Idee her: Als her damit
----
Leider weiß ich noch nichts über die Netzwerkanforderungen und ob die Sache im lokalen Netzwerk oder übers Internet laufen soll und welche Bandbreite zur Verfügung steht, bzw. welche mind. zur vergugung stehen sollte.
Ich weiß nur dass Teamspeak serverseitig die Streams mischt (1te Variante).
Wie Skype das macht weiß ich nicht genau. Ich weiß nur dass hier eine P2P Technik benutzt wird und so die Netzwerklast verteilt wird. Für ein 1-to-1 Gespräch fallen hier etwa 6kbyte/sek an. Wie das bei Konferenzen mit mehreren Teilnehmern ist weiß ich nicht (kann ich auch nicht testen, hab noch zu wenig Leute in Skype die gleichzeitig online sind).
Nun, was will ich jetzt von euch? Hmm. Gute Frage. Ich wollte hier nur mal ne Gesprächsrunde anzetteln wie man sowas am besten angeht. Vielleicht hat der eine oder andere ja noch einen brillianten Einfall oder Tipp, etc...
Hoffe dass sich hier der eine oder andere aufhält der hier gerne mitdiskutiert.
Gruß
Alex