TCP vs UDP im Videostream


96

Ich bin gerade von meiner Prüfung in Netzwerkprogrammierung nach Hause gekommen, und eine der Fragen, die sie uns stellten, war: "Wenn Sie Videos streamen möchten, würden Sie TCP oder UDP verwenden? Geben Sie eine Erklärung für gespeicherte Videos und Live-Videostreams." . Auf diese Frage erwarteten sie einfach eine kurze Antwort von TCP für gespeichertes Video und UDP für Live-Video, aber ich dachte auf dem Heimweg darüber nach, und ist es notwendigerweise besser, UDP für das Streaming von Live-Video zu verwenden? Ich meine, wenn Sie die Bandbreite dafür haben und sagen, dass Sie ein Fußballspiel oder ein Konzert streamen, müssen Sie dann wirklich UDP verwenden?

Nehmen wir an, während Sie dieses Konzert oder was auch immer mit TCP streamen, verlieren Sie Pakete (in einem Netzwerk zwischen Ihnen und dem Absender ist etwas Schlimmes passiert), und für eine ganze Minute erhalten Sie keine Pakete. Der Videostream wird angehalten und nach Ablauf der Minute werden die Pakete wieder durchgelassen (IP hat eine neue Route für Sie gefunden). Was dann passieren würde, wäre, dass TCP die Minute, in der Sie verloren haben, erneut überträgt und Ihnen weiterhin den Live-Stream sendet. Angenommen, die Bandbreite ist höher als die Bitrate im Stream, und der Ping ist nicht zu hoch. In kurzer Zeit fungiert die verlorene Minute auf diese Weise als Puffer für den Stream Wenn der Paketverlust erneut auftritt, werden Sie es nicht bemerken.

Jetzt kann ich von einigen Geräten denken , wo dies nicht eine gute Idee wäre, wie zum Beispiel Videokonferenzen, wo Sie müssen immer am Ende des Stroms sein, weil Verzögerung während eines Video-Chat einfach schrecklich ist, aber Während eines Fußballspiels oder eines Konzerts, was macht es aus, wenn Sie eine Minute hinter dem Strom sind? Außerdem ist Ihnen garantiert, dass Sie alle Daten erhalten, und es ist besser, sie für eine spätere Anzeige zu speichern, wenn sie fehlerfrei eingehen.

Das bringt mich zu meiner Frage. Gibt es Nachteile, die ich bei der Verwendung von TCP für Live-Streaming nicht kenne? Oder sollte es wirklich so sein, dass Sie sich für TCP entscheiden sollten, wenn Sie die Bandbreite dafür haben, da es für das Netzwerk "netter" ist (Flusskontrolle)?


Sie können TCP nicht ohne integrierte Verzögerung verwenden (das ist etwas, worüber sich alle einig sind), aber Sie können TCP + UDP verwenden, um eine gute Qualität zu erzielen, wenn die Sitzung aufgezeichnet wird.
Bestsss

Antworten:


87

Nachteile der Verwendung von TCP für Live-Videos:

  1. In der Regel sind Live-Video-Streaming-Appliances nicht für TCP-Streaming konzipiert. Wenn Sie TCP verwenden, muss das Betriebssystem die nicht bestätigten Segmente für jeden Client puffern. Dies ist insbesondere bei Live-Events unerwünscht. Vermutlich ist Ihre Liste der gleichzeitigen Kunden aufgrund der Einzigartigkeit des Ereignisses lang. Aufgezeichnete Video-Casts haben normalerweise kein so großes Problem damit, da die Zuschauer ihre Wiedergabeaktivität verschieben. Daher ist TCP besser für die Wiedergabe eines Video-on-Demand geeignet.
  2. IP-Multicast reduziert die Anforderungen an die Videobandbreite für große Zielgruppen erheblich. TCP verhindert die Verwendung von IP-Multicast, UDP eignet sich jedoch gut für IP-Multicast.
  3. Live-Video ist normalerweise ein Stream mit konstanter Bandbreite, der von einer Kamera aufgezeichnet wird. Aufgezeichnete Videostreams werden von einer Festplatte übertragen. Die Loss-Backoff-Dynamik von TCP erschwert die Bereitstellung von Live-Videos, wenn die Quell-Streams eine konstante Bandbreite haben (wie dies bei einem Live-Ereignis der Fall wäre). Wenn Sie von einer Kamera auf die Festplatte puffern, stellen Sie sicher, dass Sie über genügend Puffer für unvorhersehbare Netzwerkereignisse und variable TCP-Sende- / Backoff-Raten verfügen. Mit UDP haben Sie viel mehr Kontrolle über diese Anwendung, da sich UDP nicht um das Löschen der Netzwerktransportschicht kümmert.

