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";
}