Wie spielt ein Computer ein Video ab, während er etwas anderes macht?

8

Wie erfolgt die Videowiedergabe auf einem Computer? Es ist offensichtlich nicht nur auf die CPU angewiesen, da die Videowiedergabe fortgesetzt wird, wenn ein Benutzer eine andere Aktivität ausführt, z. B. das Eingeben in ein YouTube-Kommentarfeld. Diese Aufgabe scheint im Fall von Video-Streaming weiter kompliziert zu sein, bei dem Daten vermutlich von der Netzwerkschnittstelle zum Video- / Grafik-Controller übertragen werden müssen.

EDIT: Ich hätte klarstellen sollen, dass ich verstehe, dass die CPU ständig zwischen mehreren Prozessen und Threads wechselt. Meine Frage sollte sich speziell auf die Videowiedergabe beziehen. Wird die Videoverarbeitung auf dem Grafikchipsatz / der Grafikkarte durchgeführt? Bieten diese normalerweise Pufferung an? Oder kann alles von einer Single-Core-CPU erledigt werden, die Zeit für andere Aufgaben hat, oder bin ich falsch zu glauben, dass Low-End-CPUs Videos ohne (Nicht-Netzwerk-) Verzögerungen wiedergeben können?

Ellen Spertus
quelle
2
Jeder Kern kann nur eine Operation zu einem bestimmten diskreten Zeitschritt ausführen - aber da er sehr schnell ist, kann er zwischen so schnellen Aktionen wechseln, dass wir ihn nicht erkennen können. Wenn wir in Zeitschritten im Bereich von Nanosekunden hören oder sehen könnten, würde es so aussehen / klingen, als würde es stottern. Ich nehme an, die Planung wäre das grobe Thema dafür. Der Trick besteht wahrscheinlich darin, zeitkritische Dinge (wie das Abspielen von Medien oder das Ändern des Bildschirminhalts) häufig genug zu planen, damit unser Gehirn nicht herausfinden kann, dass dazwischen etwas anderes getan wurde. (Hinweis: Das obige ist eine grobe Vermutung, aber dort würde ich suchen.)
G. Bach
1
Fügen Sie dem vorherigen Kommentar hinzu, dass moderne Chips mehrere Kerne haben (lesen Sie: mehrere CPUs) und dass es andere Prozessoren gibt, die die Arbeitslast teilen, wie z. B. den Grafikprozessor.
Babou
Danke, aber ich habe über mehrere Kerne nachgedacht und sie verworfen, da es so aussah, als könnten selbst alte Low-End-Computer beim Anzeigen von Videos etwas anderes tun.
Ellen Spertus

Antworten:

3

Eine moderne Grafikkarte funktioniert mehr oder weniger (etwas) wie eine normale CPU.

Auf einer Grafikkarte haben Sie (manchmal) mehrere Prozessoren, jeder Prozessor hat (manchmal) mehrere Multiprozessoren, die jeweils mehrere Kerne haben.

Wenn ein Video in eine Grafikkarte geladen wird, wird es durch eine bestimmte Zuweisung von Multiprozessorkernen in den Ausgabepuffer transkodiert. Dieser Ausgabepuffer ist im Allgemeinen ein global zugänglicher Speicher, was bedeutet, dass jeder Kern eines Multiprozessors von mindestens einem Prozessor (aber häufig allen) direkten R / W-Zugriff darauf hat.

Normalerweise ist ein Multiprozessor auf einen Befehlssatz beschränkt, was bedeutet, dass eine Grafikkarte nur so viele verschiedene "Varianten" von Threads gleichzeitig betreiben kann, wie Multiprozessoren auf der Karte vorhanden sind. Eine "Variante" kann beispielsweise eine Physiksimulation, ein Video-Rendering, ein Betriebssystem-Rendering oder eine kryptografische Funktion sein. Natürlich kann ein Multiprozessor mehrere Thread-Typen für die intermittierende Ausführung einplanen, dies ist jedoch normalerweise nicht erforderlich.

Das Dekodieren eines Videos ist oft eine Menge Arbeit, wenn man bedenkt, wie es normalerweise komprimiert und manchmal verschlüsselt wird, sodass der Anzeigepuffer nicht immer beschäftigt ist. Somit ist es relativ einfach, einen Mauszeiger zu rendern, der sich über ein Videobild bewegt. Manchmal funktioniert dies jedoch nicht ganz und Sie werden sehen, wie in einigen Anwendungen Ihr Cursor verschwindet. Dies liegt nicht unbedingt daran, dass sich die Anwendung "über" dem Betriebssystem befindet, sondern einfach daran, dass sie einen Teil des Ausgabepuffers belastet.

