Captura de Audio de Pixel Streaming
Pixel Streaming es un complemento para Unreal Engine que transmite fotogramas renderizados y sincroniza la entrada/salida a través de WebRTC. La aplicación se ejecuta en el lado del servidor, mientras que el lado del cliente maneja la renderización y la interacción del usuario. Para obtener más detalles sobre Pixel Streaming y su configuración, consulta la Documentación de Pixel Streaming.
Pixel Streaming vs Pixel Streaming 2
Este complemento es compatible con ambas versiones de Pixel Streaming disponibles en Unreal Engine:
- Pixel Streaming - El complemento 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 que incluyen:
- 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 Complemento de Extensión
Esta característica se proporciona como una extensión del complemento Runtime Audio Importer. Para usarla, necesitas:
- Asegurarte de que el complemento Runtime Audio Importer ya esté instalado en tu proyecto
- Descargar el complemento de extensión para tu versión de Pixel Streaming:
- Pixel Streaming: Descargar desde Google Drive
- Pixel Streaming 2: Descargar desde Google Drive
- Extraer la carpeta del archivo descargado en la carpeta
Pluginsde tu proyecto (crea esta carpeta si no existe) - Recompilar tu proyecto (esta extensión requiere un proyecto C++)
- Estas extensiones se proporcionan como código fuente y requieren un proyecto C++ para utilizarlas
- Extensión Pixel Streaming: Compatible con UE 5.2 y versiones posteriores
- Extensión Pixel Streaming 2: Compatible con UE 5.5 y versiones posteriores
- Para obtener más información sobre cómo construir complementos manualmente, consulta el tutorial de Construcción de Complementos
Descripción General
La Onda de Sonido Capturable de Pixel Streaming amplía 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
Crear 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 Crear Onda Sonora Capturable de Pixel Streaming 2 (igual que Pixel Streaming pero con "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++).
Iniciando y Deteniendo 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 Iniciar Captura y Detener Captura con su Onda de Sonido Capturable 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.
Verificando el Estado de la Captura
Puedes verificar 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 de 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 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 Pixel Streaming, pero utiliza 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 de 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 tanto el módulo RuntimeAudioImporter como PixelStreaming2 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 "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++
Utilice 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 de 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 característica con el plugin Runtime Speech Recognizer:
- Captura audio de los 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 de 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 posterior o análisis