Pixel Streaming Audio Capture
Pixel Streaming ist ein Plugin für Unreal Engine, das gerenderte Frames streamt und Eingaben/Ausgaben über WebRTC synchronisiert. Die Anwendung läuft auf der Serverseite, während die Clientseite das Rendering und die Benutzerinteraktion übernimmt. Weitere Details zu Pixel Streaming und der Einrichtung finden Sie in der Pixel Streaming Dokumentation.
Pixel Streaming vs Pixel Streaming 2
Dieses Plugin unterstützt beide in Unreal Engine verfügbaren Pixel Streaming-Versionen:
- Pixel Streaming - Das ursprüngliche Plugin, verfügbar seit UE 5.2 und wird noch aktiv in aktuellen Engine-Versionen verwendet
- Pixel Streaming 2 - Eingeführt in UE 5.5 als eine Next-Generation-Implementierung mit einer verbesserten internen Architektur. Erfahren Sie mehr über Pixel Streaming 2
Beide Versionen werden vollständig unterstützt und sind in den neuesten Unreal Engine-Versionen verfügbar. Wählen Sie die Version, die dem Pixel Streaming-Setup Ihres Projekts entspricht.
Die API für beide Versionen ist identisch, mit dem einzigen Unterschied, dass Pixel Streaming 2-Klassen und -Funktionen eine "2" in ihren Namen enthalten (z.B. UPixelStreamingCapturableSoundWave vs UPixelStreaming2CapturableSoundWave).
Kompatibilität
Diese Lösung funktioniert mit:
- Offizieller Pixel Streaming-Infrastruktur (Epic Games Referenzimplementierung)
- Drittanbieter Pixel Streaming-Anbietern einschließlich:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Anderen WebRTC-basierten Streaming-Lösungen
- Betriebssysteme: Windows- und Linux-Server
Die Implementierung wurde in diesen Umgebungen getestet und funktioniert unabhängig von der verwendeten Pixel Streaming-Hosting-Lösung korrekt.
Erweiterungs-Plugin-Installation
Diese Funktion wird als Erweiterung für das Runtime Audio Importer-Plugin bereitgestellt. Um es zu verwenden, müssen Sie:
- Sicherstellen, dass das Runtime Audio Importer-Plugin bereits in Ihrem Projekt installiert ist
- Das Erweiterungs-Plugin für Ihre Pixel Streaming-Version herunterladen:
- Pixel Streaming: Von Google Drive herunterladen
- Pixel Streaming 2: Von Google Drive herunterladen
- Den Ordner aus dem heruntergeladenen Archiv in den
Plugins-Ordner Ihres Projekts extrahieren (diesen Ordner erstellen, falls er nicht existiert) - Ihr Projekt neu erstellen (diese Erweiterung erfordert ein C++-Projekt)
- Diese Erweiterungen werden als Quellcode bereitgestellt und erfordern ein C++-Projekt zur Nutzung
- Pixel Streaming-Erweiterung: Unterstützt in UE 5.2 und später
- Pixel Streaming 2-Erweiterung: Unterstützt in UE 5.5 und später
- Weitere Informationen zum manuellen Erstellen von Plugins finden Sie im Tutorial zum Erstellen von Plugins
Übersicht
Die Pixel Streaming Capturable Sound Wave erweitert die standardmäßige Capturable Sound Wave, um die direkte Erfassung von Audio von den Mikrofonen der Pixel Streaming-Clients zu ermöglichen. Diese Funktion ermöglicht Ihnen:
- Audio von Browsern zu erfassen, die über Pixel Streaming verbunden sind
- Audio von bestimmten Spielern/Peers zu verarbeiten
- Sprachchat, Sprachbefehle oder Audioaufnahmen von entfernten Benutzern zu implementieren
Grundlegende Verwendung
Erstellen einer Pixel Streaming Capturable Sound Wave
Zuerst müssen Sie ein Pixel Streaming Capturable Sound Wave-Objekt erstellen:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
- Blueprint
- C++
Verwenden Sie den Knoten Create Pixel Streaming 2 Capturable Sound Wave (derselbe wie bei Pixel Streaming, jedoch mit einer "2" im Namen)
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
Sie sollten die Pixel Streaming Capturable Sound Wave als starke Referenz behandeln, um eine vorzeitige Zerstörung zu verhindern (z. B. durch Zuweisung zu einer separaten Variable in Blueprints oder durch Verwendung von UPROPERTY() in C++).
Erfassen starten und stoppen
Sie können die Audioaufnahme mit einfachen Funktionsaufrufen starten und stoppen:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++

// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// Start capturing audio (the device ID parameter is ignored for Pixel Streaming)
PixelStreamingSoundWave->StartCapture(0);
// Stop capturing audio
PixelStreamingSoundWave->StopCapture();
- Blueprint
- C++
Verwenden Sie dieselben Start Capture- und Stop Capture-Knoten mit Ihrer Pixel Streaming 2 Capturable Sound Wave
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreaming2CapturableSoundWave object
// Start capturing audio (the device ID parameter is ignored for Pixel Streaming 2)
PixelStreamingSoundWave->StartCapture(0);
// Stop capturing audio
PixelStreamingSoundWave->StopCapture();
Der DeviceId-Parameter in StartCapture wird für Pixel Streaming Capturable Sound Waves ignoriert, da die Aufnahmequelle automatisch oder durch die von Ihnen festgelegten Player-Informationen bestimmt wird.
Überprüfen des Aufnahmestatus
Sie können überprüfen, ob die Soundwelle derzeit Audio aufnimmt:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++

// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
- Blueprint
- C++
Verwenden Sie denselben Is Capturing-Knoten mit Ihrer Pixel Streaming 2 Capturable Sound Wave
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreaming2CapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Vollständiges Beispiel
Hier ist ein vollständiges Beispiel dafür, wie man die Audioaufnahme mit Pixel Streaming einrichtet:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
Dies ist ein grundlegendes Codebeispiel für die Erfassung von Audiodaten von einem Pixel Streaming-Client.
Das Beispiel verwendet die Funktion CapturePixelStreamingAudioExample, die sich in der Klasse UPixelStreamingAudioExample innerhalb des Moduls EXAMPLEMODULE befindet.
Um das Beispiel erfolgreich auszuführen, stellen Sie sicher, dass Sie sowohl das RuntimeAudioImporter- als auch das PixelStreaming-Modul entweder zu PublicDependencyModuleNames oder PrivateDependencyModuleNames in der .Build.cs-Datei sowie zu Ihrer Projektdatei .uproject hinzufügen.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "PixelStreamingAudioExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UPixelStreamingAudioExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void CapturePixelStreamingAudioExample();
private:
// Keep a strong reference to prevent garbage collection
UPROPERTY()
class UPixelStreamingCapturableSoundWave* PixelStreamingSoundWave;
};
#include "PixelStreamingAudioExample.h"
#include "Sound/PixelStreamingCapturableSoundWave.h"
#include "Kismet/GameplayStatics.h"
void UPixelStreamingAudioExample::CapturePixelStreamingAudioExample()
{
// Create a Pixel Streaming Capturable Sound Wave
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
// Start capturing audio
PixelStreamingSoundWave->StartCapture(0);
// Play the sound wave to hear the captured audio
UGameplayStatics::PlaySound2D(GetWorld(), PixelStreamingSoundWave);
// Set up a timer to stop capture after 30 seconds (just for demonstration)
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [this]()
{
PixelStreamingSoundWave->StopCapture();
}, 30.0f, false);
}
- Blueprint
- C++
Die Blueprint-Einrichtung ist identisch mit Pixel Streaming, verwenden Sie jedoch stattdessen den Knoten Create Pixel Streaming 2 Capturable Sound Wave
Dies ist ein grundlegendes Codebeispiel zum Erfassen von Audiodaten von einem Pixel Streaming 2-Client.
Das Beispiel verwendet die Funktion CapturePixelStreaming2AudioExample, die sich in der Klasse UPixelStreaming2AudioExample innerhalb des Moduls EXAMPLEMODULE befindet.
Um das Beispiel erfolgreich auszuführen, stellen Sie sicher, dass Sie sowohl die Module RuntimeAudioImporter als auch PixelStreaming2 entweder zu PublicDependencyModuleNames oder PrivateDependencyModuleNames in der .Build.cs-Datei sowie zu Ihrer Projektdatei .uproject hinzufügen.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "PixelStreaming2AudioExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UPixelStreaming2AudioExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void CapturePixelStreaming2AudioExample();
private:
// Keep a strong reference to prevent garbage collection
UPROPERTY()
class UPixelStreaming2CapturableSoundWave* PixelStreamingSoundWave;
};
#include "PixelStreaming2AudioExample.h"
#include "Sound/PixelStreaming2CapturableSoundWave.h"
#include "Kismet/GameplayStatics.h"
void UPixelStreaming2AudioExample::CapturePixelStreaming2AudioExample()
{
// Create a Pixel Streaming 2 Capturable Sound Wave
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
// Start capturing audio
PixelStreamingSoundWave->StartCapture(0);
// Play the sound wave to hear the captured audio
UGameplayStatics::PlaySound2D(GetWorld(), PixelStreamingSoundWave);
// Set up a timer to stop capture after 30 seconds (just for demonstration)
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [this]()
{
PixelStreamingSoundWave->StopCapture();
}, 30.0f, false);
}
Arbeiten mit mehreren Pixel Streaming Playern
In Szenarien, in denen mehrere Pixel Streaming-Clients gleichzeitig verbunden sind, müssen Sie möglicherweise Audio von bestimmten Playern erfassen. Die folgenden Funktionen helfen Ihnen bei der Verwaltung.
Verfügbare Pixel Streaming Player abrufen
Um zu identifizieren, welche Pixel Streaming-Player verbunden sind:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
UPixelStreamingCapturableSoundWave::GetAvailablePixelStreamingPlayers(FOnGetAvailablePixelStreamingPlayersResultNative::CreateWeakLambda(this, [](const TArray<FPixelStreamingPlayerInfo_RAI>& AvailablePlayers)
{
// Handle the list of available players
for (const FPixelStreamingPlayerInfo_RAI& PlayerInfo : AvailablePlayers)
{
UE_LOG(LogTemp, Log, TEXT("Available player: %s on streamer: %s"), *PlayerInfo.PlayerId, *PlayerInfo.StreamerId);
}
}));
- Blueprint
- C++
Verwenden Sie den Knoten Get Available Pixel Streaming 2 Players
UPixelStreaming2CapturableSoundWave::GetAvailablePixelStreaming2Players(FOnGetAvailablePixelStreaming2PlayersResultNative::CreateWeakLambda(this, [](const TArray<FPixelStreaming2PlayerInfo_RAI>& AvailablePlayers)
{
// Handle the list of available players
for (const FPixelStreaming2PlayerInfo_RAI& PlayerInfo : AvailablePlayers)
{
UE_LOG(LogTemp, Log, TEXT("Available player: %s on streamer: %s"), *PlayerInfo.PlayerId, *PlayerInfo.StreamerId);
}
}));
Festlegen des Spielers, von dem erfasst werden soll
Wenn Sie von einem bestimmten Spieler erfassen müssen:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++

// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// and PlayerInfo is a FPixelStreamingPlayerInfo_RAI object from GetAvailablePixelStreamingPlayers
PixelStreamingSoundWave->PlayerInfo = PlayerInfo;
- Blueprint
- C++
Verwenden Sie den Set Player To Capture From-Knoten mit Ihrer Pixel Streaming 2 Capturable Sound Wave
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreaming2CapturableSoundWave object
// and PlayerInfo is a FPixelStreaming2PlayerInfo_RAI object from GetAvailablePixelStreaming2Players
PixelStreamingSoundWave->PlayerInfo = PlayerInfo;
Wenn Sie die Spieler-ID leer lassen, hört die Schallwelle automatisch auf den ersten verfügbaren Spieler, der sich verbindet. Dies ist das Standardverhalten und funktioniert gut für Einzelspieler-Szenarien.
Häufige Anwendungsfälle
Sprachchat-Implementierung
Sie können Pixel Streaming Capturable Sound Waves verwenden, um Sprachchat zwischen entfernten Benutzern und lokalen Spielern zu implementieren:
- Erstellen Sie eine Pixel Streaming Capturable Sound Wave für jeden verbundenen Spieler
- Richten Sie ein System ein, um zu verwalten, welche Spieler gerade sprechen
- Verwenden Sie das Voice Activity Detection-System, um zu erkennen, wann Benutzer sprechen
- Räumlichen Sie das Audio bei Bedarf mit dem Audiosystem von Unreal Engine aus
Sprachbefehle mit Spracherkennung
Sie können die Spracherkennung für entfernte Benutzer implementieren, indem Sie diese Funktion mit dem Runtime Speech Recognizer-Plugin kombinieren:
- Erfassen Sie Audio von Pixel Streaming-Clients mit Pixel Streaming Capturable Sound Wave
- Führen Sie das erfasste Audio direkt an den Runtime Speech Recognizer
- Verarbeiten Sie den erkannten Text in Ihrer Spiellogik
Ersetzen Sie einfach die standardmäßige Capturable Sound Wave durch eine Pixel Streaming Capturable Sound Wave (oder Pixel Streaming 2 Capturable Sound Wave) in den Runtime Speech Recognizer-Beispielen, und sie funktioniert nahtlos mit der Pixel Streaming-Audioeingabe.
Aufnahme von Audio entfernte Benutzer
Sie können Audio von entfernten Benutzern für die spätere Wiedergabe aufnehmen:
- Erfassen Sie Audio mit Pixel Streaming Capturable Sound Wave
- Exportieren Sie das erfasste Audio in eine Datei mit Export Audio
- Speichern Sie die Datei für die spätere Verwendung oder Analyse