Zu Ihrer Information, bitte verwenden Sie nicht das Wort "Pakete", wenn Sie Netzwerke beschreiben. Netzwerke senden "Pakete".


Entschuldigung, ich werde es ändern. Eine Frage ist jedoch, ob IPv6 (ja, ich weiß, es wird möglicherweise noch nicht gut unterstützt) Multicast selbst nicht unterstützt. Sollte TCP dann nicht auch über IPv6 übertragen werden?
Alxandr

1
Oh, und außerdem wird das von einem Live-Ereignis aufgenommene Video wahrscheinlich sowieso auf der Festplatte gespeichert, da ein kleiner Teil davon erneut übertragen werden muss. Würde es wirklich so weh tun?
Alxandr

1
@Alxandr, ich kenne nichts in IPv6, was TCP-Multicast einfacher macht. Welche Funktion von IPv6 haben Sie im Sinn?
Mike Pennington

2
@Alxandr, selbst wenn Sie Anycast-Adressen verwenden, löst dies nicht das grundlegende Problem beim Bereitstellen von Multicast über TCP ... TCP identifiziert Sockets als ein Vierfach-Tupel von (src ip, src port, dst ip, dst port). Wenn alle Clients dieselbe src-IP verwenden, müssen Sie die IPv6-Pakete basierend auf dem src-Port irgendwie an sie weiterleiten und den Verluststatus zwischen allen Clients beibehalten. Dies macht den Zweck von Multicast
Mike Pennington,

Aha. Danke für die Antwort :). Ich war nur neugierig, also dachte ich, ich würde sehen, was die Leute darüber denken. Und es scheint, dass die Fußballfans der Welt und das Internet selbst gegen mich sind, also
denke

26

Aber was macht es während eines Fußballspiels oder eines Konzerts aus, wenn Sie eine Minute hinter dem Strom sind?

Für einige Fußballfans ziemlich viel. Es wurde angemerkt, dass Verzögerungen von nur wenigen Sekunden in digitalen Videostreams aufgrund von Codierung (oder was auch immer) sehr ärgerlich sein können, wenn Sie bei hochkarätigen Ereignissen wie WM-Spielen den Jubel und das Stöhnen der Jungs hören nebenan (die sich ein ungelöstes analoges Programm ansehen), bevor Sie die Spielbewegungen sehen, die sie verursacht haben.

Ich denke, dass es für jemanden, der sich sehr für Sport interessiert (und das ist die größte Gruppe zahlender Kunden für digitales Fernsehen, zumindest hier in Deutschland), völlig inakzeptabel wäre, in einem Live-Videostream eine Minute zurückzubleiben (wie in, sie ' d Wechseln Sie zu Ihrem Konkurrenten, wo dies nicht geschieht.


Ich erinnere mich, dass sich auch in der Schweiz Leute darüber beschwert haben.
Tara

21

Normalerweise ist ein Videostream etwas fehlertolerant. Wenn also einige Pakete verloren gehen (z. B. weil ein Router unterwegs überlastet ist), kann der Inhalt weiterhin angezeigt werden, jedoch mit reduzierter Qualität.

Wenn Ihr Live - Stream TCP / IP wurde mit, dann wäre es werden gezwungen für diese fallen gelassen Pakete zu warten , bevor es neuere Datenverarbeitung fortgesetzt werden konnte.

Das ist doppelt schlecht:

  • alte Daten werden erneut übertragen (das ist wahrscheinlich für einen Frame, der bereits angezeigt wurde und daher wertlos ist) und
  • Neue Daten können erst eintreffen, nachdem alte Daten erneut übertragen wurden

Wenn es Ihr Ziel ist, so aktuelle Informationen wie möglich anzuzeigen (und für einen Live-Stream möchten Sie normalerweise auf dem neuesten Stand sein, auch wenn Ihre Frames etwas schlechter aussehen), arbeitet TCP gegen Sie.

Bei einem aufgezeichneten Stream ist die Situation etwas anders: Sie werden wahrscheinlich viel mehr (möglicherweise mehrere Minuten!) Puffern und möchten lieber Daten erneut übertragen als einige Artefakte aufgrund verlorener Pakete. In diesem Fall passt TCP gut zusammen (dies könnte natürlich immer noch in UDP implementiert werden, aber TCP hat nicht so viele Nachteile wie im Fall des Live-Streams).


1
Aber wie ich bereits erklärte, hätten viele der "Live" -Streams, die wir heute verwenden, wahrscheinlich kein Problem damit, eine halbe Minute zu verzögern, und daher würden Sie automatisch einen Puffer erhalten, damit Sie nicht sehen, dass die Pakete verloren gehen alles. Wäre dies nicht wahrscheinlich vorzuziehen, wenn Sie die Daten speichern würden?
Alxandr

2
@Alexandr: In diesem Fall mildern Sie die Definition eines "Live" -Streams, nicht wahr ;-)
Joachim Sauer

