Захват Аудио для Pixel Streaming
Pixel Streaming - это плагин для Unreal Engine, который передает поток рендерингных кадров и синхронизирует ввод/вывод через WebRTC. Приложение работает на стороне сервера, в то время как клиентская сторона обрабатывает рендеринг и взаимодействие с пользователем. Для получения дополнительной информации о Pixel Streaming и настройке, обратитесь к Документации по Pixel Streaming.
Совместимость
Это решение работает с:
- Официальной инфраструктурой Pixel Streaming (Реализация от Epic Games)
- Сторонними поставщиками Pixel Streaming, включая:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Другие решения потоковой передачи на основе WebRTC
- Операционными системами: серверы Windows и Linux
Реализация была протестирована в этих средах и работает корректно вне зависимости от используемого решения для размещения Pixel Streaming.
Установка Расширения Плагина
Эта функция предоставляется в виде расширения для плагина Runtime Audio Importer. Чтобы использовать его, необходимо:
- Убедиться, что плагин Runtime Audio Importer уже установлен в вашем проекте
- Скачать расширение плагина Pixel Streaming Audio Capture из Google Drive
- Извлечь папку из загруже нного архива в папку
Plugins
вашего проекта (создайте эту папку, если она не существует) - Пересобрать ваш проект (это расширение требует проект C++)
- Это расширение предоставляется в виде исходного кода и требует проект C++ для использования
- Поддерживаемые версии Unreal Engine: UE 5.2 и более поздние
- Для получения дополнительной информации о том, как вручную собирать плагины, см. Учебник по созданию плагинов
Обзор
Pixel Streaming Capturable Sound Wave расширяет стандартный Capturable Sound Wave, чтобы позволить захватывать аудио непосредственно с микрофонов клиентов Pixel Streaming. Эта функция позволяет вам:
- З ахватывать аудио из браузеров, подключенных через Pixel Streaming
- Обрабатывать аудио от конкретных игроков/пиров
- Реализовать голосовой чат, голосовые команды или аудиозапись от удаленных пользователей
Основное Использование
Создание Pixel Streaming Capturable Sound Wave
Сначала вам нужно создать объект Pixel Streaming Capturable Sound Wave:
- Blueprint
- C++
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
Вы должны рассматривать Pixel Streaming Capturable Sound Wave как сильную ссылку, чтобы предотвратить преждевременное уничтожение (например, присвоив его отдельной переменной в Blueprints или используя UPROPERTY()
в C++).
Начало и остановка захвата
Вы можете начать и остановить захват аудио с помощью простых вызовов функций:
- 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();
Параметр DeviceId
в StartCapture
игнорируется для Pixel Streaming Capturable Sound Waves, так как источник захвата определяется автоматически или по информации, которую вы задали для игрока.
Проверка статуса захвата
Вы можете проверить, захватывает ли в данный момент аудио звуковая волна:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Полный Пример
Вот полный пример настройки захвата аудио в Pixel Streaming:
- Blueprint
- C++
Это базо вый пример кода для захвата аудио данных от клиента Pixel Streaming.
Пример использует функцию CapturePixelStreamingAudioExample
, расположенную в классе UPixelStreamingAudioExample
в модуле EXAMPLEMODULE
.
Чтобы успешно запустить пример, убедитесь, что вы добавили модули RuntimeAudioImporter
и PixelStreaming
в PublicDependencyModuleNames
или PrivateDependencyModuleNames
в файле .Build.cs, а также в файл .uproject вашего проекта.
#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);
}
Работа с несколькими Pixel Streaming плеерами
В сценариях, когда у вас несколько клиентов Pixel Streaming подключены одновременно, возможно, вам потребуется захватить аудио от конкретных плееров. Следующие функции помогут вам управлять этим.