التقاط الصوت عبر بيكسل ستريمينج
بيكسل ستريمينج هو ملحق لمحرك أنريل إنجن يقوم ببث الإطارات المُصورة ومزامنة الإدخال/الإخراج عبر WebRTC. يعمل التطبيق على جانب الخادم، بينما يتولى جانب العميل التصيير والتفاعل مع المستخدم. لمزيد من التفاصيل حول بيكسل ستريمينج والإعداد، راجع توثيق بيكسل ستريمينج.
التوافقية
يعمل هذا الحل مع:
- بنية بيكسل ستريمينج الرسمية (التنفيذ المرجعي من إبك جيمز)
- موفرو بيكسل ستريمينج من طرف ثالث بما في ذلك:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- حلول البث الأخرى القائمة على WebRTC
- أنظمة التشغيل: خوادم ويندوز ولينكس
تم اختبار هذا التنفيذ عبر هذه البيئات ويعمل بشكل صحيح بغض النظر عن حل استضافة بيكسل ستريمينج المستخدم.
تثبيت ملحق الإضافة
توفر هذه الميزة كإضافة لملحق Runtime Audio Importer. لاستخدامها، تحتاج إلى:
- التأكد من تثبيت ملحق Runtime Audio Importer مسبقًا في مشروعك
- تنزيل ملحق التقاط صوت بيكسل ستريمينج من جوجل درايف
- استخراج المجلد من الأرشيف المُنزّل إلى مجلد
Plugins
في مشروعك (قم بإنشاء هذا المجلد إذا لم يكن موجودًا) - إعادة بناء مشروعك (يتطلب هذا الملحق مشروعًا بلغة C++)
- يتم توفير هذا الملحق كشفرة مصدرية ويتطلب مشروعًا بلغة C++ لاستخدامه
- إصدارات أنريل إنجن المدعومة: UE 5.2 وما بعده
- لمزيد من المعلومات حول كيفية بناء الملحقات يدويًا، راجع برنامج تعليمي لبناء الملحقات
نظرة عامة
يمتد Pixel Streaming Capturable Sound Wave من Capturable Sound Wave القياسي للسماح بتسجيل الصوت مباشرة من ميكروفونات عملاء بيكسل ستريمينج. تتيح لك هذه الميزة:
- تسجيل الصوت من المتصفحات المتصلة عبر بيكسل ستريمينج
- معالجة الصوت من لاعبين/أقران محددين
- تنفيذ الدردشة الصوتية، أوامر الصوت، أو تسجيل الصوت من المستخدمين البعيدين
الاستخدام الأساسي
إنشاء 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 متصلين في نفس الوقت، قد تحتاج إلى التقاط الصوت من مشغلات معينة. الميزات التالية تساعدك في إدارة ذلك.
الحصول على مشغلات Pixel Streaming المتاحة
لتحديد مشغلات Pixel Streaming المتصلة:
- 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);
}
}));