Pixel Streaming Audio Capture
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, consulta la Documentazione di 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. 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 del Plugin di Estensione
Questa funzionalità è fornita come estensione del plugin Runtime Audio Importer. Per usarla, devi:
- Assicurati che il plugin Runtime Audio Importer sia già installato nel tuo progetto
- Scarica il plugin di estensione per la tua versione di Pixel Streaming:
- Estrai la cartella dall'archivio scaricato nella cartella
Pluginsdel tuo progetto (crea questa cartella se non esiste) - Ricompila il tuo progetto (questa estensione richiede un progetto C++)
- Queste estensioni sono fornite come codice sorgente e richiedono un progetto C++ per essere utilizzate
- Estensione Pixel Streaming: Supportata in UE 5.2 e successive
- Estensione Pixel Streaming 2: Supportata in UE 5.5 e successive
- Per maggiori informazioni su come compilare manualmente i plugin, consulta il tutorial Building Plugins
Panoramica
L'Onda Sonora Catturabile Pixel Streaming estende la standard Onda Sonora Catturabile per consentire la cattura audio direttamente dai microfoni dei client Pixel Streaming. Questa funzionalità ti permette di:
- Catturare audio dai browser connessi tramite Pixel Streaming
- Elaborare audio da giocatori/peer specifici
- Implementare chat vocale, comandi vocali o registrazione audio da utenti remoti
Utilizzo di Base
Creazione di un'Onda Sonora Catturabile Pixel Streaming
Innanzitutto, devi creare un oggetto Onda Sonora Catturabile Pixel Streaming:
- 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 un "2" dans le nom)
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
Dovresti trattare l'oggetto Pixel Streaming Capturable Sound Wave come un riferimento forte per prevenirne la distruzione prematura (ad esempio, assegnandolo a una variabile separata nei Blueprints o utilizzando UPROPERTY() in C++).
Avviare e Interrompere la Cattura
Puoi avviare e interrompere 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();
Pixel Streaming Capturable Sound Waves の StartCapture における DeviceId パラメータは無視されます。キャプチャソースは自動的に、または設定したプレイヤー情報によって決定されるためです。
キャプチャ状態の確認
サウンドウェーブが現在オーディオをキャプチャしているかどうかを確認できます:
- 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 correttamente l'esempio, assicurati di aggiungere sia il modulo RuntimeAudioImporter che il modulo PixelStreaming a PublicDependencyModuleNames o PrivateDependencyModuleNames nel file .Build.cs, così come al 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 configurazione Blueprint è identica a Pixel Streaming, ma utilizza il nodo Create Pixel Streaming 2 Capturable Sound Wave invece
Questo è un esempio di codice di base per acquisire dati audio da un client Pixel Streaming 2.
L'esempio utilizza la funzione CapturePixelStreaming2AudioExample situata nella classe UPixelStreaming2AudioExample all'interno del modulo EXAMPLEMODULE.
Per eseguire correttamente l'esempio, assicurati di aggiungere sia il modulo RuntimeAudioImporter che il modulo PixelStreaming2 a PublicDependencyModuleNames o PrivateDependencyModuleNames nel file .Build.cs, così come al file .uproject del tuo progetto.
#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, potrebbe essere necessario 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);
}
}));
Impostare il 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 Capturable Sound Wave de Pixel Streaming 2
// 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 Pixel Streaming Capturable Sound Waves per implementare una chat vocale tra utenti remoti e giocatori locali:
- Crea una Pixel Streaming Capturable Sound Wave 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 di comandi vocali per utenti remoti combinando questa funzionalità con il plugin Runtime Speech Recognizer:
- Cattura l'audio dai client Pixel Streaming utilizzando Pixel Streaming Capturable Sound Wave
- Invia l'audio catturato direttamente al Runtime Speech Recognizer
- Elabora il testo riconosciuto nella tua logica di gioco
Basta sostituire la standard Capturable Sound Wave con una Pixel Streaming Capturable Sound Wave (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 Pixel Streaming Capturable Sound Wave
- Esporta l'audio catturato in un file utilizzando Esporta Audio
- Salva il file per un uso o analisi successiva