Capture Audio Pixel Streaming
Pixel Streaming est un plugin pour Unreal Engine qui diffuse les images rendues et synchronise les entrées/sorties via WebRTC. L'application s'exécute côté serveur, tandis que le côté client gère le rendu et l'interaction utilisateur. Pour plus de détails sur Pixel Streaming et sa configuration, reportez-vous à la Documentation Pixel Streaming.
Pixel Streaming vs Pixel Streaming 2
Ce plugin prend en charge les deux versions de Pixel Streaming disponibles dans Unreal Engine :
- Pixel Streaming - Le plugin original, disponible depuis l'UE 5.2 et toujours activement utilisé dans les versions actuelles du moteur
- Pixel Streaming 2 - Introduit dans l'UE 5.5 en tant qu'implémentation de nouvelle génération avec une architecture interne améliorée. En savoir plus sur Pixel Streaming 2
Les deux versions sont entièrement prises en charge et disponibles dans les dernières versions d'Unreal Engine. Choisissez la version qui correspond à la configuration Pixel Streaming de votre projet.
L'API pour les deux versions est identique, la seule différence étant que les classes et fonctions de Pixel Streaming 2 incluent "2" dans leurs noms (par exemple, UPixelStreamingCapturableSoundWave vs UPixelStreaming2CapturableSoundWave).
Compatibilité
Cette solution fonctionne avec :
- L'infrastructure Pixel Streaming officielle (Implémentation de référence Epic Games)
- Les fournisseurs Pixel Streaming tiers incluant :
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Autres solutions de streaming basées sur WebRTC
- Systèmes d'exploitation : Serveurs Windows et Linux
L'implémentation a été testée dans ces environnements et fonctionne correctement quel que soit la solution d'hébergement Pixel Streaming utilisée.
Installation du Plugin d'Extension
Cette fonctionnalité est fournie en tant qu'extension au plugin Runtime Audio Importer. Pour l'utiliser, vous devez :
- Assurez-vous que le plugin Runtime Audio Importer est déjà installé dans votre projet
- Téléchargez le plugin d'extension pour votre version de Pixel Streaming :
- Pixel Streaming : Télécharger depuis Google Drive
- Pixel Streaming 2 : Télécharger depuis Google Drive
- Extrayez le dossier de l'archive téléchargée dans le dossier
Pluginsde votre projet (créez ce dossier s'il n'existe pas) - Recompilez votre projet (cette extension nécessite un projet 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 construction manuelle de 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
Tout d'abord, 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 un "2" dans le nom)
PixelStreamingSoundWave = UPixelStreaming2CapturableSoundWave::CreatePixelStreaming2CapturableSoundWave();
Vous devez traiter la Pixel Streaming Capturable Sound Wave comme une référence forte pour éviter sa destruction prématurée (par exemple en l'assignant à une variable séparée dans Blueprints ou en utilisant UPROPERTY() en C++).
Démarrage et Arrêt de la Capture
Vous pouvez démarrer et arrêter la capture audio avec des appels de fonction simples :
- 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();
Le paramètre DeviceId dans StartCapture est ignoré pour les ondes sonores capturables Pixel Streaming, car la source de capture est déterminée automatiquement ou par les informations du lecteur que vous avez définies.
Vérification du statut de capture
Vous pouvez vérifier si l'onde sonore capture actuellement de l'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();
Exemple Complet
Voici un exemple complet de configuration de la capture audio Pixel Streaming :
- Pixel Streaming
- Pixel Streaming 2
- Blueprint
- C++
![]()
Ceci est un exemple de code basique pour capturer des données audio depuis un client Pixel Streaming.
L'exemple utilise la fonction CapturePixelStreamingAudioExample située dans la classe UPixelStreamingAudioExample au sein du module EXAMPLEMODULE.
Pour exécuter l'exemple avec succès, assurez-vous d'ajouter les modules RuntimeAudioImporter et PixelStreaming 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 "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 depuis 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 à PublicDependencyModuleNames ou PrivateDependencyModuleNames dans le fichier .Build.cs, ainsi qu'au 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);
}
Travailler avec plusieurs lecteurs Pixel Streaming
Dans les scénarios où vous avez plusieurs clients Pixel Streaming connectés simultanément, vous devrez peut-être capturer l'audio de lecteurs spécifiques. Les fonctionnalités suivantes vous aident à gérer cela.
Obtenir les lecteurs Pixel Streaming disponibles
Pour identifier quels lecteurs Pixel Streaming sont connectés :
- 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);
}
}));
Configuration du lecteur à capturer
Lorsque vous devez capturer à partir d'un lecteur spécifique :
- 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;
Si vous laissez l'ID du joueur vide, l'onde sonore écoutera automatiquement le premier joueur disponible qui se connecte. C'est le comportement par défaut qui fonctionne bien pour les scénarios à un seul joueur.
Cas d'utilisation courants
Mise en œuvre du chat vocal
Vous pouvez utiliser les Pixel Streaming Capturable Sound Waves pour mettre en œuvre un chat vocal entre les utilisateurs distants et les joueurs locaux :
- Créez une Pixel Streaming Capturable Sound Wave pour chaque joueur connecté
- Configurez un système pour gérer quels joueurs parlent actuellement
- Utilisez le système de Détection d'activité vocale pour détecter quand les utilisateurs parlent
- Spatialisez l'audio en utilisant le système audio d'Unreal Engine si nécessaire
Commandes vocales avec reconnaissance vocale
Vous pouvez mettre en œuvre la reconnaissance de commandes vocales pour les utilisateurs distants en combinant cette fonctionnalité avec le plugin Runtime Speech Recognizer :
- Capturez l'audio des clients Pixel Streaming en utilisant Pixel Streaming Capturable Sound Wave
- Transmettez l'audio capturé directement au Runtime Speech Recognizer
- Traitez le texte reconnu dans votre logique de jeu
Remplacez simplement la Capturable Sound Wave standard par une Pixel Streaming Capturable Sound Wave (ou Pixel Streaming 2 Capturable Sound Wave) dans les exemples du Runtime Speech Recognizer, et cela fonctionnera parfaitement avec l'entrée audio Pixel Streaming.
Enregistrement de l'audio des utilisateurs distants
Vous pouvez enregistrer l'audio des utilisateurs distants pour une lecture ultérieure :
- Capturez l'audio en utilisant Pixel Streaming Capturable Sound Wave
- Exportez l'audio capturé vers un fichier en utilisant Exporter l'audio
- Sauvegardez le fichier pour une utilisation ou une analyse ultérieure