Help with Black Screen Issue in Window Capture Using OBS SDK Version 30.1.2

calvin.sam

New Member
I am using version 30.1.2 and want to implement window recording for a secondary development. However, the video is always black without content, though there is sound. Can you tell me where I went wrong in my code above regarding window capture? Thank you.



Code:
void MainWindow::setupWindowCapture() {
    obs_source_t* window_capture = obs_source_create("window_capture", "window capture", NULL, NULL);
    if (!window_capture) {
        qDebug() << "Failed to create window capture source";
        return;
    }

    obs_data_t* settings = obs_data_create();
    // obs_data_set_string(settings, "window", "mainwindow.cpp @ EasyRecord - Qt Creator"); // Specify window name
    obs_data_set_string(settings, "class", "Notepad");

    obs_source_update(window_capture, settings);
    obs_data_release(settings);

    mainScene = obs_scene_create("Main Scene");
    if (!mainScene) {
        qDebug() << "Failed to create scene";
        return;
    }

    obs_sceneitem_t* scene_item = obs_scene_add(mainScene, window_capture);
    if (!scene_item) {
        qDebug() << "Failed to add window capture to scene";
        return;
    }
    obs_sceneitem_set_visible(scene_item, true);
    obs_source_release(window_capture);
    obs_set_output_source(0, obs_scene_get_source(mainScene));
    qDebug() << "Window capture setup complete";
}

// Start Recording
void MainWindow::startRecording() {
    // Print audio source status information
    printAudioStatus("Microphone");
    printAudioStatus("Desktop Audio");

    output = obs_output_create("ffmpeg_output", "my_output", NULL, NULL);
    if (!output) {
        return;
    }

    obs_output_set_mixers(output, 0x01);
    obs_output_set_media(output, obs_get_video(), obs_get_audio());

    obs_data_t* settings = obs_data_create();
    obs_data_set_string(settings, "url", "D:/video/output.mp4");
    obs_data_set_string(settings, "format_name", "mp4");
    obs_data_set_string(settings, "muxer_settings", "movflags=+faststart");
    obs_data_set_string(settings, "video_encoder", "libx264");
    obs_data_set_string(settings, "profile", "high");
    obs_data_set_string(settings, "level", "4.1");
    obs_data_set_string(settings, "x264opts", "preset=slow");
    obs_data_set_string(settings, "color_format", "yuv420p");
    obs_data_set_string(settings, "audio_encoder", "aac");
    obs_data_set_int(settings, "video_bitrate", 2000);
    obs_data_set_int(settings, "audio_bitrate", 128);
    obs_data_set_int(settings, "gop_size", 120);
    obs_data_set_int(settings, "scale_width", 1920);
    obs_data_set_int(settings, "scale_height", 1080);
    obs_output_update(output, settings);

    obs_data_t* data = obs_output_get_settings(output);
    const char* json = obs_data_get_json(data);
    qDebug() << "Current output settings:" << json;

    obs_data_release(settings);

    if (!obs_output_start(output)) {
        const char* error_message = obs_output_get_last_error(output);
        qDebug() << "Failed to start recording output:" << error_message;
        qDebug() << "Failed to start output";
        obs_output_release(output);
        output = nullptr;
        return;
    }
    qDebug() << "Recording started";
}
 
Top