Cattura Audio Pixel Streaming
Pixel Streaming è un plugin per Unreal Engine che trasmette in streaming i fotogrammi renderizzati e sincronizza input/output tramite WebRTC. L'applicazione viene eseguita lato server, mentre il lato client gestisce il rendering e l'interazione dell'utente. Per maggiori dettagli su Pixel Streaming e la configurazione, fare riferimento alla Documentazione Pixel Streaming.
Pixel Streaming vs Pixel Streaming 2
Questo plugin supporta entrambe le versioni di Pixel Streaming disponibili in Unreal Engine:
- Pixel Streaming - Il plugin originale, disponibile da UE 5.2 e ancora attivamente utilizzato nelle versioni attuali del motore
- Pixel Streaming 2 - Introdotto in UE 5.5 come implementazione di prossima generazione con un'architettura interna migliorata. Scopri di più su Pixel Streaming 2
Entrambe le versioni sono completamente supportate e disponibili nelle ultime versioni di Unreal Engine (incluso UE 5.6). Scegli la versione che corrisponde alla configurazione Pixel Streaming del tuo progetto.
L'API per entrambe le versioni è identica, con l'unica differenza che le classi e le funzioni di Pixel Streaming 2 includono "2" nei loro nomi (ad esempio, UPixelStreamingCapturableSoundWave vs UPixelStreaming2CapturableSoundWave).
Compatibilità
Questa soluzione funziona con:
- Infrastruttura Pixel Streaming ufficiale (Implementazione di riferimento Epic Games)
- Provider Pixel Streaming di terze parti inclusi:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Altre soluzioni di streaming basate su WebRTC
- Sistemi operativi: Server Windows e Linux
L'implementazione è stata testata in questi ambienti e funziona correttamente indipendentemente dalla soluzione di hosting Pixel Streaming utilizzata.
Installazione Plugin di Estensione
Questa funzionalità è fornita come estensione al plugin Runtime Audio Importer. Per utilizzarla, è necessario:
- Assicurarsi che il plugin Runtime Audio Importer sia già installato nel tuo progetto
- Scaricare il plugin di estensione per la tua versione di Pixel Streaming:
- Pixel Streaming: Scarica da Google Drive
- Pixel Streaming 2: Scarica da Google Drive
- Estrarre la cartella dall'archivio scaricato nella cartella
Pluginsdel tuo progetto (creare questa cartella se non esiste) - Ricompilare il tuo progetto (questa estensione richiede un progetto C++)
- Ces extensions sont fournies sous forme de code source et nécessitent un projet C++ pour être utilisées
- Extension Pixel Streaming : Pris en charge dans UE 5.2 et versions ultérieures
- Extension Pixel Streaming 2 : Pris en charge dans UE 5.5 et versions ultérieures
- Pour plus d'informations sur la manière de construire manuellement des plugins, consultez le tutoriel Building Plugins
Aperçu
Le Pixel Streaming Capturable Sound Wave étend le Capturable Sound Wave standard pour permettre la capture audio directement depuis les microphones des clients Pixel Streaming. Cette fonctionnalité vous permet de :
- Capturer l'audio des navigateurs connectés via Pixel Streaming
- Traiter l'audio de joueurs/pairs spécifiques
- Implémenter le chat vocal, les commandes vocales ou l'enregistrement audio d'utilisateurs distants
Utilisation de base
Création d'un Pixel Streaming Capturable Sound Wave
Premièrement, vous devez créer un objet Pixel Streaming Capturable Sound Wave :
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
- Blueprint
- C++
Utilisez le nœud Create Pixel Streaming 2 Capturable Sound Wave (identique à Pixel Streaming mais avec "2" dans le nom)
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
Dovresti trattare la Pixel Streaming Capturable Sound Wave come un riferimento forte per prevenire la distruzione prematura (ad esempio assegnandola a una variabile separata in Blueprints o usando UPROPERTY() in C++).
Avvio e Arresto della Cattura
Puoi avviare e arrestare la cattura audio con semplici chiamate di funzione:
- 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++
Utilisez les mêmes nœuds Start Capture et Stop Capture avec votre Capturable Sound Wave de Pixel Streaming 2
// 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();
Il parametro DeviceId in StartCapture viene ignorato per le Pixel Streaming Capturable Sound Waves, poiché la sorgente di cattura viene determinata automaticamente o dalle informazioni del giocatore che hai impostato.
Verifica dello Stato di Cattura
Puoi verificare se la sound wave sta attualmente catturando audio:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++

// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
- Blueprint
- C++
Utilisez le même nœud Is Capturing avec votre Capturable Sound Wave de Pixel Streaming 2
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreaming2CapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Esempio Completo
Ecco un esempio completo di come configurare la cattura audio di Pixel Streaming:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
Questo è un esempio di codice di base per catturare i dati audio da un client Pixel Streaming.
L'esempio utilizza la funzione CapturePixelStreamingAudioExample situata nella classe UPixelStreamingAudioExample all'interno del modulo EXAMPLEMODULE.
Per eseguire con successo l'esempio, assicurati di aggiungere sia il modulo RuntimeAudioImporter che il modulo PixelStreaming a PublicDependencyModuleNames o PrivateDependencyModuleNames nel file .Build.cs, così come nel file .uproject del tuo progetto.
#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++
La configuration Blueprint est identique à Pixel Streaming, mais utilisez le nœud Create Pixel Streaming 2 Capturable Sound Wave à la place
Ceci est un exemple de code basique pour capturer des données audio d'un client Pixel Streaming 2.
L'exemple utilise la fonction CapturePixelStreaming2AudioExample située dans la classe UPixelStreaming2AudioExample au sein du module EXAMPLEMODULE.
Pour exécuter l'exemple avec succès, assurez-vous d'ajouter les modules RuntimeAudioImporter et PixelStreaming2 soit à PublicDependencyModuleNames, soit à PrivateDependencyModuleNames dans le fichier .Build.cs, ainsi que dans le fichier .uproject de votre projet.
#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);
}
Lavorare con Più Player di Pixel Streaming
Negli scenari in cui hai più client Pixel Streaming connessi simultaneamente, potresti dover catturare l'audio da player specifici. Le seguenti funzionalità ti aiutano a gestire questa situazione.
Ottenere i Player di Pixel Streaming Disponibili
Per identificare quali player Pixel Streaming sono connessi:
- 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++
Utilisez le nœud 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);
}
}));
Impostazione del Giocatore da Catturare
Quando è necessario catturare da un giocatore specifico:
- 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++
Utilisez le nœud Set Player To Capture From avec votre 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;
Se lasci l'ID del giocatore vuoto, l'onda sonora ascolterà automaticamente il primo giocatore disponibile che si connette. Questo è il comportamento predefinito e funziona bene per scenari a giocatore singolo.
Casi d'Uso Comuni
Implementazione della Chat Vocale
Puoi utilizzare le Onde Sonore Catturabili Pixel Streaming per implementare una chat vocale tra utenti remoti e giocatori locali:
- Crea un'Onda Sonora Catturabile Pixel Streaming per ogni giocatore connesso
- Imposta un sistema per gestire quali giocatori stanno parlando in quel momento
- Usa il sistema di Rilevamento dell'Attività Vocale per rilevare quando gli utenti stanno parlando
- Spazializza l'audio utilizzando il sistema audio di Unreal Engine se necessario
Comandi Vocali con Riconoscimento Vocale
Puoi implementare il riconoscimento dei comandi vocali per utenti remoti combinando questa funzionalità con il plugin Runtime Speech Recognizer:
- Cattura l'audio dai client Pixel Streaming utilizzando l'Onda Sonora Catturabile Pixel Streaming
- Invia l'audio catturato direttamente al Runtime Speech Recognizer
- Elabora il testo riconosciuto nella tua logica di gioco
Sostituisci semplicemente l'Onda Sonora Catturabile standard con un'Onda Sonora Catturabile Pixel Streaming (o Pixel Streaming 2 Capturable Sound Wave) negli esempi del Runtime Speech Recognizer, e funzionerà perfettamente con l'input audio di Pixel Streaming.
Registrazione dell'Audio dell'Utente Remoto
Puoi registrare l'audio dagli utenti remoti per una riproduzione successiva:
- Cattura l'audio utilizzando l'Onda Sonora Catturabile Pixel Streaming
- Esporta l'audio catturato in un file utilizzando Esporta Audio
- Salva il file per un uso o analisi successiva