Pixel Streaming Audio Capture
Pixel Streaming ist ein Plugin für Unreal Engine, das gerenderte Frames streamt und die Eingabe/Ausgabe über WebRTC synchronisiert. Die Anwendung läuft auf der Serverseite, während die Clientseite das Rendering und die Benutzerinteraktion übernimmt. Für weitere Details zu Pixel Streaming und der Einrichtung, siehe Pixel Streaming Dokumentation.
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
- Andere WebRTC-basierte 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.
Installation des Erweiterungsplugins
Dieses Feature wird als Erweiterung des Runtime Audio Importer Plugins bereitgestellt. Um es zu nutzen, müssen Sie:
- Sicherstellen, dass das Runtime Audio Importer Plugin bereits in Ihrem Projekt installiert ist
- Das Pixel Streaming Audio Capture Plugin-Erweiterung 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 kompilieren (diese Erweiterung erfordert ein C++-Projekt)
- Diese Erweiterung wird als Quellcode bereitgestellt und erfordert ein C++-Projekt
- Unterstützte Unreal Engine-Versionen: UE 5.2 und später
- Weitere Informationen zum manuellen Erstellen von Plugins finden Sie im Erstellen von Plugins Tutorial
Übersicht
Das Pixel Streaming Capturable Sound Wave erweitert das standardmäßige Capturable Sound Wave, um Audio direkt von Mikrofonen der Pixel Streaming-Clients erfassen zu können. Dieses Feature ermöglicht Ihnen:
- Audio von über Pixel Streaming verbundenen Browsern zu erfassen
- Audio von bestimmten Spielern/Peers zu verarbeiten
- Sprachchat, Sprachbefehle oder Audioaufnahmen von entfernten Benutzern zu implementieren
Grundlegende Nutzung
Erstellen eines Pixel Streaming Capturable Sound Wave
Zuerst müssen Sie ein Pixel Streaming Capturable Sound Wave Objekt erstellen:
- Blueprint
- C++
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
Sie sollten die Pixel Streaming Capturable Sound Wave als starke Referenz behandeln, um eine vorzeitige Zerstörung zu verhindern (z.B. durch Zuweisen zu einer separaten Variable in Blueprints oder durch Verwendung von UPROPERTY()
in C++).
Starten und Stoppen der Aufnahme
Sie können die Audioaufnahme mit einfachen Funktionsaufrufen starten und stoppen:
- 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();
Der DeviceId
Parameter in StartCapture
wird bei Pixel Streaming Capturable Sound Waves ignoriert, da die Erfassungsquelle automatisch oder durch die von Ihnen festgelegten Spielerinformationen bestimmt wird.
Überprüfung des Erfassungsstatus
Sie können überprüfen, ob die Soundwave derzeit Audio aufzeichnet:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Komplettes Beispiel
Hier ist ein komplettes Beispiel, wie man das Audio-Capture von Pixel Streaming einrichtet:
- Blueprint
- C++
Dies ist ein einfaches Codebeispiel zum Aufzeichnen 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 sowohl die RuntimeAudioImporter
- als auch die PixelStreaming
-Module zu PublicDependencyModuleNames
oder PrivateDependencyModuleNames
in der .Build.cs-Datei sowie zu Ihrer Projektdatei .uproject hinzugefügt werden.
#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);
}
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, dies zu verwalten.
Verfügbare Pixel Streaming Player abrufen
Um zu identifizieren, welche Pixel Streaming Player verbunden sind:
- 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);
}
}));
Den Spieler zum Aufzeichnen festlegen
Wenn Sie von einem bestimmten Spieler aufzeichnen müssen:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// and PlayerInfo is a FPixelStreamingPlayerInfo_RAI object from GetAvailablePixelStreamingPlayers
PixelStreamingSoundWave->PlayerInfo = PlayerInfo;
Wenn Sie die Player-ID leer lassen, wird die Schallwelle automatisch auf den ersten verfügbaren Spieler hören, der sich verbindet. Dies ist das Standardverhalten und funktioniert gut für Einzelspieler-Szenarien.
Häufige Anwendungsfälle
Sprach-Chat-Implementierung
Sie können Pixel Streaming Capturable Sound Waves verwenden, um Sprach-Chats 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äumliche Darstellung des Audios mit Unreal Engine's Audiosystem, falls nötig
Sprachbefehle mit Spracherkennung
Sie können die Erkennung von Sprachbefehlen 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
- Geben Sie das erfasste Audio direkt an den Runtime Speech Recognizer weiter
- Verarbeiten Sie den erkannten Text in Ihrer Spiel-Logik
Ersetzen Sie einfach die Standard Capturable Sound Wave durch eine Pixel Streaming Capturable Sound Wave in den Runtime Speech Recognizer-Beispielen, und es wird nahtlos mit Pixel Streaming-Audioeingaben funktionieren.
Aufnahme von Remote-Benutzertönen
Sie können Audio von entfernten Benutzern für die spätere Wiedergabe aufzeichnen:
- 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 spätere Nutzung oder Analyse