Ja, ich weiß, aber ich habe versucht, das auch in der Frage zu erklären. Obwohl es so aussieht, als ob das Hauptproblem darin bestehen würde, alte Daten zu puffern (für die erneute Übertragung) und Multicasting (zumindest mit IPv4)
Alxandr

In jedem Fall möchten Sie keine verworfenen Pakete, da dies zu visuellen Artefakten führt, die sich in mehreren Frames ausbreiten. Die richtige Lösung besteht darin, ganze Frames zu löschen, und UDP ist definitiv keine Lösung für Netzwerküberlastungen bei der Videowiedergabe.
Alex

Standardmäßig ist ein Videostream nicht fehlertolerant
Alex

9

Es gibt einige Anwendungsfälle, die für den UDP-Transport geeignet sind, und andere, die für den TCP-Transport geeignet sind.

Der Anwendungsfall bestimmt auch die Codierungseinstellungen für das Video. Bei der Ausstrahlung von Fußballspielen liegt der Schwerpunkt auf der Qualität und bei Videokonferenzen auf der Latenz.

Wenn Sie Multicast verwenden, um Videos an Ihre Kunden zu liefern, wird UDP verwendet.

Voraussetzung für Multicast ist teure Netzwerkhardware zwischen Rundfunkserver und Kunde. In der Praxis bedeutet dies, dass Sie UDP und Multicast für Live-Video-Streaming verwenden können, wenn Ihr Unternehmen über eine Netzwerkinfrastruktur verfügt. Selbst dann wird Quality-of-Service implementiert, um Videopakete zu markieren und zu priorisieren, damit kein Paketverlust auftritt.

Multicast vereinfacht die Rundfunksoftware, da die Netzwerkhardware die Verteilung von Paketen an Kunden übernimmt. Kunden abonnieren Multicast-Kanäle und das Netzwerk wird neu konfiguriert, um Pakete an neue Teilnehmer weiterzuleiten. Standardmäßig stehen alle Kanäle allen Kunden zur Verfügung und können optimal geroutet werden.

Dieser Workflow erschwert den Autorisierungsprozess. Netzwerkhardware unterscheidet abonnierte Benutzer nicht von anderen Benutzern. Die Lösung für die Autorisierung besteht darin, Videoinhalte zu verschlüsseln und die Entschlüsselung in der Player-Software zu aktivieren, wenn das Abonnement gültig ist.

Mit dem Unicast-Workflow (TCP) kann der Server die Anmeldeinformationen des Clients überprüfen und nur gültige Abonnements zulassen. Erlaube sogar nur eine bestimmte Anzahl gleichzeitiger Verbindungen.

Multicast ist nicht über das Internet aktiviert.

Für die Bereitstellung von Videos über das Internet muss TCP verwendet werden. Wenn UDP verwendet wird, implementieren Entwickler die Neuübertragung von Paketen erneut, z. Bittorrent p2p Live-Protokoll.

"Wenn Sie TCP verwenden, muss das Betriebssystem die nicht bestätigten Segmente für jeden Client puffern. Dies ist insbesondere bei Live-Ereignissen unerwünscht."

