Anwendungs-Streaming mit H.264 / H.265 in Echtzeit an Browser-Clients

1146
scriptify

Ich versuche, eine Lösung zu erstellen, die den visuellen Inhalt einer Windows-Anwendung (erstellt mit Unity 2017) an Browser-Clients überträgt. Diese Anwendungen bieten qualitativ hochwertige Inhalte, die 1: 1 in hoher Qualität mit möglichst geringer Latenz übertragen werden müssen. Im Wesentlichen ist dies ein sehr ähnlicher Anwendungsfall für das Streaming von Spielen, da neben dem Streaming ein bidirektionaler Kommunikationskanal zwischen dem Client und der gestreamten Anwendung eingerichtet wird, sodass der Benutzer mit der auf dem Server laufenden Anwendung interagieren kann.

Das Video wird direkt von Unity aus aufgenommen und als Rohvideo an einen zuvor erzeugten FFMPEG-Prozess weitergeleitet. FFMPEG konvertiert nun die Daten von Unity in einen geeigneten Stream. Außerdem möchte ich das NVIDIA Video Codec SDK verwenden, um den Vorgang zu beschleunigen.

Ist H.264 / H.265 ein geeignetes Format für diesen Anwendungsfall? Wenn ja, mit welchem ​​Server könnte der Videostrom übertragen werden und was kann auf der Clientseite verwendet werden (z. B. BroadwayJS https://github.com/mbebenita/Broadway )? Wenn nicht, was würden Sie vorschlagen?

Hinweis: Ich habe bereits versucht, eine Lösung mit JSMPEG zu implementieren (also mit mpeg-1 / mpeg-ts, ffmpeg und einem benutzerdefinierten Server), aber diese Implementierung hat mehrere Probleme wie hohe Bandbreitennutzung und hohe CPU-Auslastung. Ich hoffe, dass ich durch die Verwendung von H.264 / H.265 in Kombination mit dem NVIDIA Video Codec SDK die Hardware- und Bandbreitennutzung zumindest verringern kann.

Auf der Clientseite können Flash oder Silverlight nicht verwendet werden.

0
Es ist schon keine Echtzeit mehr. Selbst eine NVIDIA-GPU benötigt Zeit, um ein Signal erneut zu codieren. Haben Sie versucht, den Stream einfach mit Ihrem Browser zu öffnen? Seth vor 6 Jahren 1
Ok, welches Format würden Sie vorschlagen? Wie kann ich einen Stream öffnen, ohne einen Server zu verwenden, der ihn entsprechend weiterleitet (beachten Sie, dass ich bezüglich dieses Themas ein Neuling bin)? scriptify vor 6 Jahren 0
Ich habe die Frage bearbeitet und versucht, weitere Details hinzuzufügen, und was genau ich erreichen möchte. scriptify vor 6 Jahren 0
[ffserver aus der ffmpeg-Dokumentation] (https://www.ffmpeg.org/ffserver.html#Synopsis) und ffmpeg unterstützt direkt die Verwendung von [your gpu] (https://developer.nvidia.com/ffmpeg). Wenn Sie hohe Qualität und niedrige Latenz wünschen, haben Sie eine hohe Bandbreite und Ressourcenauslastung. In fast allen Fällen handelt es sich um Widersprüche. Verwenden Sie entweder eine hohe Komprimierung (die Rechenleistung erfordert) oder eine hohe Bandbreite (weniger Komprimierung). Mehr Rechenaufwand erfordert mehr Zeit, sodass die Latenz steigt. Sie könnten OBS ausprobieren, um ein Gefühl für diese Variablen zu bekommen. Seth vor 6 Jahren 0
Ok, ich schaue mal auf ffserver. Ich verstehe, das scheint ziemlich klar zu sein. Ich dachte, durch die Verwendung eines fortgeschritteneren Formats wie der HVEC könnte ich diese Zahlen reduzieren. Wie auch immer, ich werde jetzt versuchen, mit ffserver herumzuspielen (ich dachte, dass die Entwicklung dieses Projekts eingestellt wird, aber es scheint nicht das Git Repo zu sein). Vielen Dank für deine Erklärung! scriptify vor 6 Jahren 0
HEVC benötigt zur Codierung mehr Rechenleistung und erhöht somit die Latenz. Es wird auch in keinem Browser unterstützt, außer in Safari unter Mac OS und Microsoft Edge, sofern dies von der Hardware unterstützt wird. Derzeit können Sie nur mit H.264 und VP9 zu Browsern streamen. Berücksichtigen Sie NVENC für die Kodierung von H.264. slhck vor 6 Jahren 0
Ok, ich werde es versuchen. Vielen Dank! scriptify vor 6 Jahren 0

0 Antworten auf die Frage