Cattura Audio Pixel Streaming
Pixel Streaming è un plugin per Unreal Engine che trasmette i frame 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, consultare la Documentazione Pixel Streaming.
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 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 progetto
- Scaricare l'estensione del plugin Pixel Streaming Audio Capture da Google Drive
- Estrarre la cartella dall'archivio scaricato nella cartella
Plugins
del progetto (creare questa cartella se non esiste) - Ricompilare il progetto (questa estensione richiede un progetto C++)
- Questa estensione è fornita come codice sorgente e richiede un progetto C++ per essere utilizzata
- Versioni supportate di Unreal Engine: UE 5.2 e successive
- Per maggiori informazioni su come compilare manualmente i plugin, vedere il tutorial Building Plugins
Panoramica
Il Pixel Streaming Capturable Sound Wave estende lo standard Capturable Sound Wave per consentire la cattura audio direttamente dai microfoni dei client Pixel Streaming. Questa funzionalità ti consente 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 Base
Creazione di un Pixel Streaming Capturable Sound Wave
Innanzitutto, è necessario creare un oggetto Pixel Streaming Capturable Sound Wave:
- Blueprint
- C++
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
Dovresti trattare la Pixel Streaming Capturable Sound Wave come un riferimento forte per prevenirne 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:
- 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();
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:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Esempio Completo
Ecco un esempio completo di come configurare la cattura audio di Pixel Streaming:
- 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 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);
}
Lavorare con Più Player di Pixel Streaming
Negli scenari in cui hai più client Pixel Streaming connessi simultaneamente, potresti aver bisogno di catturare l'audio da player specifici. Le seguenti funzionalità ti aiutano a gestire questo.
Ottenere i Player di Pixel Streaming Disponibili
Per identificare quali player Pixel Streaming sono connessi:
- 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);
}
}));
Impostazione del Giocatore da Catturare
Quando è necessario catturare da un giocatore specifico:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// and PlayerInfo is a FPixelStreamingPlayerInfo_RAI object from GetAvailablePixelStreamingPlayers
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 single-player.
Casi d'Uso Comuni
Implementazione della Chat Vocale
Puoi utilizzare le Onde Sonore Catturabili per Pixel Streaming per implementare una chat vocale tra utenti remoti e giocatori locali:
- Crea un'Onda Sonora Catturabile per Pixel Streaming per ogni giocatore connesso
- Imposta un sistema per gestire quali giocatori stanno parlando in quel momento
- Utilizza il sistema di Rilevamento 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 per Pixel Streaming
- 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 negli esempi del Runtime Speech Recognizer, e funzionerà perfettamente con l'input audio di Pixel Streaming.
Registrazione dell'Audio degli Utenti Remoti
Puoi registrare l'audio dagli utenti remoti per una riproduzione successiva:
- Cattura l'audio utilizzando l'Onda Sonora Catturabile per Pixel Streaming
- Esporta l'audio catturato in un file utilizzando Esporta Audio
- Salva il file per un uso o analisi successiva