Quick Start Guide
This guide will help you record your first video in under 5 minutes!
Your First Recording (Blueprint)
Step 1: Get the Recorder Subsystem
In any Blueprint (e.g., your Player Controller, Game Mode, or custom Actor):
- Right-click in the Event Graph
- Search for "Get Engine Subsystem"
- Select Runtime Video Recorder as the class
Step 2: Start Recording
- Right-click and search for "Start Recording"
- Connect it to your Begin Play or a custom event (like a button press)
Event BeginPlay → Start RecordingBasic Setup:
Out Filename: "%auto%" (auto-generates timestamp-based filename)
Target FPS: 30
Width: -1 (uses viewport width)
Height: -1 (uses viewport height)
Record UI: ✓ checked
Enable Audio Recording: ✓ checkedStep 3: Stop Recording
- Search for "Stop Recording"
- Connect it to your custom event (e.g., key press, button click, or End Play)
Event (e.g., Key Press R) → Stop RecordingComplete Example
Here's a complete example that records when F9 is pressed and stops when F10 is pressed:
// Start Recording on F9
InputAction F9 Pressed
→ Get Engine Subsystem (RuntimeVideoRecorder)
→ Start Recording (OutFilename: "%auto%", TargetFPS: 60, Width: 1920, Height: 1080)
// Stop Recording on F10
InputAction F10 Pressed
→ Get Engine Subsystem (RuntimeVideoRecorder)
→ Stop Recording
→ Get Last Recording Filepath
→ Print String (to show where video was saved)Your First Recording (C++)
Step 1: Include the Header
cpp
#include "RuntimeVideoRecorder.h"Step 2: Add to Build.cs
In your module's .Build.cs file:
csharp
PublicDependencyModuleNames.AddRange(new string[] {
"Core",
"CoreUObject",
"Engine",
"RuntimeVideoRecorder" // Add this
});Step 3: Implement Recording
cpp
// MyPlayerController.h
UCLASS()
class AMyPlayerController : public APlayerController
{
GENERATED_BODY()
protected:
virtual void SetupInputComponent() override;
void StartVideoRecording();
void StopVideoRecording();
};
// MyPlayerController.cpp
void AMyPlayerController::SetupInputComponent()
{
Super::SetupInputComponent();
InputComponent->BindAction("StartRecording", IE_Pressed, this, &AMyPlayerController::StartVideoRecording);
InputComponent->BindAction("StopRecording", IE_Pressed, this, &AMyPlayerController::StopVideoRecording);
}
void AMyPlayerController::StartVideoRecording()
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (Recorder && !Recorder->IsRecordingInProgress())
{
FRuntimeEncoderSettings Settings;
Settings.VideoBitrate = 20000000; // 20 Mbps
Settings.Profile = ERuntimeEncoderProfile::Profile_High;
Settings.TargetQuality = 75;
bool bSuccess = Recorder->StartRecording(
TEXT("%auto%"), // Auto-generate filename
60, // 60 FPS
1920, 1080, // Resolution
Settings,
true, // Record UI
true // Enable audio
);
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Recording started!"));
}
}
}
void AMyPlayerController::StopVideoRecording()
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (Recorder && Recorder->IsRecordingInProgress())
{
Recorder->StopRecording_NativeAPI();
FString OutputPath = Recorder->GetLastRecordingFilepath();
UE_LOG(LogTemp, Log, TEXT("Recording saved to: %s"), *OutputPath);
}
}Where Are Videos Saved?
When using "%auto%", videos are saved to:
<Your_Project_Directory>/Saved/<timestamp>.mp4Example:
MyProject/Saved/2025-01-15_14-30-45.mp4You can also specify a custom path:
cpp
Recorder->StartRecording(TEXT("E:/MyVideos/gameplay.mp4"), ...);Common Recording Scenarios
Record Gameplay Session
cpp
// Start recording when level begins
void AMyGameMode::BeginPlay()
{
Super::BeginPlay();
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (Recorder)
{
Recorder->StartRecording(TEXT("%auto%"), 30, -1, -1);
}
}
// Stop when level ends
void AMyGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (Recorder && Recorder->IsRecordingInProgress())
{
Recorder->StopRecording_NativeAPI();
}
Super::EndPlay(EndPlayReason);
}Record with Custom Encoder Settings
cpp
void StartHighQualityRecording()
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
FRuntimeEncoderSettings Settings;
Settings.VideoBitrate = 30000000; // 30 Mbps (higher quality)
Settings.Profile = ERuntimeEncoderProfile::Profile_High;
Settings.RCMode = ERuntimeEncoderRCMode::RC_Quality;
Settings.TargetQuality = 90; // Very high quality
Settings.KEYFRAME_INTERVAL = 60; // Keyframe every 60 frames
Recorder->StartRecording(
TEXT("E:/HighQuality/video.mp4"),
60, // 60 FPS
3840, // 4K width
2160, // 4K height
Settings,
false, // Don't record UI
true // Enable audio
);
}Record from Specific Camera
cpp
void RecordCameraView(UCameraComponent* MyCamera)
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (Recorder && MyCamera)
{
Recorder->StartRecordingCamera(
MyCamera,
TEXT("%auto%"),
60, // 60 FPS
1920, 1080,
FRuntimeEncoderSettings(),
true // Enable audio
);
}
}Toggle Recording (On/Off with Same Key)
cpp
void AMyPlayerController::ToggleRecording()
{
URuntimeVideoRecorder* Recorder = GEngine->GetEngineSubsystem<URuntimeVideoRecorder>();
if (!Recorder) return;
if (Recorder->IsRecordingInProgress())
{
// Stop recording
Recorder->StopRecording_NativeAPI();
UE_LOG(LogTemp, Log, TEXT("Recording stopped"));
}
else
{
// Start recording
bool bSuccess = Recorder->StartRecording(TEXT("%auto%"), 30, -1, -1);
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Recording started"));
}
}
}Testing Your Setup
- Start the Editor
- Play in Editor (PIE)
- Press your recording start key (e.g., F9)
- Record some gameplay (move around, interact)
- Press your recording stop key (e.g., F10)
- Check the Output Log - it should show the save location
- Open the video file in your favorite media player
Troubleshooting Quick Start
Recording Doesn't Start
Check:
- Is another recording already in progress? Use
IsRecordingInProgress() - Does the output directory exist? Plugin won't create directories
- Check Output Log for error messages
Video Quality Is Poor
Solutions:
- Increase
VideoBitrateto 30000000 or higher - Set
ProfiletoProfile_High - Increase
TargetQualityto 75-90
No Audio in Video
Check:
- Is
bEnableAudioRecordingset totrue? - Is
bFrameRateIndependentset tofalse? (Audio doesn't work with frame-rate independent mode) - Are AudioCapture and ElectraPlayer plugins enabled?
- Check Project Settings → Audio for proper audio device configuration
Game Lags While Recording
Solutions:
- Enable hardware acceleration in Project Settings
- Lower video resolution
- Reduce
TargetFPS - Check that you're not using
bDebugDumpEachFrame = true
Next Steps
Now that you can record basic videos, explore more:
- How-To Guide - 10 practical recording scenarios with code examples
- API Reference - Complete API documentation
- Troubleshooting - Common issues and solutions
- Project Settings - Global configuration options
Sample Project
Check the included sample content:
Content/Level_RuntimeVideoRecorder.umap- Demo level with recording UIContent/BP_RVR_GameMode.uasset- Example game mode with recordingContent/Widget_AndroidRecording.uasset- Mobile-friendly UI
