Skip to main content

Recording Issues

Symptoms: StartRecording() returns but no recording begins.Solutions:
  1. Verify the Tracking ID is set in Project Settings
  2. Ensure a valid SceneCaptureComponent2D is registered
  3. Check log for errors: LogLCK, LogLCKEncoding
// Verify capture component is registered
if (!Service->IsInitialized())
{
    UE_LOG(LogTemp, Error, TEXT("Service not initialized"));
}
Symptoms: Recording ends without calling StopRecording().Solutions:
  1. Check OnRecordingError delegate for error messages
  2. Verify disk space is available
  3. Check for encoder errors in LogLCKEncoding
Service->OnRecordingError.AddDynamic(this, &AMyActor::HandleError);
void AMyActor::HandleError(FString Message, int32 Code)
{
    UE_LOG(LogTemp, Error, TEXT("Recording error %d: %s"), Code, *Message);
}
Symptoms: Recording looks blurry or has artifacts.Solutions:
  1. Increase video bitrate in recording settings
  2. Use a higher quality profile (HD, 2K, 4K)
  3. Check render target resolution matches recording resolution
// Ensure settings match your quality needs
Service->ApplyRecordingSettings(
    1920, 1080,  // Match render target
    30,
    8000000,     // Increase bitrate for quality
    256000,
    48000
);
Symptoms: Recording file is black but audio works.Solutions:
  1. Verify SceneCaptureComponent2D is capturing
  2. Check capture component has a valid render target
  3. Ensure capture component is enabled and visible
// Verify capture is working
CaptureComponent->bCaptureEveryFrame = true;
CaptureComponent->CaptureScene();

Audio Issues

Symptoms: Video records but audio is silent.Solutions:
  1. Verify audio plugins are enabled
  2. Check that audio sources are registered
  3. Ensure audio permissions are granted (Android)
// Check audio sources
TArray<ILCKAudioSource*> Sources;
IModularFeatures::Get().GetModularFeatureImplementations<ILCKAudioSource>(
    ILCKAudioSource::GetModularFeatureName(), Sources);

if (Sources.Num() == 0)
{
    UE_LOG(LogTemp, Warning, TEXT("No audio sources!"));
}
Symptoms: Audio has crackling, popping, or pitch issues.Solutions:
  1. Check sample rate matches between source and encoder
  2. Verify buffer sizes are adequate
  3. Check for CPU overload
// Match sample rates
int32 SourceRate = ULCKUnrealAudioBPL::GetUnrealAudioSamplerate();
Params.Samplerate = SourceRate;  // Must match
Symptoms: Game audio records but no microphone.Solutions:
  1. Check SetMicrophoneEnabled(true) is called
  2. Verify microphone permissions (Android)
  3. Check if another app is using the microphone
// Ensure mic is enabled
Service->SetMicrophoneEnabled(true);

// Verify
if (Service->IsMicrophoneEnabled())
{
    UE_LOG(LogTemp, Log, TEXT("Mic enabled"));
}

Platform Issues

Symptoms: Recording fails on Android devices.Solutions:
  1. Ensure Vulkan is enabled
  2. Check device supports hardware encoding
  3. Verify permissions in AndroidManifest.xml
; AndroidEngine.ini
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bEnableVulkanSM5Support=True
Symptoms: Recording fails with encoder initialization error.Solutions:
  1. Verify Windows Media Foundation is available
  2. Check GPU drivers are up to date
  3. Ensure AVCodecsCore plugin is enabled
Symptoms: Frame drops during recording on Quest.Solutions:
  1. Reduce recording resolution to HD (1080p) or SD (720p)
  2. Lower video bitrate
  3. Reduce framerate to 24 FPS
  4. Enable Vulkan for better encoding performance

UI Issues

Symptoms: UI buttons don’t register touches.Solutions:
  1. Verify collision profile is set correctly
  2. Check button is visible and enabled
  3. Verify interactor collision settings
// Ensure collision is set up
Button->CollisionBox->SetCollisionProfileName(
    FLCKConstants::UICollisionProfileName
);
Symptoms: UI components don’t appear.Solutions:
  1. Call Show() on showable components
  2. Check component is attached to visible actor
  3. Verify materials are loaded
// Make sure to show UI
Button->Show();

Plugin Issues

Symptoms: Plugin features unavailable at runtime.Solutions:
  1. Verify plugin is enabled in .uproject
  2. Check module dependencies in Build.cs
  3. Look for load errors in Output Log
// Verify in .uproject
{
  "Plugins": [
    { "Name": "LCK", "Enabled": true },
    { "Name": "LCKTablet", "Enabled": true }
  ]
}
Symptoms: Linker errors or undefined symbols.Solutions: Ensure all required modules are listed:
PublicDependencyModuleNames.AddRange(new string[] {
    "LCKCore",
    "LCKAudio",
    "LCKUI",      // If using UI
    "LCKTablet"   // If using tablet
});

Diagnostic Commands

Enable Verbose Logging

; DefaultEngine.ini
[Core.Log]
LogLCK=VeryVerbose
LogLCKEncoding=VeryVerbose
LogLCKAudio=VeryVerbose
LogLCKUI=Verbose
LogLCKTablet=Verbose

Runtime Diagnostics

void AMyActor::DiagnoseLCK()
{
    // Check subsystem
    auto* Subsystem = GetWorld()->GetSubsystem<ULCKSubsystem>();
    UE_LOG(LogTemp, Log, TEXT("Subsystem: %s"),
        Subsystem ? TEXT("OK") : TEXT("MISSING"));

    // Check service
    auto* Service = Subsystem ? Subsystem->GetService() : nullptr;
    UE_LOG(LogTemp, Log, TEXT("Service: %s"),
        Service ? TEXT("OK") : TEXT("MISSING"));

    // Check recorder
    auto* Recorder = GetWorld()->GetSubsystem<ULCKRecorderSubsystem>();
    UE_LOG(LogTemp, Log, TEXT("Recorder: %s"),
        Recorder ? TEXT("OK") : TEXT("MISSING"));

    // Check audio sources
    TArray<ILCKAudioSource*> Sources;
    IModularFeatures::Get().GetModularFeatureImplementations<ILCKAudioSource>(
        ILCKAudioSource::GetModularFeatureName(), Sources);
    UE_LOG(LogTemp, Log, TEXT("Audio sources: %d"), Sources.Num());
}

Getting Help

If you can’t resolve an issue:
  1. Enable verbose logging and capture the output
  2. Note the exact error message and conditions
  3. Check the Best Practices guide
  4. Join our Community Discord