Dieser Puffer muss in irgendeiner Form vorhanden sein. Gleiches gilt für den Jitterpuffer auf der Spielerseite. Es wird als "Socket-Puffer" bezeichnet und die Serversoftware kann erkennen, wann dieser Puffer voll ist, und geeignete Videobilder für Live-Streams verwerfen. Es ist besser, die Unicast / TCP-Methode zu verwenden, da die Serversoftware die richtige Frame-Drop-Logik implementieren kann. Zufällig fehlende Pakete im UDP-Fall führen nur zu einer schlechten Benutzererfahrung. wie in diesem Video: http://tinypic.com/r/2qn89xz/9

"IP-Multicast reduziert die Anforderungen an die Videobandbreite für große Zielgruppen erheblich."

Dies gilt für private Netzwerke. Multicast ist nicht über das Internet aktiviert.

"Beachten Sie, dass die Verbindung unterbrochen wird, wenn TCP zu viele Pakete verliert. UDP bietet Ihnen daher viel mehr Kontrolle für diese Anwendung, da UDP sich nicht um das Ablegen der Netzwerktransportschicht kümmert."

UDP kümmert sich auch nicht darum, ganze Frames oder Frame-Gruppen zu löschen, sodass die Benutzererfahrung nicht mehr kontrolliert werden kann.

"Normalerweise ist ein Videostream etwas fehlertolerant."

Codiertes Video ist nicht fehlertolerant. Bei der Übertragung über einen unzuverlässigen Transport wird dem Videocontainer eine Vorwärtsfehlerkorrektur hinzugefügt. Ein gutes Beispiel ist der MPEG-TS-Container, der in Satellitenvideosendungen verwendet wird und mehrere Audio-, Video-, EPG- usw. Streams überträgt. Dies ist erforderlich, da die Satellitenverbindung keine Duplexkommunikation ist und der Empfänger keine erneute Übertragung verlorener Pakete anfordern kann.

Wenn Sie über Duplex-Kommunikation verfügen, ist es immer besser, Daten nur an Clients mit Paketverlust erneut zu übertragen, als den Aufwand für die Vorwärtsfehlerkorrektur in den an alle Clients gesendeten Stream einzubeziehen.

In jedem Fall sind verlorene Pakete nicht akzeptabel. Abgelegte Frames sind in Ausnahmefällen in Ordnung, wenn die Bandbreite eingeschränkt ist.

Das Ergebnis fehlender Pakete sind Artefakte wie dieses: Artefakte

Einige Decoder können in Streams, in denen Pakete fehlen, an kritischen Stellen unterbrochen werden.


-1 für Multicast ist nicht über das Internet aktiviert. Es ist nicht überall, aber einige Kollegen bieten Multicast-Service an. Ein Beispiel ist SeattleIX , das 2009 Multicast aktiviert hat
Mike Pennington

2
@ Mike Pennington: Nur wenige Anbieter sind nicht "Internet", daher bleibt meine Aussage wahr. Sie weisen nur auf eine sehr kleine Teilmenge der Infrastruktur hin und hoffen, dass andere sich dieser Praxis anschließen. Bitte halten Sie sich an die Fakten.
Alex

1
Wenn Sie einen Punkt finden, um zu diskutieren, wie viel Multicast über das Internet läuft, lassen Sie es mich bitte wissen
Mike Pennington

4

Ich empfehle Ihnen, sich das neue P2P-Live-Protokoll Bittorent Live anzusehen .

Für das Streaming ist es besser, UDP zu verwenden, da es die Serverlast verringert, aber hauptsächlich, weil Sie Pakete mit Multicast senden können, ist es einfacher, als es an jeden verbundenen Client zu senden.


3

Es hängt davon ab, ob. Wie kritisch ist der Inhalt, den Sie streamen? Wenn kritisch, verwenden Sie TCP. Dies kann zu Problemen mit der Bandbreite, der Videoqualität (möglicherweise müssen Sie eine niedrigere Qualität verwenden, um die Latenz zu bewältigen) und der Latenz führen. Wenn Sie jedoch den Inhalt benötigen, um garantiert dorthin zu gelangen, verwenden Sie ihn.

