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?
quelle
Antworten:
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.
quelle
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.
quelle
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 .
quelle