Captura de Audio de Pixel Streaming
Pixel Streaming es un plugin para Unreal Engine que transmite fotogramas renderizados y sincroniza entrada/salida a través de WebRTC. La aplicación se ejecuta en el lado del servidor, mientras que el lado del cliente maneja el renderizado y la interacción del usuario. Para más detalles sobre Pixel Streaming y su configuración, consulta la Documentación de Pixel Streaming.
Pixel Streaming vs Pixel Streaming 2
Este plugin es compatible con ambas versiones de Pixel Streaming disponibles en Unreal Engine:
- Pixel Streaming - El plugin original, disponible desde UE 5.2 y aún utilizado activamente en las versiones actuales del motor
- Pixel Streaming 2 - Introducido en UE 5.5 como una implementación de próxima generación con una arquitectura interna mejorada. Aprende más sobre Pixel Streaming 2
Ambas versiones son totalmente compatibles y están disponibles en las últimas versiones de Unreal Engine. Elige la versión que coincida con la configuración de Pixel Streaming de tu proyecto.
La API para ambas versiones es idéntica, siendo la única diferencia que las clases y funciones de Pixel Streaming 2 incluyen un "2" en sus nombres (por ejemplo, UPixelStreamingCapturableSoundWave vs UPixelStreaming2CapturableSoundWave).
Compatibilidad
Esta solución funciona con:
- Infraestructura oficial de Pixel Streaming (implementación de referencia de Epic Games)
- Proveedores de Pixel Streaming de terceros incluyendo:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Otras soluciones de streaming basadas en WebRTC
- Sistemas operativos: Servidores Windows y Linux
La implementación ha sido probada en estos entornos y funciona correctamente independientemente de la solución de alojamiento de Pixel Streaming utilizada.
Instalación del Plugin de Extensión
Esta característica se proporciona como una extensión del plugin Runtime Audio Importer. Para usarla, necesitas:
- Asegurarte de que el plugin Runtime Audio Importer ya está instalado en tu proyecto
- Descargar el plugin de extensión para tu versión de Pixel Streaming:
- Extraer la carpeta del archivo descargado en la carpeta
Pluginsde tu proyecto (crea esta carpeta si no existe) - Reconstruir tu proyecto (esta extensión requiere un proyecto C++)
- Estas extensiones se proporcionan como código fuente y requieren un proyecto C++ para su uso
- Extensión Pixel Streaming: Compatible con UE 5.2 y posteriores
- Extensión Pixel Streaming 2: Compatible con UE 5.5 y posteriores
- Para más información sobre cómo construir plugins manualmente, consulta el tutorial Construyendo Plugins
Descripción General
La Onda de Sonido Capturable de Pixel Streaming extiende la Onda de Sonido Capturable estándar para permitir capturar audio directamente de los micrófonos de los clientes de Pixel Streaming. Esta característica te permite:
- Capturar audio desde navegadores conectados a través de Pixel Streaming
- Procesar audio de jugadores/pares específicos
- Implementar chat de voz, comandos de voz o grabación de audio de usuarios remotos
Uso Básico
Creando una Onda de Sonido Capturable de Pixel Streaming
Primero, necesitas crear un objeto Onda de Sonido Capturable de Pixel Streaming:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
- Blueprint
- C++
Utilice el nodo Create Pixel Streaming 2 Capturable Sound Wave (el mismo que para Pixel Streaming pero con un "2" en el nombre)
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
Debes tratar la Onda de Sonido Capturable de Pixel Streaming como una referencia fuerte para evitar su destrucción prematura (por ejemplo, asignándola a una variable separada en Blueprints o usando UPROPERTY() en C++).
Iniciar y Detener la Captura
Puedes iniciar y detener la captura de audio con simples llamadas a funciones:
- 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++
Utilice los mismos nodos Start Capture e Stop Capture con su 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();
El parámetro DeviceId en StartCapture se ignora para las Ondas Sonoras Capturables de Pixel Streaming, ya que la fuente de captura se determina automáticamente o mediante la información del jugador que configuraste.
Comprobando el Estado de la Captura
Puedes comprobar si la onda sonora está capturando audio actualmente:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++

// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
- Blueprint
- C++
Utilice el mismo nodo Is Capturing con su Capturable Sound Wave de Pixel Streaming 2
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreaming2CapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Ejemplo Completo
Aquí hay un ejemplo completo de cómo configurar la captura de audio de Pixel Streaming:
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
Este es un ejemplo de código básico para capturar datos de audio desde un cliente de Pixel Streaming.
El ejemplo utiliza la función CapturePixelStreamingAudioExample ubicada en la clase UPixelStreamingAudioExample dentro del módulo EXAMPLEMODULE.
Para ejecutar el ejemplo con éxito, asegúrate de agregar tanto el módulo RuntimeAudioImporter como el módulo PixelStreaming a PublicDependencyModuleNames o PrivateDependencyModuleNames en el archivo .Build.cs, así como al archivo .uproject de tu proyecto.
#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 configuración de Blueprint es idéntica a la de Pixel Streaming, pero usa el nodo Create Pixel Streaming 2 Capturable Sound Wave en su lugar
Este es un ejemplo de código básico para capturar datos de audio desde un cliente de Pixel Streaming 2.
El ejemplo utiliza la función CapturePixelStreaming2AudioExample ubicada en la clase UPixelStreaming2AudioExample dentro del módulo EXAMPLEMODULE.
Para ejecutar el ejemplo con éxito, asegúrate de agregar los módulos RuntimeAudioImporter y PixelStreaming2 tanto a PublicDependencyModuleNames como a PrivateDependencyModuleNames en el archivo .Build.cs, así como al archivo .uproject de tu proyecto.
#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);
}
Trabajando con Múltiples Reproductores de Pixel Streaming
En escenarios donde tienes múltiples clientes de Pixel Streaming conectados simultáneamente, es posible que necesites capturar audio de reproductores específicos. Las siguientes características te ayudan a gestionar esto.
Obteniendo Reproductores de Pixel Streaming Disponibles
Para identificar qué reproductores de Pixel Streaming están conectados:
- 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++
Utiliza el nodo 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);
}
}));
Configurar el Jugador del que Capturar
Cuando necesitas capturar desde un jugador específico:
- 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++
Utilice el nodo Set Player To Capture From con su 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;
Si dejas el ID del Jugador vacío, la onda de sonido escuchará automáticamente al primer jugador disponible que se conecte. Este es el comportamiento predeterminado y funciona bien para escenarios de un solo jugador.
Casos de Uso Comunes
Implementación de Chat de Voz
Puedes usar las Onda de Sonido Capturable de Pixel Streaming para implementar chat de voz entre usuarios remotos y jugadores locales:
- Crea una Onda de Sonido Capturable de Pixel Streaming para cada jugador conectado
- Configura un sistema para gestionar qué jugadores están hablando actualmente
- Usa el sistema de Detección de Actividad de Voz para detectar cuándo los usuarios están hablando
- Espacializa el audio usando el sistema de audio de Unreal Engine si es necesario
Comandos de Voz con Reconocimiento de Voz
Puedes implementar reconocimiento de comandos de voz para usuarios remotos combinando esta función con el plugin Runtime Speech Recognizer:
- Captura audio de clientes de Pixel Streaming usando Onda de Sonido Capturable de Pixel Streaming
- Alimenta el audio capturado directamente al Runtime Speech Recognizer
- Procesa el texto reconocido en tu lógica del juego
Simplemente reemplaza la Onda de Sonido Capturable estándar con una Onda de Sonido Capturable de Pixel Streaming (o Onda de Sonido Capturable de Pixel Streaming 2) en los ejemplos del Runtime Speech Recognizer, y funcionará perfectamente con la entrada de audio de Pixel Streaming.
Grabación de Audio de Usuarios Remotos
Puedes grabar audio de usuarios remotos para reproducirlo más tarde:
- Captura audio usando Onda de Sonido Capturable de Pixel Streaming
- Exporta el audio capturado a un archivo usando Exportar Audio
- Guarda el archivo para uso o análisis posterior