Andernfalls sollte UDP in Ordnung sein, wenn der Stream nicht kritisch ist und bevorzugt wird, da UDP tendenziell weniger Overhead hat.


3

Eines der größten Probleme bei der Bereitstellung von Live-Events im Internet ist die Skalierung, und TCP lässt sich nicht gut skalieren. Wenn Sie beispielsweise ein Live-Fußballspiel übertragen - im Gegensatz zu einer On-Demand-Filmwiedergabe -, kann die Anzahl der Zuschauer leicht 1000-mal höher sein. In einem solchen Szenario ist die Verwendung von TCP ein Todesurteil für die CDNs (Content Delivery Networks).

Es gibt einige Hauptgründe, warum TCP nicht gut skaliert:

  1. Einer der größten Nachteile von TCP ist die Variabilität des Durchsatzes, die zwischen dem Sender und dem Empfänger erreichbar ist. Beim Streamen von Videos über das Internet müssen die Videopakete mehrere Router über das Internet durchlaufen. Jeder dieser Router ist mit Verbindungen unterschiedlicher Geschwindigkeit verbunden. Der TCP-Algorithmus beginnt mit einem kleinen TCP-Fenster und wächst dann, bis ein Paketverlust erkannt wird. Der Paketverlust wird als Zeichen einer Überlastung angesehen und TCP reagiert darauf, indem die Fenstergröße drastisch reduziert wird, um eine Überlastung zu vermeiden. Dadurch wird der effektive Durchsatz sofort reduziert. Stellen Sie sich nun ein Netzwerk mit TCP-Übertragung vor, das 6-7 Router-Hops zum Client verwendet (ein ganz normales Szenario). Wenn einer der Zwischenrouter ein Paket verliert, verringert der TCP für diese Verbindung die Übertragungsrate. Tatsächlich folgt der Verkehrsfluss zwischen Routern einer Sanduhrform. Gong immer zwischen einem der Zwischenrouter auf und ab. Das Rendern des effektiven Durchsatzes ist im Vergleich zu UDP mit bestem Aufwand viel geringer.

  2. Wie Sie vielleicht bereits wissen, ist TCP ein bestätigungsbasiertes Protokoll. Nehmen wir zum Beispiel an, ein Absender ist 50 ms entfernt (dh Latenz zwischen zwei Punkten). Dies würde bedeuten, dass es 100 ms dauert, bis ein Paket an einen Empfänger gesendet wird und der Empfänger eine Bestätigung sendet. Somit ist der maximal mögliche Durchsatz im Vergleich zur UDP-basierten Übertragung bereits halbiert.

  3. Das TCP unterstützt weder Multicasting noch den neuen Standard für Multicasting-AMT. Dies bedeutet, dass die CDNs nicht die Möglichkeit haben, den Netzwerkverkehr durch Replizieren der Pakete zu reduzieren, wenn viele Clients denselben Inhalt ansehen. Das selbst ist ein Grund genug für CDNs (wie Akamai oder Level3), nicht mit TCP für Live-Streams zu arbeiten.


2

Beim Lesen der TCP-UDP-Debatte habe ich einen logischen Fehler festgestellt. Ein TCP-Paketverlust, der eine Verzögerung von einer Minute verursacht und in einen Puffer von einer Minute umgewandelt wird, kann nicht damit korreliert werden, dass UDP eine volle Minute verliert, während derselbe Verlust auftritt. Ein fairer Vergleich ist wie folgt.

TCP erfährt einen Paketverlust. Das Video wird angehalten, während die Pakete von TCP erneut gesendet werden, um zu versuchen, mathematisch perfekte Pakete zu streamen. Das Video wird um eine Minute verzögert und dort fortgesetzt, wo es aufgehört hat, nachdem das fehlende Paket sein Ziel erreicht hat. Wir warten alle, aber wir wissen, dass wir kein einziges Pixel verpassen werden.

Bei UDP tritt ein Paketverlust auf. Während des Videostreams wird eine Ecke des Bildschirms für eine Sekunde etwas verschwommen. Niemand bemerkt es und die Show geht weiter, ohne nach den verlorenen Paketen zu suchen.

