-
Die Anmeldung beansprucht den Vorteil der folgenden
U.S. Provisionalanmeldungen: Nr. 62/488,526 , eingereicht am 21. April 2017, Nr.
62/647,180 , eingereicht am 23. März 2018, und Nr.
62/655,901 , eingereicht am 11. April 2018.
-
HINTERGRUND DER ERFINDUNG
-
Bei Remote-Gaming-Anwendungen, wobei ein serverseitiges Spiel von einem clientseitigen Spieler gesteuert wird, wird versucht, die Videoausgabe einer dreidimensionalen (3D)-Grafik-Engine in Echtzeit mit vorhandenen oder benutzerdefinierten Codierern zu codieren. Die interaktive Natur von Videospielen, insbesondere die Spieler-Rückmeldungsschleife zwischen Videoausgang und Spielereingang, macht das Spiel-Video-Streaming jedoch viel empfindlicher bezüglich Latenzzeiten als herkömmliches Video-Streaming. Bestehende Videocodierverfahren können Rechenleistung, und sonst aber wenig anderes, für eine Verkürzung der Codierzeit in Anspruch nehmen. Neue Verfahren zum Integrieren des Codierungsprozesses in den Videowiedergabeprozess können deutliche Verkürzungen der Codierungszeit bei gleichzeitiger Verringerung der Rechenleistung, Verbesserung der Qualität des codierten Videos und Beibehaltung des ursprünglichen Bitstream-Datenformats ermöglichen, um die Interoperabilität bestehender Hardwaregeräte zu erhalten.
Beim ersten Durchlauf eines Multi-Pass-Codierungsprozesses werden die Kosten für die Codierung jedes einzelnen Videobildes berechnet, bevor die Daten effizient gepackt werden, um einer Bitrateneinschränkung bei aufeinanderfolgenden Durchläufen zu entsprechen. Die Vorteile der Multi-Pass-Codierung sind beträchtlich und bieten die höchstmögliche Qualität für eine Bitrateneinschränkung, aber die traditionelle Multi-Pass-Codierung erfordert den Zugriff auf die gesamte Videodatei, was sie für Live-Streaming-Anwendungen ungeeignet macht.
-
Live-Streaming-Anwendungen verwenden in der Regel eine Single-Pass-Codierung, da das Video nicht im Voraus verfügbar ist. Die zeitlichen Einschränkungen bei der Live-Stream-Codierung behindern die Fähigkeit des Codierers, die Videoinformationen effizient für eine eingeschränkte Bitrate zu packen. Da die Codierungskosten nicht in einer Single-Pass-Codierung berechnet werden, schießt der Netzwerkverkehr bei der Codierung von Hoch-Entropie-Frames nach oben.
-
Ein in Echtzeit gerendertes Video wird zunehmend in Live-Streaming-Anwendungen eingesetzt, wie z.B. im Videospiel-Streaming, wo sowohl hohe Qualität als auch eingeschränkte Bandbreite sehr geschätzt werden. Ein gerendertes Video hat im Gegensatz zu aufgezeichnetem Video Zugriff auf zusätzliche Informationen zu jedem Frame, die zur Schätzung der Kosten für die Codierung des Frames wiederverwendet werden können. Auf diese Weise können die Ergebnisse eines ersten Durchlaufs in einem Multi-Pass-Codierungsschema angenähert werden, um die höchste Qualität des codierten Videos innerhalb einer Bitrateneinschränkung zu erreichen. Viele Renderingmaschinen haben teilweise Informationen über die zu rendernden Bilder und können Codierer-Qualitätseinstellungen vorgenerieren, die während der Laufzeit verwendet werden können. Auf diese Weise können die Vorteile eines Multi-Pass-Codiermodus in einer Live-Streaming-Umgebung genutzt werden. Wie im Folgenden erläutert, ist die derzeitige Computertechnologie jedoch nach wie vor unzureichend, um die Codierungsqualität in einem ausreichenden Maße abzuschätzen, um die Wiedergabe von hochwertigem, in Echtzeit gerendertem Video durchzuführen und gleichzeitig Verkehrsspitzen aufgrund erhöhter Entropie zu kompensieren. Darüber hinaus gibt es keine Codierungstechnologie, die derzeit räumlich und nicht zeitlich vorcodiert und die Multi-Pass-Codierung repliziert, während sie in einer Echtzeitumgebung bleibt.
-
US-Patent Nr. 7,844,002 B2 („das '002-Patent“) offenbart Systeme und Verfahren zur Durchführung von Echtzeit-MPEG-Videocodierung mit vorausschauender Information, um eine konstante Bitrate zu erreichen. Das System besteht aus zwei Video-Codierern, von denen einer die Eingabe um eine gewisse Zeit im Vergleich zum Vorschau-Fenster des anderen Codierers verzögert. Im System des '002-Patents arbeitet einer der Video-Codierer als Puffer(Vorschau)-Gerät und verzögert die eingegebenen Videobilder, so dass der zweite der Video-Codierer, der als Informationssammler/-prozessor fungiert, die erforderliche Zeit hat, um relevante Informationen zu extrahieren und eine Codierungsstrategie für die Videoframes festzulegen. Sobald diese Strategie festgelegt ist, werden die Codierungsparameter zur Ausführung an das Codiergerät übergeben. Die technische Lehre des '002-Patents ist im Vergleich zur vorliegenden Erfindung unzureichend, zumindest weil sie keine Techniken zur Berechnung der Kosten für die Codierung von Einzelframes gerenderter Videos in einer Live-Streaming-Anwendung, eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen oder Techniken zur Verwendung von Videodaten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen enthält. Die vorliegende Erfindung ist auch deshalb überlegen, weil sie Codierereinstellungen für Videodaten erfasst und speichert, die unbegrenzt wiederverwendet werden können.
-
Die veröffentlichte US-Patentanmeldung Nr.
US2016/019816166 AI, („die '166-Veröffentlichung“), offenbart Systeme und Verfahren für Pseudo-Multi-Pass-Codierungstechniken, die eine Lösung für die Echtzeit-Codierung bieten. Das offenbarte System ist eines, wobei die Eingangsvideobilder in einem ersten Durchlauf heruntergerechnet und codiert werden, um eine Untergruppe von Bildern zu bilden. Diese Untergruppen werden dann verwendet, um Codierungsstatistiken zu erstellen, die verwendet werden, um einen Satz von Second-Pass codierten Frames zu erzeugen. Die in der '166-Veröffentlichung beschriebenen Techniken sind der vorliegenden Erfindung zumindest deshalb unterlegen, weil die vorliegende Erfindung Techniken zur Berechnung spezifischer Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung und zur Verwendung solcher Daten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen ohne Down-Sampling vermittelt.
-
Die veröffentlichte
US-Patentanmeldung Nr. 9,697,280 („das '280-Patent“) offenbart Systeme und Verfahren zur Herstellung eines mobilen Mediendatensatzes aus den normierten Informationen, zur Analyse des mobilen Mediendatensatzes zur Bestimmung einer Abrechnungsvereinbarung und zur Bereitstellung relevanter Informationen aus der Abrechnungsvereinbarung für mindestens einen Teil der in der mobilen Medienaufzeichnung vertretenen Teilnehmer. Die Systeme und Verfahren sind in der Lage, eine Multipass-Codierung durchzuführen, wobei die Ausgänge eines vorherigen Codierers mit den Eingängen eines nächsten Codierers hintereinander geschaltet werden, was zu einer Verzögerung führt, bevor die codierte Datei für den Verbrauch verfügbar ist. Um die mit der sequentiellen Codierung verbundene Latenzzeit zu reduzieren und gleichzeitig eine gleichwertige Qualität zu erreichen, können aufeinanderfolgende Codierungsstufen in einer Pipeline so konfiguriert werden, dass der Ausgang eines ersten Codierers dem Eingang eines zweiten zugeführt wird, so dass die Codierung in jedem Codierer um eine kleine Zeitspanne versetzt wird, so dass der größte Teil der Codierung parallel ausgeführt werden kann. Die Gesamtlatenzzeit kann dann die Summe der Latenzen jedes Codierers vom ersten eingelesenen Block bis zum ersten ausgegebenen Block approximieren. Die Gesamtlatenzzeit kann leicht die Echtzeit-Multipasscodierung erleichtern. Ähnlich wie die anderen in diesem Abschnitt beschriebenen Technologien offenbart das '280-Patent jedoch keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung und zur Verwendung dieser Daten, um codierte Videos innerhalb von Bitratenbeschränkungen zu maximieren, wie sie in der vorliegenden Erfindung offenbart werden.
-
Die veröffentlichte US-Patentanmeldung Nr.
US 20170155910 A1 („die '910-Veröffentlichung“), offenbart Systeme und Verfahren zur Aufteilung des Audios von Medieninhalten in separate Inhaltsdateien ohne Einführung von Randartefakten. Die '910-Veröffentlichung offenbart ein System, wobei der Codierer die ursprüngliche Inhaltsdatei in Quell-Streams segmentiert und eine Zwei-Pass-Codierung der mehreren Kopien (z.B. Streams) auf jedem entsprechenden Roh-Streamlet durchführt, ohne beispielsweise auf das Ende einer Fernsehsendung zu warten. Somit ist der Webserver in der Lage, die Streamlets kurz nach Beginn der Erfassung der ursprünglichen Inhaltsdatei durch das Streamlet-Generierungssystem über das Internet zu streamen. Die Verzögerung zwischen einer vom Verlag übertragenen Live-Übertragung und der Verfügbarkeit der Inhalte hängt von der Rechenleistung der Hosts ab. Die '910-Veröffentlichung enthält jedoch keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung, die eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen bieten, und zur Verwendung von Videodaten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen, wie sie in der vorliegenden Erfindung offenbart werden.
-
US-Patent Nr. 9,774,848 („das '848-Patent“) offenbart Systeme und Verfahren zur Verbesserung der Video-Codierer-Komponente des MPEG-Standards, um sowohl die Effizienz als auch die Qualität der Videodarstellung auf der Anzeigevorrichtung zu verbessern. Die vorgestellte Technologie lehrt die Videokompression durch adaptive Bitzuweisung mittels Look-Ahead-Verarbeitung. Bei der MPEG-Videokompression wird eine bestimmte Anzahl von Videobildern (
15,
30,
60 usw.) zu einer Group-of-Pictures (GoP) zusammengefasst. Bilder innerhalb einer GoP werden entweder als I-, P- oder B-Bilder (Frames) codiert. Die Anzahl der Bits, die jedem GoP zugeordnet sind, wird proportional zur Anzahl der darin enthaltenen Frames gebildet. Das System führt eine Vorausschau in Echtzeit durch, um Statistiken zu sammeln, die eine adaptive Bitzuordnung ermöglichen. Es werden auch Verfahren zur Bewegungsschätzung vorgestellt, wobei modifizierte 3D-Pipeline-Shader-Nutzlasten in der Lage sind, mehrere Patches im Falle von Domain-Shadern oder mehrere Primitive zu verarbeiten, wenn die Anzahl der primitiven Objektinstanzen größer als eins ist, im Falle von Geometrie-Shadern und mehrere Dreiecke im Falle von Pixel-Shadern. Eine Bewegungsschätzmaschine wird von Grafikprozessorkomponenten verwendet, um mit Video bei der Decodierung und Verarbeitung von Funktionen zu helfen, die empfindlich oder anpassungsfähig an die Richtung oder Größe der Bewegung innerhalb der Videodaten sind. Das '848-Patent offenbart jedoch keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung, die eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen bieten, und zur Verwendung von Videodaten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen, wie sie in der vorliegenden Erfindung offenbart werden. Darüber hinaus fungiert die Technologie des '848-Patents bestenfalls als Hilfe und führt keine Vorcodierung in der räumlichen Weise durch, wie sie in der vorliegenden Erfindung offenbart wird. Als solches ist es nicht in der Lage, vorteilhafte Multi-Pass-Codierung in der gleichen Echtzeit wie die vorliegende Erfindung zu replizieren.
-
US-Patent Nr. 9,749,642 („das '642-Patent“) offenbart Systeme und Verfahren, wobei ein Video-Codierer eine [Bewegungsvektor] MV-Präzision für eine Videoeinheit aus mehreren MV-Präzisionen bestimmt, die eine oder mehrere Bruchproben-MV-Präzisionen und Ganzzahlen-MV-Präzisionen einschließen. Der Video-Codierer kann einen Satz von MV-Werten mit einer Bruchproben-MV-Genauigkeit identifizieren und dann die MV-Genauigkeit für die Einheit auswählen, basierend zumindest teilweise auf der Prävalenz von MV-Werten (innerhalb des Satzes) mit einem Bruchteil von Null. Oder der Video-Codierer kann eine Rate-Distortion-Analyse durchführen, bei der die Rate-Distortion-Analyse auf die Ganzzahl-Sample-MV-Präzision ausgerichtet ist. Auch hier offenbart das '642-Patent keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung, die eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen bieten, und zur Verwendung von Videodaten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen, wie sie in der vorliegenden Erfindung offenbart werden.
-
Das Europäische Patent Nr.
EP1820281 B1 („das '281-Patent“), offenbart Systeme und Verfahren zur Dual-Pass-Codierung. Die offenbarten Verfahren schließen die Schritte a) Empfangen des Bildes, b) Berechnen eines ersten Vollheitsgrades eines codierten Bildspeichers zu einem ersten Zeitpunkt, c) Arbeiten mit dem ersten Vollheitsgrad, um einen zweiten Vollheitsgrad des codierten Bildspeichers zu einem zweiten Zeitpunkt zurückzugeben, d) Speichern des Bildes für eine bestimmte Zeitspanne, e) Messen eines ersten Komplexitätsgrades des Bildes während dieser Zeitspanne, (f) Arbeiten mit dem ersten Grad der Komplexität des Bildes und dem zweiten Grad der Fülle, um eine bevorzugte Zielgröße für das Bild zurückzugeben, und (g) anschließend mit Schritt d, Bereitstellen des Bildes und der bevorzugten Zielgröße an den Multiprozessor-Videoencoder ein, wobei das erste Mal dem letzten Mal entspricht, kann ein genauer Grad der Fülle des codierten Bildpuffers berechnet werden und das zweite Mal nach dem ersten Mal. Wiederum offenbart allerdings auch hier das '281-Patent keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung, die eine ausreichend niedrige Latenzzeit für das Live-Streaming von Spieleanwendungen bieten, und zur Verwendung von Videodaten zur Maximierung codierter Videos innerhalb von Bitratenbeschränkungen, wie sie in der vorliegenden Erfindung offenbart werden.
-
Japanisches Patent Nr.
JP0612151818B2 („das '518-Patent“), offenbart Systeme und Verfahren zum Codieren eines ausgewählten räumlichen Abschnitts eines Original-Videostroms als eigenständigen Videostrom, wobei das Verfahren das Erhalten von Bildelementinformationen, die sich auf den ausgewählten räumlichen Abschnitt beziehen, das Erhalten von Codierungshinweisen, die von einem komplementären räumlichen Abschnitt des Original-Videostroms abgeleitet sind, der dem ausgewählten räumlichen Abschnitt peripher ist, und das Codieren des ausgewählten räumlichen Abschnitts unter Verwendung der Codierungshinweise umfasst. Wieder einmal enthüllt das '518-Patent jedoch keine Techniken zur Berechnung der Kosten für die Codierung von Frames gerenderter Videos in einer Live-Streaming-Anwendung, die eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen bieten, und zur Verwendung dieser Daten, um codierte Videos innerhalb von Bitratenbeschränkungen zu maximieren, wie dies in der vorliegenden Erfindung offenbart wird.
-
Die veröffentlichte
US-Patentanmeldung Nr. 2006/0230428 („die '428-Veröffentlichung“) offenbart Systeme und Verfahren, die ein vernetztes Videospielsystem betreffen, das es mehreren Spielern ermöglicht, gleichzeitig teilzunehmen. Die '428-Veröffentlichung offenbart einen Server, der in der Lage ist, vorcodierte Blöcke zu speichern, die kompressibel sind und Teilbereichen eines Videoframes für ein Spiel entsprechen. Das System ist auch in der Lage, Spielinhalte mit vorcodierten Blöcken als Reaktion auf Benutzeraktionen im Spiel zu generieren. Diese Inhalte können dann an den Nutzer übermittelt werden. Auch hier führt diese Technologie keine Vorcodierung in der räumlichen Weise durch, wie sie in der vorliegenden Erfindung offenbart wird, und sie ist nicht in der Lage, vorteilhafte Multi-Pass-Kodierung in Echtzeit zu replizieren. Darüber hinaus ermöglicht die vorliegende Erfindung im Gegensatz zur Technologie der '428-Veröffentlichung, dass das System während der Laufzeit Parameter über alle Teile der Frames in einer zeitlichen Abfolge (z.B. Auflösung) ändern kann und eine ausreichend niedrige Latenzzeit für Live-Streaming für Spieleanwendungen bereitstellt.
-
US-Patent Nr. 8,154,553 („das '553-Patent“) offenbart Systeme und Verfahren, die einen Streaming-Spielserver mit einem Abfangmechanismus für Rendering-Befehle und einem Feed-Forward-Steuermechanismus betreffen, der auf der Verarbeitung der Befehle einer Renderingmaschine, auf einem Vorfiltermodul und auf einem visuellen Codierer basiert. Die technische Lehre des '553-Patents verwendet eine grafische API, um einen Satz von Daten auf Objektebene zu extrahieren, die sich auf die visuelle Komplexität und die Bewegung der Objekte in der Szene beziehen. Diese Informationen werden verwendet, um das Rendering-Detail auf GPU-Ebene, die Filterstufe auf dem Videopräprozessor und die Quantisierungsstufe auf dem Video-Codierer zu steuern. Das System berechnet auch eine Bewegungskompensationsschätzung für jeden Makroblock im zielcodierten Frame in einem Video-Codierer. Ähnlich wie die anderen hierin diskutierten Technologien führt das im '553-Patent offenbarte System keine Vorcodierung in der in der vorliegenden Erfindung offenbarten zeitlichen oder räumlichen Weise durch und ist nicht in der Lage, vorteilhafte Multi-Pass-Codierung in Echtzeit zu replizieren, da es vielmehr Frames als Reaktion auf Bitratenspitzen fallen lässt. Darüber hinaus ermöglicht die vorliegende Erfindung im Gegensatz zur Technologie der '428-Veröffentlichung, dass das System eine ausreichend niedrige Latenzzeit für Live-Spiele-Streaming-Anwendungen bereitstellt.
-
Wie aus der obigen Diskussion über den Stand der Technik in dieser Technologie hervorgeht, besteht in der Technik ein Bedarf an einer Verbesserung der derzeitigen Computertechnologie im Zusammenhang mit der Kodierung von Echtzeit-Spielumgebungen.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Eine Aufgabe der vorliegenden Erfindung besteht daher darin, Systeme und Verfahren zur Aufrechterhaltung einer konstanten Bitrate durch Hinweisen eines Codierers zu offenbaren. In einer beispielhaften Ausführungsform überwacht ein Server Informationen im Zusammenhang mit Änderungen der Frame-Codierung, berechnet Toleranzgrenzen, rollierende durchschnittliche Framezeit und kurzfristige Trends der Framezeit und verwendet diese Berechnungen, um eine Framezeitspitze zu identifizieren. Der Server weist dann einen Codierer an, um die Qualitätseinstellungen der Frameausgabe proportional zur Größe der Framezeitspitze zu modulieren.
-
Eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zur Aufrechterhaltung einer konstanten Bitrate durch Hinweisen eines Codierers zu offenbaren, bei dem die Berechnungen von Toleranzgrenzen, rollierender durchschnittlicher Framezeit und kurzfristigen Trends in der Framezeit zur Identifizierung von Hoch-Entropie-Frames verwendet werden.
-
Noch eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zur Aufrechterhaltung einer konstanten Bitrate durch Hinweisen eines Codierers zu offenbaren, bei dem der Server einen Qualitätsskalierungswert für eine Framezeit außerhalb der Toleranzgrenzen berechnet und diese Berechnung zur Identifizierung einer Framezeitspitze verwendet.
-
Noch eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zur Codierung zu offenbaren, wobei ein Renderer einen oder mehrere Spieldurchgänge in einer Spielumgebung aufzeichnet, eine Vielzahl von Frames aus dem einen oder den mehreren Spieldurchgängen in eine Vielzahl von Zellen auf einer Heatmap sortiert und die Liste der sortierten Frames sammelt. Ein Codierer kann dann ein oder mehrere Frames aus der Liste der sortierten Frames codieren, um eine durchschnittliche codierte Framegröße für jede Zelle in der Heatmap zu berechnen und jede durchschnittliche codierte Framegröße mit einer pro Zelle normierten Codiererqualitätseinstellung zu verknüpfen. Der Codierer berechnet dann aus der durchschnittlichen codierten Framegröße jeder Zelle eine durchschnittliche Framegröße für die Heatmap und verwendet sie während des Spielens als Ansprechungen für die Codierung einer Videosequenz.
-
Noch eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zur Codierung zu offenbaren, wobei ein Renderer eine aus einer Vielzahl von Frames bestehende Videosequenz aufzeichnet und ein Codierer die Videosequenz in einem Multi-Pass-Modus codiert, der die Einstellungen der Codiererqualität gegenüber dem ersten Frame der Videosequenz optimiert. Der Codierer kann dann die Codierer-Qualitätseinstellung aufzeichnen. Der Renderer kann dann die Codierer-Qualitätseinstellungen auf das erste Frame der Videosequenz normieren und sie verwenden, um den Codierer darauf hinzuweisen, die Videosequenz während der Wiedergabe zu codieren.
-
Noch eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zum Codieren zu offenbaren, wobei ein oder mehrere Frames in einem Single-Pass codiert werden.
-
Noch eine weitere Aufgabe der vorliegenden Erfindung besteht darin, Systeme und Verfahren zur Codierung zu offenbaren, wobei die aus einem oder mehreren Spieldurchgängen extrahierten Daten eine Vielzahl von Frames und eine jedem der Frames zugeordnete Spielerposition einschließen.
-
Figurenliste
-
Eine umfassendere Beurteilung der Erfindung und vieler der damit verbundenen Vorteile ist unschwer möglich, da sie durch die folgende detaillierte Beschreibung besser verstanden wird, wenn sie im Zusammenhang mit den beigefügten Zeichnungen betrachtet wird. Es zeigen:
- 1 ein Diagramm einer beispielhaften Umgebung, in der ein in Echtzeit gerendertes Video an einen Remote-Betrachter übertragen wird;
- 2 ein Ablaufdiagramm, das die Phasen der Lastschätzung basierend auf den Codiereransprechungen beschreibt;
- 3 ein Diagramm einer beispielhaften Implementierung, die Framezeitspitzen und Framezeittäler erkennt und die Codierereinstellungen entsprechend ändert;
- 4 ein beispielhaftes Ablaufdiagramm, das die Verwendung von vorgenerierten Codiererqualitätseinstellungen während der Laufzeit eines Live-Renderers veranschaulicht;
- 5 ein beispielhaftes Ablaufdiagramm, das die Phasen der Vorgenerierung von Codiererqualitätseinstellungen für eine live gerenderte Sequenz gemäß einer Ausführungsform der Erfindung darstellt;
- 6 ein Diagramm der Daten, die bei einer beispielhaften Vorgenerierung der Codiererqualitätseinstellungen für eine maschineninterne Echtzeit-Schnittszene mit bestimmter Länge gemäß einer Ausführungsform der Erfindung erzeugt wurden;
- 7 ein Diagramm einer beispielhaften Vorgenerierung von Codiererqualitätseinstellungen für eine räumlich verwandte Sequenz gemäß einer Ausführungsform der Erfindung; und
- 8 eine beispielhafte Heatmap, aus der normierte Codiererqualitätseinstellungen gemäß einer Ausführungsform der Erfindung extrahiert werden können.
-
DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Bei der Beschreibung der bevorzugten Ausführungsformen der in den Zeichnungen dargestellten Erfindung wird aus Gründen der Übersichtlichkeit auf eine spezielle Terminologie zurückgegriffen. Die Erfindung soll sich jedoch nicht auf die so ausgewählten speziellen Begriffe beschränken, und es ist zu verstehen, dass jeder spezielle Begriff alle technischen Äquivalente umfasst, die ähnlich arbeiten, um einen ähnlichen Zweck zu erfüllen. Mehrere bevorzugte Ausführungsformen der Erfindung werden zur Veranschaulichung beschrieben, wobei davon ausgegangen wird, dass die Erfindung auch in anderen Formen verkörpert werden kann, die nicht ausdrücklich in den Zeichnungen dargestellt sind.
-
Während des typischen Betriebs eines Live-Streaming-Videospiels mit 60 Frames pro Sekunde berechnet der Codierer Bewegungsvektoren und Residuen. Wenn sich ein Videoframe aufgrund neuer Videoinformationen deutlich vom vorherigen Frame unterscheidet, können die vom Codierer berechneten Residuen größer als normal sein, was zu einem Anstieg der Netzwerkbandbreitennutzung führt. Ein Codierer passt seine Codierereinstellungen während des Live-Streaming als Reaktion auf Faktoren wie diese Bitratenspitzen an, kann die Einstellungen aber nur reaktiv anpassen.
-
In Fällen, in denen Videoframes in Echtzeit gerendert werden, kann der Codierer vorgewarnt werden, um die Codierungseinstellungen vorbeugend anzupassen, um die höchstmögliche Qualität für eine Bitrateneinschränkung zu gewährleisten. Der Prozess der Bereitstellung von Einstellungen, um die vom Codierer ausgewählten Einstellungen zu überschreiben, wird als Ansprechen bezeichnet. Da der Renderer Informationen über Frames hat, bevor sie codiert werden, ist der Renderer gelegentlich besser geeignet, entsprechende Codierereinstellungen auszuwählen und sollte den Codierer entsprechend hinweisen. Der Renderer kann den Codierer darauf hinweisen, wenn es sich bei einem eingehenden Frame um ein Bild mit hoher Entropie handelt, wenn ein eingehender Frame keine Beziehung zu vorherigen Frames hat oder aus anderen Gründen, die zu großen Residuen, Qualitätseinbußen oder Bitratenspitzen führen können.
-
1 ist ein Diagramm einer beispielhaften Umgebung, in der Echtzeit gerendertes Video an einen entfernten Betrachter live übertragen wird. Der Server 100 kann aus jeder Hardware bestehen, die in der Lage ist, gleichzeitig einen Echtzeit-Rendering-Prozess 102 (hierin auch als „Renderer“ bezeichnet) und einen Streaming-Codec 104 (hierin auch als „Codierer“ bezeichnet) auszuführen. Der Server 100 kann aus einer oder mehreren Hardwarevorrichtungen bestehen, einschließlich eines oder mehrerer Telemetrieserver 105, die Telemetriemessungen durchführen, wie nachfolgend erläutert. Der Server 100 und der Telemetrieserver 105 können lokal oder entfernt vom Rendering-Prozess 102 und dem Codec 104 sein. Der Codec 104 muss auch die Fähigkeit besitzen, seine Codiererqualitätseinstellungen durch direktes Melden oder einen anderen in der Technik bekannten Überwachungsprozess an den Renderingprozess 102 zurückzugeben. Der codierte Videostrom wird über ein Netzwerk an ein Client-Gerät 106 übertragen. Der Client 106 kann aus jeder Hardware bestehen, die in der Lage ist, den Videostrom zu decodieren und anzuzeigen.
-
2 ist ein Ablaufdiagramm, das die Phasen der lastschätzbasierten Codierer-Ansprechung umreißt. Während der Renderer ein Video generiert, sollte der Rendering-Prozess oder ein anderer serverseitiger Prozess nach Informationen suchen, die die Codierung eines Frames bei „ÜBERWACHEN AUF EIN EREIGNIS“, Schritt 200, ändern würden. Dies kann Informationen wie die Anzahl der Draw-Aufrufe an den Renderer während dieses Frames, ein Versuch, die Größe der codierten Residuen basierend auf der Anzahl der Pixel, die zum ersten Mal in einem Frame erscheinen, zu berechnen, oder andere Informationen einschließen, die versuchen, die Renderleistung mit der Codiererleistung zu korrelieren. Die überwachten Informationen können jede Meldung, jedes berechnete Ergebnis, jedes Ergebnis oder einen anderen diskret messbaren Wert einschließen, der während des Laufzeit-Rendering-Prozesses auftritt. Wenn Informationen gelesen werden, die darauf hindeuten, dass sich die codierte Framegröße deutlich von der codierten Framegröße des vorherigen Frames unterscheidet, wird diese Information als Ereignis bezeichnet.
-
Das Ereignis kann seinen Ursprung im Renderer haben, wie in 3 beschrieben, wo eine beispielhafte Implementierung der Spitzenerkennungsüberwachung im Renderingprozess die Renderingzeit jedes Frames überwacht, um ungewöhnlich lange oder ungewöhnlich kurze Framezeiten zu erkennen. In diesem Fall wird eine ungewöhnliche Frame-Renderingzeit als Ereignis betrachtet.
-
Wenn der Renderer ein Ereignis empfängt, kann es sein, dass einige zusätzliche Berechnungen am Renderer erforderlich sind, um Codierer-Qualitätseinstellungen zu erzeugen, um den Codierer bei „VORBEREITEN DER CODIERER-QUALITÄTSEINSTELLUNGEN FÜR DEN AKTUELLEN FRAME“, Schritt 202, darauf hinzuweisen. Diese Berechnungen können auch das Ändern von Informationen einschließen, die während der Ereignisüberwachung des vorherigen Schrittes gemessen wurden. Diese Berechnungen können auch das Ändern der Laufzeit-Codiererqualitätseinstellungen einschließen, die von dem Codierer an den Renderer auf jedem Frame gemeldet werden und bei Bedarf unter „MELDEN DER CODIEREREINSTELLUNGEN FÜR JEDEN CODIERTEN FRAME“, Schritt 204, verfügbar sein sollten. Die erzeugten Codierer-Qualitätseinstellungen werden vom Renderer an den Codierer bei „ANSPRECHEN DES CODIERERS MIT VORBEREITETEN CODIERER-EINSTELLUNGEN“ 206 gesendet. Der Renderer wird weiterhin auf Ereignisse in zukünftigen Frames überwachen.
-
In Beispiel von 3, wenn ein Frame eine ungewöhnlich lange Renderingzeit erfordert, weist der Renderer den Codierer darauf hin, die Qualitätseinstellungen proportional zur Größe dieser Framezeitspitze zu reduzieren. Um den Einstellwert für die Codiererqualität vorzubereiten, kann der Renderer die gemessene Framezeit aus dem aktuellen Frame, die gemessenen Framezeiten einer bestimmten Anzahl vorhergehender Frames und die Laufzeit-Codierer-Qualitätseinstellungen, wie von den Codierer gemeldet, verwenden. Diese Berechnungen werden im Zusammenhang mit der Diskussion von 3 näher erläutert.
-
Andere Prozesse, die auf dem Server ausgeführt werden, haben möglicherweise auch Zugriff auf Frame-Informationen, die verwendet werden können, um die Codierereinstellungen anzuzeigen. So kann beispielsweise eine Spiel-Engine, die einen Renderer enthält, die gemessene Auswirkung auf die codierte Videobandbreite durch visuelle Effekte, die durch das Spiel ausgelöst werden, nutzen, um die Einstellungen der Codiererqualität zu verringern. Um Informationen über die zusätzlichen Codierungskosten eines bestimmten visuellen Effekts zu erhalten, muss ein Entwickler möglicherweise einen Effekt anwenden und die Erhöhung der Bitrate beim Codieren mit verschiedenen Einstellungen der Codiererqualität messen. Die Messungen können verwendet werden, um eine Qualität auszuwählen, bei der die codierte Framegröße für einen Frame, der den visuellen Effekt enthält, ungefähr die gleiche codierte Framegröße hat wie ein vorheriger Frame, der den visuellen Effekt nicht enthielt. Die Differenz zwischen der für den visuellen Effekt gewählten Qualitätseinstellung und der Standardqualitätseinstellung wird als Einstellungsdelta bezeichnet. Der Codierer kann hingewiesen werden, die gewählte Qualität zu verwenden, oder hingewiesen werden, die aktuelle Qualität um das gemessene Einstellungsdelta zu verringern. Die Ergebnisse sollten in einem Format gespeichert werden, das ein visuelles Effektereignis leicht in den zugehörigen Codierer-Hinweis übersetzen kann, wie beispielsweise eine Nachschlagetabelle oder eine andere Art von indiziertem Array.
-
3 ist eine beispielhafte Implementierung, die Framezeitspitzen und Framezeittäler erkennt und dann die Codierereinstellungen entsprechend ändert. Dieses Beispiel verwendet die Korrelation zwischen Renderingzeit und Bildentropie, um den Effekt auf die Bitrate des Videostroms abzuschätzen. Wenn ein Frame eine Menge an neuen visuelle Informationen enthält, d.h. zusätzliche Elemente, die zum ersten Mal zum Frame beitragen, kann es im Vergleich zu den vorherigen Frames länger dauern, den Frame darzustellen. Wenn beispielsweise ein Frame mit etwa der gleichen Framezeit wie das vorherige Frame wiedergegeben wird, ist es wahrscheinlich, dass sich die Umgebung nicht wesentlich verändert hat. Diese implizite Korrelation ist besonders deutlich bei einem Egospiel/Maschine. Wenn die gerenderte Framezeit plötzlich höher ist, impliziert das, dass etwas in der Umgebung neu eingeführt wird. Der Codierer wird auch mit neuen Videoinformationen zu kämpfen haben, wie z.B. plötzliche Explosionseffekte auf dem Bildschirm oder plötzliche neue Geometrien auf dem Bildschirm. Ebenso erhöhen viele neue Informationen in einem Frame die Größe der von dem Codierer berechneten Residuen. Daher kann die Überwachung auf Spitzenwerte bei der Renderingzeit Bilder identifizieren, die wahrscheinlich Hoch-Entropie-Bilder enthalten, bevor sie zu einem Anstieg der Bitrate des Videostroms führen können.
-
In der Signalverarbeitung und der statistischen Analyse wird ein rollierender Durchschnitt verwendet, um kurzfristige Ausreißer zu identifizieren und gleichzeitig langfristige Trends zu berücksichtigen. Ein rollierender Durchschnitt wird berechnet, indem das arithmetische Mittel einer bestimmten Anzahl von vorherigen Datenpunkten ermittelt wird; der Satz von vorherigen Datenpunkten, der zur Berechnung des rollierenden Durchschnitts verwendet wird, wird als Gleitfenster bezeichnet. Im Falle des Live-Rendering kann die Identifizierung von Framezeiten, die von der rollierenden durchschnittlichen Framezeit abweichen, Hoch-Entropie-Frames identifizieren. Die rollierende durchschnittliche Framezeit 300 in diesem Beispiel ist die durchschnittliche Framezeit für das vorherige rollierende Fenster. Das heißt, die Framezeiten werden für jeden Frame im rollierenden Fenster summiert, dann wird die Summe durch die Anzahl der Frames im rollierenden Fenster dividiert. Die Größe des Gleitfensters kann basierend auf der typischen Häufigkeit langfristiger Framezeit-Trends, die während des Laufzeit- Profilierung gemessen werden, um typische Datentrends zu untersuchen, angepasst werden. Je kleiner die Größe des Gleitfensters, desto energischer wird der Codierer angewiesen, da mehr False Positives erkannt werden können. Bei einer Gleitfenstergröße von beispielsweise zehn Frames wird die durchschnittliche Framezeit basierend auf den letzten zehn Framezeiten berechnet. Als Nebeneffekt eines Tiefpassfilters kann es bei einem zu kleinen Gleitfenster mehr False Positives geben, als bei der Peak-Erkennung erforderlich sind. Es kann einen Frame als „außergewöhnlich beschäftigt“ einstufen, wenn in Wirklichkeit die längere Framezeit durch ein langfristiges Verhaltensmuster erklärt wird, das häufig im Renderer auftritt. Die rollierende durchschnittliche Framezeit 300 wird von einer oberen Toleranz 302 und einer unteren Toleranz 304 begleitet. Die Toleranz kann angepasst werden, um typische kurzfristige Trends in der Framezeit zu identifizieren. Für einen Echtzeit-Renderer mit 60 Frames pro Sekunde kann eine Toleranz von ±1 ms oder etwa 6,25% ausreichend sein. Die Framezeiten können innerhalb der Toleranz der rollierenden durchschnittlichen Framezeit variieren, ohne dass ein Codierer-Ansprechen ausgelöst wird. Das Finden der geeigneten Fenstergröße und Toleranzwerte kann eine Laufzeit-Profilierung erfordern, um typische Trends in der Framezeit zu bestimmen. Beispielsweise kann ein Spiel, das mit 100 Frames pro Sekunde läuft, nur die Schatten jedes zweiten Frame aktualisieren, was zu einem typischen Jitter von 1 ms führt, was eine Toleranz von mehr als 10% erfordert. Umgekehrt könnte ein Spiel mit 30 Frames pro Sekunde bei einer sehr stabilen Framezeit von 33 ms komfortabel laufen, wobei der anspruchsvollste visuelle Effekt nur 0,5 ms beiträgt, so dass die Toleranz bis zu 1,5% betragen kann.
-
Die Framezeit für den aktuellen Frame wird mit der rollierenden durchschnittlichen Framezeit verglichen. Liegt die aktuelle Framezeit außerhalb der Toleranzgrenzen, wird die Qualität am Codierer eingestellt. Toleranzgrenzen können durch Messen der Framezeiten unter Verwendung eines Prozesses namens Profilierung berechnet werden, um die typischen Änderungen der Framezeit zwischen benachbarten oder fast benachbarten Frames (kurzfristige Trends) und die Änderungen der Framezeit über bestimmte Fenster (wie periodisch wiederkehrende Muster oder andere langfristige Trends) zu untersuchen. Die Größe und Toleranz des Gleitfensters kann dann so lange angepasst werden, bis das Codierer-Ansprechen nur in Hoch-Entropie-Momenten/ausgelasteten Momenten ausgelöst wird, nicht aber in Momenten, in denen sich der Spieler bewegt und die Umgebung erkundet. Überschreitet die Framezeit die obere Toleranz 302, wie im Beispiel von „FRAME 2“ 306, wird die Codierungsqualität verringert. Liegt die Framezeit unter der unteren Toleranz 304, wie im Beispiel von „FRAME 5“ 308, wird die Codiererqualität erhöht. In bestimmten Ausführungsformen kann die Codierungsqualität wieder bis zur vollen Kapazität erhöht werden, wenn die Framezeit unter die Toleranz fällt. Abhängig von der Implementierung kann ein System auch die Qualitätssicherung langsamer skalieren, indem es eine Skalierungsmethode anwendet, die derjenigen ähnelt, die zur Verringerung der Qualität verwendet wird.
-
Ein beispielhaftes Ansprechverfahren kann die Qualität zwischen einer Obergrenzen 310-Qualitätseinstellung und einer Untergrenzen-Qualitätseinstellung 312 skalieren. So kann beispielsweise die Obergrenze die Standardqualitätseinstellung und die Untergrenze einige Prozentsätze, wie beispielsweise 50%, der Standardqualität sein. Wenn ein Framezeitspitze über die Toleranz hinausgeht, können die Qualitätseinstellungen linear zwischen der oberen und unteren Grenze skaliert werden, basierend auf der Größe der Framezeitspitze über der Toleranz. Wenn eine Framezeit unter die Toleranz fällt, können die Qualitätseinstellungen auf den oberen Grenzwert zurückgesetzt werden.
-
Um den Qualitätsskalierungswert für eine Framezeit außerhalb der Toleranz zu berechnen, sollte zunächst die Framezeit in Bezug auf die rollierende durchschnittliche Framezeit nach der folgenden Gleichung (1) beispielhaft normiert werden.
-
Subtrahieren von 1 von der normierten Zeit führt zur Abweichung des Frames von der rollierenden durchschnittlichen Framezeit. Division der Abweichung durch die Toleranz und die Subtraktion von 1 liefert einen Skalierungswert. Dieser Skalierungswert sollte zwischen 0 und 1 fest fixiert werden; alle negativen Skalierungswerte sollten auf 0 und alle Werte über 1 sollten auf 1 fixiert werden, und zwar beispielhaft gemäß der folgenden Gleichung (2).
-
Der fest fixierte Skalierungswert kann verwendet werden, um zwischen der Obergrenzen-Qualitätseinstellung und der Untergrenzen-Qualitätseinstellung zu interpolieren. Ein fest fixierter Skalierungswert von 0 repräsentiert die Qualität der Obergrenze und ein fest fixierter Skalierungswert von 1 repräsentiert die Qualität der Untergrenze, beispielhaft gemäß der folgenden Gleichung (3).
(3) Skalierte Qualitätseinstellung = max - (Skalierungswert * (max - min))
-
Wenn in dem Beispiel „FRAME 2“ 306 16 ms dauert, wenn der rollierende Mittelwert 15 ms beträgt, ergibt sich ein Skalierungswert von 0,025 oder 2,5%. Wenn der Obergrenzenqualitätswert die Standardqualitätseinstellungen ist und die Untergrenze 50% der Standardqualität beträgt, beträgt die skalierte Qualitätseinstellung für diesen Frame 98,75% der Standardqualität.
-
Wenn „Frame 5“ 308 14,25 ms dauert, wenn der rollierende Mittelwert 15,25 ms beträgt, liegt die Framezeit unterhalb der Toleranz und der Skalierungswert wird auf 0 fixiert, die skalierte Qualitätseinstellung wird auf die Obergrenzenqualitätseinstellungen gesetzt.
-
Mehrere Codierer-Ansprechverfahren können übereinander geschichtet werden, indem die Werte der vorbereiteten Codiererqualitätseinstellungen aus dem Vorbereitungsschritt kombiniert werden, wie in Schritt
400 in
4 dargestellt, bevor der Wert der aggregierten Codiererqualitätseinstellungen zum Ansprechen an den Codierer gesendet wird, wie in Schritt
406 in
4 dargestellt. In einer Ausführungsform kann das arithmetische Mittel der vorbereiteten Codiererqualitätseinstellungen gefunden werden, um einen Einzelwert zu erzeugen, der die Beiträge aller Quellen gleichermaßen mit einschließen. In einer weiteren Ausführungsform kann ein gewichtetes arithmetisches Mittel berechnet werden, indem jeder Quelle ein Gewicht zugewiesen wird, das einen Wert für die Codiererqualitätseinstellung für das Codierer-Ansprechen beitragen kann. Die zugewiesenen Gewichtungen können verwendet werden, um eine beitragende Quelle stärker zu gewichten als eine andere. So können beispielsweise Beiträge aus einem Framezeitspitzenereignis eine stärkere Korrelation zu Änderungen der codierten Bitrate aufweisen, wenn sie mit Beiträgen von einem einzelnen visuellen Effektereignis verglichen werden, so dass es wünschenswert sein kann, die Beiträge aus dem Framezeitspitzenereignis stärker zu gewichten. Das gewichtete arithmetische Mittel kann unter Verwendung der Standarddefinition berechnet werden, und zwar beispielhaft nach der folgenden Gleichung (4), wobei i=1 die erste Zahl in dem Satz von n Qualitätseinstellungen darstellt. Zu beachten ist, dass die Indizes in mathematischen Sätzen bei 1 beginnen, anders als bei der Programmierung von Indizes, die bei 0 beginnen.
-
4 ist ein beispielhaftes Ablaufdiagramm, das die Verwendung von vorgenerierten Codiererqualitätseinstellungen während der Laufzeit eines Live-Renderers veranschaulicht. Der Renderer sollte nach den Sequenzen suchen, die einen Satz von vorgenerierten Codiererqualitätseinstellungen unter „ÜBERWACHEN AUF SPIELSEQUENZEN“, Schritt 400, aufweisen. Diese Sequenzen können zeitlich vorhersehbare Sequenzen von Frames einschließen, wie beispielsweise Echtzeit-Schnittszenen in der Maschine, oder räumlich vorhersehbare Sequenzen, die während der Laufzeit in Zeitreihen umgewandelt werden können, wenn die Position des Spielers bekannt ist. Zeitlich vorhersehbare Sequenzen sind Sequenzen von Frames, wobei jeder Frame eine bekannte Beziehung zu seinem benachbarten Nachbarn hat. Das heißt, eine Sequenz von Frames ist zeitlich vorhersehbar, wenn sie eine konsistente Länge und Ordnung aufweist und zwei benachbarte Frames eine konsistente Beziehung in Pixeldaten und Bewegungsdaten aufweisen. Räumlich vorhersagbare Sequenzen stellen eine gewisse Beziehung zwischen zwei benachbarten virtuellen Orten her, die verwendet werden können, um Rückschlüsse auf eine zeitliche Sequenz zu ziehen, die konstruiert wird, wenn der virtuelle Raum während der Laufzeit des Renderers durchlaufen wird. Das heißt, zwei Orte in einem virtuellen Raum sind räumlich verwandt, wenn sie eine zeitlich vorhersehbare Sequenz erzeugen, wenn sich eine virtuelle Kamera zwischen den beiden virtuellen Orten bewegt. So sind beispielsweise in einem Videospiel zwei benachbarte Orte zeitlich miteinander verbunden, wenn das Verschieben zwischen den beiden Orten ein Video erzeugt, in dem die Pixeldaten und Bewegungsdaten etwas konsistent sind. Dies gilt in der Regel für die meisten 3D-Level in Videospielen, da die Umgebung und der Hintergrund, der den Spieler umgibt, typischerweise an festen Positionen wiedergegeben werden, wenn der Spieler den Level durchläuft.
-
Die Vorgenerierung der Codiererqualitätseinstellungen wird in Verbindung mit 5 näher beschrieben. Die vorgenerierten Codiererqualitätseinstellungen werden auf der Festplatte des Servers in einem laufzeitlesbaren Format wie einer Lookup-Tabelle oder einer Heatmap gespeichert. Wenn der Beginn einer Sequenz erkannt wird, werden die vorgenerierten Codiererqualitätseinstellungen für die erkannte Sequenz gelesen und vorbereitet unter „FINDEN VORGENERIERTER CODIERER-EINSTELLUNGEN FÜR SPIELSEQUENZ“, Schritt 602. Codierer-Qualitätseinstellungen müssen möglicherweise vorbereitet werden, wenn sie vor der Speicherung normiert wurden. Die Vorbereitung kann das Multiplizieren normierter Codiererqualitätseinstellungen mit der Laufzeit-Codiererqualitätseinstellung, einer Laufzeit-Codiererqualitätseinstellung oder einer Codiererqualitätseinstellung aus einer anderen Quelle einschließen. In bestimmten Ausführungsformen kann die Erkennung eines Ereignisses für jede der vorgenerierten Qualitätseinstellungen des Sequenzgebers erfolgen. In anderen Ausführungsformen kann zur Laufzeit eine Überprüfung durchgeführt werden, wenn jede Schnittszene beginnt, um festzustellen, ob sie sich in der Liste der Sequenzen befindet, für die Einstellungen existieren. Wenn die vorgenerierten Codiererqualitätseinstellungen vor dem Speichern normiert wurden, erfolgt ein Multiplikationsschritt zur Vorbereitung der Codiererqualitätseinstellungen. In dem in Verbindung mit 6 beschriebenen Beispiel werden Codiererqualitätseinstellungen für die Frames in einer Echtzeit-Schnittszene in der Maschine erzeugt und auf den ersten Frame der Sequenz normiert. Für eine solche normierte Zeitserie müssen die Einstellungen der Codiererqualität vorbereitet werden, indem die normierten Werte mit der Laufzeitcodiererqualitäteinstellung für den ersten Frame in der Sequenz multipliziert werden. Die Codiererqualitätseinstellungen werden von dem Codierer auf jedem Frame gemeldet und sollten nach Bedarf verfügbar sein unter „MELDEN VON CODIEREREINSTELLUNGEN FÜR JEDEN CODIERTEN FRAME“, Schritt 604. In dem in Verbindung mit 7 beschriebenen Beispiel werden für jeden Standort in einer Map Codiererqualitätseinstellungen generiert und auf die durchschnittliche Codiererqualitätseinstellung über die gesamte Map normiert. Für eine solche normierte räumliche Serie müssen die Codiererqualitätseinstellungen durch Multiplikation der normierten Werte mit der Laufzeit-Codiererqualitätseinstellung für den ersten Frame in der Sequenz vorbereitet werden.
-
Die Codiererqualitätseinstellungen werden für jeden Frame in der Reihenfolge bei „ANSPRECHEN DES CODIERERS MIT VORGENERIERTEN CODIEREREINSTELLUNGEN“, Schritt 606, an den Codierer gesendet. Der Codierer verwendet die von dem Renderer gesendeten Codiererqualitätseinstellungen, um den nächste Frame zu codieren. Der Renderer bereitet weiterhin die vorgenerierten Codierer-Qualitätseinstellungen vor und steuert den Codierer durch Ansprechen auf jedem Frame, bis die Sequenz abgeschlossen ist. Wenn die Sequenz endet, überwacht der Renderer weiterhin die nächste Sequenz. Für das in Verbindung mit 6 beschriebene maschinelle Echtzeit-Schnittszenenbeispiel wird der Codierer für jeden Frame in der Schnittszene angesprochen, bis die Schnittszene endet. Bei dem in Verbindung mit 5 beschriebenen beispielhaften Heatmap-Verfahren wird der Codierer für die gesamte Dauer darauf hingewiesen, dass sich der Spieler innerhalb der Grenzen des durch die Heatmap definierten Bereichs befindet.
-
5 ist ein Ablaufdiagramm, das die Phasen der Vorgenerierung von Codierer-Qualitätseinstellungen für eine live gerenderte Sequenz umreißt. Codiererqualitätseinstellungen können für jede Sequenz vorgeneriert werden, die eine vorhersehbare und messbare zeitliche oder räumliche Komponente aufweist. Eine Sequenz kann unvorhersehbare Abschnitte haben, wie z.B. eine maschinelle Echtzeit-Schnittszene, die die Rüstung, die gerade vom Spielercharakter getragen wird, wiedergibt, oder eine maschinelle Schnittszene, die es den Spielern ermöglicht, sich während der Wiedergabe der Ereignisse zu bewegen oder umzusehen. Es sollte eine Sequenz identifiziert werden, die vorhersagbare Teile aufweist, indem nach benachbarten Frame-Beziehungen in Zeitreihenfolgen gesucht wird, wie z.B. maschinelle Echtzeit-Schnittszenen oder Nahlage-Beziehungen in virtuellen Räumen, die während der Laufzeit verwendet werden, um Frame-Sequenzen wie beispielsweise überfahrbare Bereiche in Videospielebenen zu generieren. Eine solche Sequenz sollte bei „SEQUENZ AUSWÄHLEN“, Schritt 500, identifiziert sein.
-
Am Codierer sollten die Codierer-Qualitätseinstellungen für die Sequenz mit dem Ziel generiert werden, eine konstante Bitrate bei „GENERIEREN VON CODIERER-EINSTELLUNGEN FÜR SEQUENZ“, Schritt 502, aufrechtzuerhalten. Codierer-Qualitätseinstellungen für eine maschinelle Echtzeit-Schnittszene können berechnet werden, indem ein Video der Schnittszene aufgenommen und das Video mit einem Multi-Pass-Codiermodus codiert wird. Die Multi-Pass-Codierung codiert den ersten Frame und verwendet die Größe des codierten ersten Frames, um alle nachfolgenden Frames einzuschränken. Wenn jeder Frame codiert wird, wird die codierte Größe mit der codierten Größe des ersten Frames verglichen und die Qualitätseinstellungen werden für den aktuellen Frame angepasst, bis die codierten Frames in der Nähe der Größe liegen. In bestimmten Ausführungsformen kann die Reihenfolge der Frames mit einer festen Anzahl von Durchläufen in einem Multi-Pass-Codiermodus codiert werden. In anderen Ausführungsformen kann die Sequenz durch aufeinanderfolgende Durchläufe in einem Multi-Pass-Codiermodus hindurchgeleitet werden, bis sich die Framegrößen auf einen Wert einstellen und nicht zwischen dem letzten Codierdurchlauf und dem vorletzten Codierdurchlauf wechseln. Die Qualitätseinstellungen des Codierers können aufgezeichnet werden, während sie aus dem resultierenden codierten Video generiert oder extrahiert werden. Die erzeugten Codiererqualitätseinstellungen werden während der Laufzeit verwendet, um die Bandbreite während der gegebenen Sequenz auszugleichen und so Bitratenspitzen und -einbrüche zu vermeiden. Im Gegensatz zur Vorcodierung des Videos einer vorab gerenderten Schnittszene und deren Speicherung zur Wiedergabe ermöglicht die Generierung von Codierer-Qualitätseinstellungen auf diese Weise, dass die Echtzeit-Schnittszenen in der Maschine kontextbasierte Inhalte wie anpassbare Spieler-Rüstungen, Waffen oder andere schmückende Elemente enthalten, während sie gleichzeitig von der Bandbreitenausgleichung durch vorgenerierte Qualitätseinstellungen profitieren.
-
Ein ähnlicher Prozess kann viele Male wiederholt werden, um Codierereinstellungen für eine räumlich verwandte Sequenz zu erzeugen. Der Prozess wird durch den beispielhaften Datenfluss in Verbindung mit 7 näher beschrieben.
-
Bei maschinellen Echtzeit-Schnittszenen sollten die Einstellungen der Codiererqualität für jeden Frame normiert werden, indem sie durch den Einstellwert der Codiererqualität des ersten Frames in der Sequenz dividiert werden. Dadurch können dynamische Elemente der Sequenz, wie z.B. Spielerpanzer oder schmückende Elemente, in den finalen Codiererqualitätseinstellungen dargestellt werden, die zur Laufzeit vorbereitet werden. Bei räumlich zusammenhängenden Sequenzen, die als Heatmap gespeichert werden, sollte jede Codiererqualitätseinstellung auf die durchschnittliche Codiererqualitätseinstellung über den gesamten durch die Heatmap definierten Bereich normiert werden, indem jede Codiererqualitätseinstellung durch die Map-weite durchschnittliche Codiererqualitätseinstellung dividiert wird. Eine beispielhafte Heatmap ist in 8 dargestellt. Die normierten Codiererwerte, die beim Rendern generiert werden, sollten in das entsprechende laufzeitlesbare Format organisiert werden, wie beispielsweise eine Liste der Codiererqualitätseinstellungen für jeden Frame in einer Zeitreihe oder eine Heatmap, die eine Codiererqualitätseinstellung für jeden Ort in einer Map definiert, und unter „NORMIEREN UND SPEICHERN DER CODIERERQUALITÄTSEINSTELLUNGEN FÜR JEDEN FRAME IN DER SEQUENZ“ gespeichert werden, Schritt 504.
-
6 zeigt, wie die Daten bei einer beispielhaften Vorgenerierung von Codierer-Qualitätseinstellungen für eine maschinelle Echtzeit-Schnittszene mit definierter Länge generiert werden. Im Gegensatz zu vorgerenderten Schnittszenen werden Echtzeit-Schnittszenen während der Laufzeit mit derselben Renderingmaschine generiert, die auch für den Rest der live gerenderten Videoausgabe verwendet wird. Eine maschinelle Echtzeit-Schnittszene kann auch kontextuelle Informationen über den Spielstatus einschließen, wie z.B. schmückende Elemente, die der Spieler trägt, Nicht-Spieler-Charaktere in der Gruppe des Spielers oder andere Spielzustände, die durch die Wahl des Spielers gesteuert werden. Obwohl die Echtzeit-Schnittszenen in der Maschine historisch schlechter sind als die vorgerenderten Schnittszenen, werden sie immer häufiger, da die live gerenderte visuelle Klangtreue näher an die vorgerenderte visuelle Klangtreue heranrückt. Maschinelle Echtzeit-Schnittszenen werden auch dort verwendet, wo mehrere Optionen, wie z.B. Sprachoptionen, Auflösungsoptionen und Charakteranpassungsoptionen, die Videoausgabe einer Schnittszene beeinflussen könnten, so dass eine Spiele-CD nicht mehrere Versionen einer vorab gerenderten Schnittszene enthalten muss.
-
In diesem Beispiel wird eine Echtzeit-Schnittszene mit 480 Bildern Länge, ungefähr 8 Sekunden lang für ein Spiel mit 60 Bildern pro Sekunde ausgewählt. Diese Schnittszene spielt für alle Spieler die gleiche Serie von Ereignissen ab. Das Schnittszene-Video wird am Renderer aufgenommen und produziert eine Serie von 480 Bildern in der aufgezeichneten Sequenz 600. Die aufgezeichnete Sequenz 600 wird mit einem Multi-Pass-Codiermodus codiert. Während der Codierung jeden Frames in der aufgezeichneten Sequenz ändert der Multi-Pass-Codierungsprozess die Codiererqualitätseinstellungen, so dass die codierte Framegröße näher an die codierte Größe des ersten Frames heranrückt. er erste Frame der Sequenz wird als Framegrößenreferenz verwendet, um eine konsistente Bitrate über die gesamte codierte Sequenz zu gewährleisten.
-
Die Multi-Pass-Codiererqualitätseinstellungen 602 werden entweder während des Codiervorgangs am Codierer aufgezeichnet oder aus den von dem Codierer erzeugten codierten Ergebnissen extrahiert. Die Qualitätseinstellungen des Codierers sind eine geordnete Liste von Floats. Bei 4 Bytes pro Float verbraucht die gesamte geordnete Liste von 480 Floats nur 1.920 Bytes an Daten. Die geringe Dateigröße ermöglicht es einem Live-Renderer, viele Sätze von vorgenerierten Codierereinstellungen während der Laufzeit im Speicher zu speichern, was zu einem positiven Ergebnis führen kann, wenn der hierin beschriebene Prozess für jede Spielsequenz durchgeführt wird, ohne in Speicherbeschränkungen zu geraten.
-
Am Renderer werden die Codiererqualitätseinstellungen beispielhaft gemäß der folgenden Gleichung (5) auf den ersten Frame normiert.
Die normierten Codiererqualitätseinstellungen
604 werden als geordnete Liste von Floats, vorzugsweise im Codierer, gespeichert.
-
Die geordnete Liste der normierten Qualitätseinstellungen 604 wird gelesen, wenn die Schnittszene während der Laufzeit zu spielen beginnt. Die normierten Qualitätseinstellungen werden mit der Laufzeit-Codiererqualitätseinstellung für den ersten Frame in der Sequenz multipliziert, wie sie aus dem Codierer an die Renderingmaschine gemeldet wird, und dann verwendet, um den Codierer für jeden nachfolgenden Frame in der Schnittszene zu kennzeichnen. In bestimmten Ausführungsformen akzeptiert die H.264-standardkonforme Bibliothek ffmpeg im Constant Rate Factor (CRF)-Modus einen Überschreibungs-Quantisierungsparameterwert in der Befehlszeile, die den Schalter -crf verwendet.
-
Die Normierung der Codiererqualitätseinstellungen ermöglicht es, die vorgenerierten Codiererqualitätseinstellungen während der Laufzeitwiedergabe der Schnittszene in mehreren verschiedenen Kontexten zu verwenden. Wenn beispielsweise die normierten Codierereinstellungen 604 mit der vom Codierer für den ersten Frame in der Sequenz gemeldeten Laufzeit-Codierqualität multipliziert werden, ergibt sich für die gesamte Schnittszene eine konsistente Bitrate, unabhängig von einer anpassbaren Spieler-Rüstung, die der Spieler trägt. Ebenso berücksichtigt das Verfahren die verschiedenen Rendering-Einstellungen, wie z.B. die Bildschirmauflösung, wobei eine maschinelle Echtzeit-Schnittszene abgespielt werden kann.
-
7 ist ein Diagramm der beispielhaften Vorgenerierung von Codiererqualitätseinstellungen für eine räumlich verwandte Sequenz, wie sie beispielsweise zur Laufzeit generiert wird, wenn ein Spieler einen virtuellen Raum in einem Videospiel durchquert. Die Spielerposition in einem Videospiel kann im Allgemeinen mit der Bildentropie des Ausgabevideos korreliert werden, da die Ansicht eines Spielers einen überproportionalen Einfluss auf die Bitrate des codierten Videostroms hat. Diese Korrelation ist am deutlichsten beim Vergleich der codierten Videobitrate zwischen Videos, die in offenen Bereichen aufgenommen wurden, und Videos, die in engen Bereichen aufgenommen wurden. Offene Bereiche, wie z. B. Außenbereiche, produzieren Videos mit einer höheren durchschnittlichen Bitrate, während enge Bereiche, wie z. B. Korridore, Videos mit einer niedrigeren durchschnittlichen Bitrate produzieren. Diese Beziehung entsteht, weil Außenbereiche in der Regel uneinheitlich sind, große Flächen mit vielen konkurrierenden Bewegungen, wie z.B. Umgebungsanimationen auf der Vegetation, während Innenbereiche eher aus statischer Architekturgeometrie bestehen, die kohäsive Bewegungsvektoren und kleinere Residuen erzeugen.
-
Eine Map kann durch ein Raster segmentiert werden und eine Codiererqualitätseinstellung kann für jede Zelle in der Map vorgeneriert werden, um eine Heatmap, wie in 5 dargestellt, der normierten Codiererqualitätseinstellungen zu bilden. Eine typische codierte Videobitrate für einen bestimmten Spielerstandort kann entweder mit mehreren echten Spieldurchgängen oder durch prozedural generierte Spieldurchgänge aufgenommen werden. Da reale Spieler unvorhersehbar sind, ist es oft unmöglich, prozedural Spieldurchgänge zu generieren, die genau erfassen, wie Spieler einen virtuellen Raum durchqueren. Prozedurale Spieldurchgänge können für alle erwarteten Querpfade generiert werden, um schnell eine Abdeckung der gesamten Map zu erzeugen, können aber auch unerwartete Querpfade verpassen, die von echten Spielern entdeckt werden können. Jeder Ansatz hat Nachteile: Die Verfolgung der realen Telemetrie benötigt deutlich mehr Zeit, aber die prozedural generierten Daten spiegeln möglicherweise nicht genau die realen Spielerfahrungen wider. In bestimmten Ausführungsformen kann eine Kombination aus beiden Aufnahmen verwendet werden, um eine genauere Heatmap zu erhalten.
-
Das aufgenommene Video sollte nicht nur Videoframes enthalten, wie in der aufgezeichneten Sequenz 600 von 6 gezeigt, sondern auch einen Spielerstandort für jeden Frame festlegen. Die Position des Spielers kann im 3D-Raum liegen oder auf die horizontale 2D-Ebene vereinfacht werden, wie sie durch eine Top-Down-Map dargestellt wird. Ausschnitte aus zwei beispielhaft aufgenommenen Spieldurchgängen, dem ersten aufgenommenen Spieldurchgang, der als „ERSTER AUFGENOMMENER SPIELDURCHGANG“ bei Schritt 700 dargestellt ist, und dem zweiten aufgenommenen Spieldurchgang, dem „ZWEITEN AUFGENOMMENEN SPIELDURCHGANG“, der als Schritt 702 dargestellt ist, werden in dem in Verbindung mit 7 beschriebenen beispielhaften Verfahren dargestellt. Die Videoframes werden zusammen mit den Positionen der Spieler aufgenommen. Jeder Videoframe in einem aufgenommenen Wiedergabevideo wird nach Standort in die entsprechende Zelle sortiert. In diesem Beispiel wird Frame 4 aus dem ersten aufgenommenen Spieldurchgang bei „ERSTER AUFGENOMMENER SPIELDURCHGANG“ in Schritt 700 angezeigt, und Frame 2 aus dem zweiten aufgenommenen Spieldurchgang wird bei „ZWEITER AUFGENOMMENER SPIELDURCHGANG“ in Schritt 702 angezeigt. Bei „Heatmap“, Schritt 704, werden beide in Zelle B6 bei „Zelle B6“, in Schritt 706 sortiert. Da diese Beispielzelle recht groß ist, zeigt die beispielhafte Heatmap in 8 eine Heatmap mit viel kleineren Zellen für eine höhere Auflösung.
-
Sowohl prozedural generierte als auch reale Spieldurchgänge können im Renderer generiert und neu codiert werden. Die resultierenden Spieldurchgangsaufnahmen können an einem zentralen Renderer-Standort gesammelt werden. Wenn mehrere Spieldurchgänge gesammelt werden, kann jede Zelle in der Heatmap mehrere Frames aufweisen, die an einer Stelle innerhalb der Zelle aufgenommen wurden. Zur Erfassung dieser Daten kann während der Entwicklung ein Telemetrieserver 105 verwendet werden. Die Rendering-/Spielmaschine kann dann die Telemetrie generieren und an einen zentralen Ort senden. Der Telemetrieserver 105 kann lokal oder entfernt vom Renderer sein. Die erzeugte Telemetrie kann auch manuell gesammelt werden, indem die erzeugten Telemetrie-Dateien von der lokalen Renderingmaschine manuell gesammelt und an einen zentralen Speicher gesendet werden. Das Beispiel von 7 zeigt den Anfang der Liste der zur Zelle B6 gehörenden Frames bei „ZELLE B6 FRAMES“, Schritt 708. Diese Liste der räumlich verwandten Frames wächst, wenn mehr Aufnahmen gesammelt oder generiert werden.
-
Die Sammlung von Bildern, die zu einer Zelle gehören, kann mit einem Single-Pass-Codiermodus codiert werden, der während des Livestreamings verwendet wird, mit einer Einstellung für die Ziel-Codiererqualität, die unter „ZIELQUALITÄTSCODIERUNG“, Schritt 710, angezeigt wird. Für jeden zu der Zelle gehörenden Frame wird eine codierte Framegröße generiert. Das Beispiel von 7 zeigt den Anfang der Liste der codierten Framegrößen der Zelle B6, die unter „CODIERTE FRAMGRÖSSE FÜR ZELLE B6 FRAMES“, Schritt 712, dargestellt ist. Diese codierten Framegrößen können gemittelt werden, um eine durchschnittliche codierte Framegröße für die Zelle zu finden. Das Beispiel von 7 zeigt die durchschnittliche codierte Framegröße der Zelle B6 bei „DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ZELLE B6“, dargestellt bei Schritt 714. Der Prozess sollte für alle Zellen in der Heatmap wiederholt werden, um eine durchschnittliche codierte Framegröße für jede Zelle zu finden. Die durchschnittlichen codierten Framegrößen sind für die Zellen B6 bei „DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSDE FÜR ZELLE B6“, gezeigt in Schritt 714, und für B7 bei „DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ZELLE B7“, gezeigt bei Schritt 716, als Darstellung der Liste der durchschnittlichen Framegrößen für alle Zellen in der Heatmap gezeigt.
-
Alle durchschnittlichen Framegrößen für jede Zelle sollten gemittelt werden, um eine Map-weite durchschnittliche Framegröße bei „DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ALLE ZELLEN“, gezeigt bei Schritt 718, zu finden. Diese Map-weite durchschnittliche Framegröße kann als Zielbandbreite verwendet werden. Die Zellen mit durchschnittlichen codierten Framegrößen, die größer als der Map-weite Durchschnitt sind, werden mit einer niedrigeren Codiererqualitätseinstellung neu codiert, bis die durchschnittliche Zellenframegröße fast gleich dem Map-weiten Durchschnitt ist. Ebenso werden die Zellen mit einer durchschnittlichen codierten Framegröße, die kleiner als der Map-weite Durchschnitt ist, mit einer höheren Codiererqualitätseinstellung wieder codiert, bis die durchschnittliche Zellbildgröße nahezu gleich dem Map-weiten Durchschnitt ist. In bestimmten Ausführungsformen kann die Reihenfolge der Frames für eine bestimmte Zelle mit einer festen Anzahl von Durchläufen in einem Multi-Pass-Codiermodus codiert werden. In anderen Ausführungsformen kann die Sequenz durch aufeinanderfolgende Durchläufe in einem Multi-Pass-Codiermodus geführt werden, bis sich die Framegrößen auf einen Wert einstellen und nicht zwischen dem letzten Codierdurchlauf und dem vorletzten Codierdurchlauf wechseln. In dem Beispiel von 7 ist die durchschnittliche codierte Framegröße für Zelle B6 bei Schritt 714 höher als die durchschnittliche codierte Framegröße für alle Zellen bei „DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ALLE ZELLEN“, dargestellt in Schritt 718. Die räumlich zusammenhängenden Frames, die zu Zelle B6 bei „ZELLE B6 FRAMES“, Schritt 708, gehören, werden im Kontext ihrer ursprünglichen Wiedergabesequenz am Codierer unter Verwendung eines Multipass-Codierungsmodus und einer Ziel-Framegröße bei „GERINGERE QUALITÄTSCODIERUNG“, Schritt 720 neu codiert, bis die durchschnittliche codierte Framegröße für Zelle B6 bei „GERINGERE DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ZELLE B6“, Schritt 724, fast die gleiche Größe aufweist wie die durchschnittliche codierte Framegröße für alle unter „ DURCHSCHNITTLICHE CODIERTE FRAMEGRÖSSE FÜR ALLE ZELLEN“, Schritt 718, dargestellten Zellen. Alle durchschnittlichen Framegrößen für Zellen sollten, wenn der Prozess für alle Zellen abgeschlossen ist, nahezu gleich groß sein.
-
Jede Zelle sollte eine zugehörige Codiererqualitätseinstellung aufweisen, die verwendet wird, um eine durchschnittliche codierte Framegröße für die Zelle zu erzeugen, deren Größe mit der Map-weiten durchschnittlichen codierten Framegröße vergleichbar ist. Die Qualitätseinstellungen für die einzelnen Zellen können durch die Map-weite Einstellung der durchschnittlichen Codiererqualität, beispielhaft in Übereinstimmung mit der folgenden Gleichung (6), normiert werden.
-
Während des Video-Streamings kann das Spiel die normierte Codiererqualitätseinstellung aus der Heatmap-Zelle ziehen, die der aktuellen Spieler-Position entspricht, und damit den Codierer durch Senden einer Überschreibung für die Qualitätseinstellung ansprechen. Wie vorstehend erläutert, akzeptiert die standardkonforme H.264-Bibliothek ffmpeg, die im CRF-Modus (Constant Rate Factor) läuft, in bestimmten Ausführungsformen einen Wert für die Quantisierungsparameter auf der Befehlszeile, indem sie den Schalter -erf verwendet, um den Codierer zu kennzeichnen. Eine beispielhafte Heatmap, aus der normierte Codiererqualitätseinstellungen entnommen werden können, ist in 8 dargestellt.
-
Da die Codiererqualitätseinstellungen normiert sind, können sie während des Vorbereitungsschritts, der unter „FINDEN VON VORGENERIERTEN CODIEREREINSTELLUNGEN FÜR DIE SPIELSEQUENCE“, Schritt 402, in 4 beschrieben ist, aus mehreren Quellen kombiniert werden, wie beispielsweise einer räumlich zusammenhängenden Sequenz und einer zeitlich zusammenhängenden Sequenz. Die normierten Werte können vor diesem Schritt multipliziert werden, um eine Codiererqualitätseinstellung zu generieren, die implizit die Auswirkungen auf die codierte VideoBitrate aus jeder Quellsequenz berücksichtigt. So wird beispielsweise der Standort des Spielers verwendet, um eine vorab generierte normierte Codiererqualitätseinstellung aus einer Heatmap zu lesen, und die Waffe des Spielers erzeugt eine Zündfolge, die eine vorgenerierte normierte Codiererqualitätseinstellung in Zeitreihen aufweist. Diese beiden normierten Werte werden während des Vorbereitungsschritts multipliziert, um den Einfluss von Spielerposition und Waffenwahl auf die codierte Videobitrate zu berücksichtigen.
-
Die vorstehende Beschreibung und die Zeichnungen sind nur als Veranschaulichung der Prinzipien der Erfindung zu betrachten. Die Erfindung ist nicht dazu bestimmt, durch die bevorzugte Ausführungsform eingeschränkt zu werden, und kann auf verschiedene Weise implementiert werden, die für einen Fachmann klar erkennbar sind. Zahlreiche Anwendungen der Erfindung sind für die Fachwelt unschwer erkennbar. Daher ist es nicht erwünscht, die Erfindung auf die offenbarten spezifischen Beispiele oder die genaue Konstruktion und Funktionsweise zu beschränken. Vielmehr können alle geeigneten Modifikationen und Äquivalente herangezogen werden, die in den Anwendungsbereich der Erfindung fallen.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- US 62488526 [0001]
- US 62/647180 [0001]
- US 62/655901 [0001]
- US 7844002 B2 [0005]
- US 2016/019816166 [0006]
- US 9697280 [0007]
- US 20170155910 A1 [0008]
- US 9774848 [0009]
- US 9749642 [0010]
- EP 1820281 B1 [0011]
- JP 0612151818 B2 [0012]
- US 2006/0230428 [0013]
- US 8154553 [0014]