Gast
quelle
3

Dies wird unter Verwendung verschiedener Techniken implementiert. Innerhalb der Anwendung (zum Beispiel des Web - Browser), kann das Programm verschiedene ausführen Threads der Ausführung. Ein Thread kann das Video-Streaming / die Video-Wiedergabe durchführen, während ein anderer Thread den Benutzer beim Eingeben in das Kommentarfeld behandeln kann.

Diese Fäden, zusammen mit vielen anderen Threads und Prozesse werden wiederum geplant durch das Betriebssystem (auch wenn Sie nur den Web - Browser geöffnet haben, hat das Betriebssystem viele Hintergrund - Tasks ausführen, wie die Windowing - Manager, der Druck - Spooler, die USB-Geräte-Manager usw.). Es ist die Aufgabe des OS-Schedulers, zu bestimmen, welcher Thread auf welchem ​​Prozessorkern und wie lange aktiv ausgeführt werden kann. In einem typischen System kann ein Thread bis zu einem bestimmten Schwellenwert ausgeführt werden, beispielsweise 100 Millisekunden, bevor der Scheduler die Ausführung einer anderen Aufgabe zulässt.

Diese Aufgabenumschaltung ist für alle modernen Betriebssysteme (Windows, Linux, UNIX usw.) von grundlegender Bedeutung und macht normalerweise einen wesentlichen Teil eines Kurses für Bachelor-Betriebssysteme aus.

Ken P.
quelle
Danke für die Antwort. Ich hätte klarstellen sollen, dass ich mich mit Multithreading und Multiprogrammierung auskenne. (Tatsächlich unterrichte ich ungefähr zum zehnten Mal einen Kurs für Betriebssysteme für Studenten.) Ich verstehe nur nicht genau, wie die Videowiedergabe funktioniert
Ellen Spertus,
1
@espertus Hier ist ein Artikel über die Planung kontinuierlicher Medien . Vielleicht kann dies einige Ihrer Bedenken klären. Nachlesen ist zwar weitaus mehr Arbeit als jemand, der nur eine Antwort gibt, aber ich dachte, es ist zumindest ein Ausgangspunkt, da ich nicht sicher bin, ob wir jemanden in diesem Forum haben, der sich mit den relevanten Themen auskennt.
G. Bach
2

Die Videowiedergabe ist nichts Besonderes. Sicher, GPU-beschleunigte Dekodierung ist heutzutage üblich, wodurch die CPU für andere Arbeiten frei wird, aber das war nicht immer so. Eine reibungslose Videowiedergabe mit nur einer CPU ist definitiv möglich, solange genügend CPU für die Auflösung und Komplexität des Komprimierungsalgorithmus verfügbar ist und dies zusammen mit anderen Aufgaben genauso möglich ist, solange genügend CPU für beide vorhanden ist. und das Betriebssystem plant gut. 30fps Video ist üblich, wodurch 33 ms jedes Bild dekodieren können. Sogar ziemlich alte Chips können dies für MPEG-2 in SD-Qualität verwalten, und moderne Chips können dies für HD MPEG-4 verwalten. Der Laptop, auf dem ich dies schreibe, benötigt ungefähr 20% der CPU, um 720p High Profile AVC wiederzugeben.

Für die Pufferung steht eine begrenzte Menge zur Verfügung. Das Minimum für alles, was keinen Bildschirmriss haben soll, ist "Doppelpufferung", bei der sich zwei Bilder im Speicher befinden: Die Grafikkarte zeigt eines an, während die Software das andere aktualisiert, und die Rollen der beiden werden während der Vertikalen vertauscht Aktualisierung. Bei der "dreifachen Pufferung" gibt es zwei Offscreen-Frames, den nächsten und den nächsten + 1, wodurch die Menge an Jitter reduziert wird. Bei modernen Karten mit viel RAM ist es möglich, darüber hinaus eine größere Anzahl von Frames zu erstellen. Die einzigen Nachteile sind die vom Benutzer sichtbare Latenz beim Suchen, Starten der Wiedergabe usw. und die Tatsache, dass andere Apps diesen Video-RAM möglicherweise für sich selbst benötigen .

Hobbs
quelle