Alles, was gestreamt wird, profitiert am meisten von UDP. Der Paketverlust, der eine Verzögerung von einer Minute für TCP verursacht, würde keine Verzögerung von einer Minute für UDP verursachen. In Anbetracht der Tatsache, dass die meisten Systeme Streams mit mehreren Auflösungen verwenden, wodurch die Dinge beim Verhungern nach Paketen blockiert werden, ist die Verwendung von UDP noch sinnvoller.

UDP FTW beim Streaming.


1
Sie vergessen, dass die meisten Video-Codecs durch die Verwendung von Fehlerkorrekturcodes zumindest ein wenig Redundanz aufweisen. Ein einzelnes verworfenes Paket kann ohnehin ignoriert werden, da die Daten bereits verfügbar waren und der Decoder dies möglicherweise nicht einmal bemerkt.
Andy

2

Wenn die Bandbreite weit über der Bitrate liegt, würde ich TCP für Unicast-Live-Video-Streaming empfehlen.

Fall 1: Aufeinanderfolgende Pakete gehen für eine Dauer von mehreren Sekunden verloren. => Live-Videos werden auf der Clientseite unabhängig von der Transportschicht (TCP oder UDP) angehalten. Wenn das Netzwerk wiederhergestellt wird: - Wenn TCP verwendet wird, kann der Client-Videoplayer wählen, ob der Stream beim ersten verlorenen Paket neu gestartet werden soll (Timeshift) oder ob alle verspäteten Pakete verworfen werden sollen und ob der Videostream ohne Timeshift neu gestartet werden soll. - Wenn UDP verwendet wird, gibt es auf der Clientseite keine Auswahl. Der Videostart wird ohne Zeitverschiebung live neu gestartet. => TCP gleich oder besser.

Fall 2: Einige Pakete gehen zufällig verloren und gehen häufig im Netzwerk verloren. - Wenn TCP verwendet wird, werden diese Pakete sofort erneut übertragen, und mit einem korrekten Jitterpuffer hat dies keine Auswirkungen auf die Qualität / Latenz des Videostreams. - Wenn UDP verwendet wird, ist die Videoqualität schlecht. => TCP viel besser


1

Für Video-Streaming ist die Bandbreite wahrscheinlich die Einschränkung des Systems. Mit Multicast können Sie die verwendete Upstream-Bandbreite erheblich reduzieren. Mit UDP können Sie Ihre Pakete problemlos an alle angeschlossenen Terminals multicasten. Sie können auch ein zuverlässiges Multicast-Protokoll verwenden, eines heißt Pragmatic General Multicast (PGM). Ich weiß nichts darüber und denke, es ist in seiner Verwendung nicht weit verbreitet.


1

Neben all den anderen Gründen kann UDP Multicast verwenden. Die Unterstützung von Tausenden von TCP-Benutzern, die alle dieselben Daten übertragen, verschwendet Bandbreite. Es gibt jedoch noch einen weiteren wichtigen Grund für die Verwendung von TCP.

TCP kann viel einfacher durch Firewalls und NATs geleitet werden. Abhängig von Ihrem NAT und Operator können Sie aufgrund von Problemen mit dem Stanzen von UDP-Löchern möglicherweise nicht einmal einen UDP-Stream empfangen.


0

Alle "UDP verwenden" -Antworten setzen ein offenes Netzwerk voraus und nähern sich so weit wie möglich. Gut für alte Audio- / Videonetzwerke im geschlossenen Garten, die verschwinden.

In der tatsächlichen Welt wird Ihre Übertragung über Firewalls (die Multicast und manchmal auch udp löschen) erfolgen. Das Netzwerk wird mit anderen wichtigeren ($$$) Apps geteilt, sodass Sie Missbraucher mit Fensterskalierung bestrafen möchten .


0

Dies ist die Sache, es ist mehr eine Frage des Inhalts als ein Zeitproblem. Das TCP-Protokoll erfordert, dass ein nicht zugestelltes Paket überprüft, verifiziert und erneut zugestellt werden muss. UDP verwendet diese Anforderung nicht. Wenn Sie also eine Datei mit UDP gesendet haben, die Millionen von Paketen enthält, wie z. B. ein Video, und einige der Pakete bei der Zustellung fehlen, werden sie höchstwahrscheinlich nicht übersehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.