UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GameplayMediaEncoder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7
8#include "Logging/LogMacros.h"
9#include "AudioMixerDevice.h"
10
11#include "RHI.h"
12#include "RHIResources.h"
13
14#include "HAL/Thread.h"
15
17#pragma warning(push)
18#pragma warning(disable: 4596 6319 6323)
19
20#pragma warning(pop)
22
23#include "AudioEncoder.h"
24#include "VideoEncoder.h"
25#include "MediaPacket.h"
28#include "VideoEncoderInput.h"
29
30class SWindow;
31
33{
34public:
36 virtual void OnMediaSample(const AVEncoder::FMediaPacket& Sample) = 0;
38};
39
41class UE_DEPRECATED(5.4, "GameplayMediaEncoder will move to a plugin in a future Unreal Engine release.") FGameplayMediaEncoder final : public ISubmixBufferListener, public AVEncoder::IAudioEncoderListener
43{
44public:
45
50
52
54 GAMEPLAYMEDIAENCODER_API void UnregisterListener(IGameplayMediaEncoderListener* Listener);
55
58
60 // * Returns the audio codec name and configuration
61 // */
62 //TPair<FString, AVEncoder::FAudioConfig> GetAudioConfig() const;
63 //TPair<FString, AVEncoder::FVideoConfig> GetVideoConfig() const;
64
67 GAMEPLAYMEDIAENCODER_API bool Start();
69
70 static void InitializeCmd()
71 {
72 // We call Get(), so it creates the singleton
73 Get()->Initialize();
74 }
75
76 static void ShutdownCmd()
77 {
78 // We call Get(), so it creates the singleton
79 Get()->Shutdown();
80 }
81
82 static void StartCmd()
83 {
84 // We call Get(), so it creates the singleton
85 Get()->Start();
86 }
87
88 static void StopCmd()
89 {
90 // We call Get(), so it creates the singleton
91 Get()->Stop();
92 }
93
95 GAMEPLAYMEDIAENCODER_API AVEncoder::FAudioConfig GetAudioConfig() const;
96 AVEncoder::FVideoConfig GetVideoConfig() const { return VideoConfig; }
98
99private:
100 template <typename ObjectType, ESPMode Mode>
102
103 // Private to control how our single instance is created
105
106 // Returns how long it has been recording for.
108
109 // Back buffer capture
111
112 // ISubmixBufferListener interface
113 GAMEPLAYMEDIAENCODER_API const FString& GetListenerName() const override;
114 GAMEPLAYMEDIAENCODER_API void OnNewSubmixBuffer(const USoundSubmix* OwningSubmix, float* AudioData, int32 NumSamples, int32 NumChannels, const int32 SampleRate, double AudioClock) override;
115
116 GAMEPLAYMEDIAENCODER_API void ProcessAudioFrame(const float* AudioData, int32 NumSamples, int32 NumChannels, int32 SampleRate);
118
120
122 GAMEPLAYMEDIAENCODER_API void OnEncodedAudioFrame(const AVEncoder::FMediaPacket& Packet) override;
123 GAMEPLAYMEDIAENCODER_API void OnEncodedVideoFrame(uint32 LayerIndex, const TSharedPtr<AVEncoder::FVideoEncoderInputFrame> Frame, const AVEncoder::FCodecPacket& Packet);
124
127 GAMEPLAYMEDIAENCODER_API void CopyTexture(const FTextureRHIRef& SourceTexture, FTextureRHIRef& DestinationTexture) const;
128
130
133
136
139
140 AVEncoder::FVideoConfig VideoConfig;
141
145
147 FTimespan StartTime = 0;
148
149 // Instead of using the AudioClock parameter ISubmixBufferListener::OnNewSubmixBuffer gives us, we calculate our own, by
150 // advancing it as we receive more data.
151 // This is so that we can adjust the clock if things get out of sync, such as if we break into the debugger.
152 double AudioClock = 0;
153
155
156 bool bAudioFormatChecked = false;
157 bool bDoFrameSkipping = false;
158
159 friend class FGameplayMediaEncoderModule;
161
162 // live streaming: quality adaptation to available uplink b/w
167
172
173 bool bIsInDestructor = false;
174};
175
176
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define THIRD_PARTY_INCLUDES_START
Definition GenericPlatformCompilerPreSetup.h:63
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition GameplayMediaEncoderModule.cpp:10
Definition ThreadSafeBool.h:17
Definition GameplayMediaEncoder.h:33
virtual PRAGMA_DISABLE_DEPRECATION_WARNINGS void OnMediaSample(const AVEncoder::FMediaPacket &Sample)=0
Definition ISubmixBufferListener.h:13
virtual void OnNewSubmixBuffer(const USoundSubmix *OwningSubmix, float *AudioData, int32 NumSamples, int32 NumChannels, const int32 SampleRate, double AudioClock)=0
virtual const FString & GetListenerName() const
Definition ISubmixBufferListener.h:41
Definition SWindow.h:243
Definition SharedPointerInternals.h:400
Definition Array.h:670
Definition Atomic.h:538
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition SoundSubmix.h:334
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
Definition Voronoi.cpp:10
Definition Timespan.h:76