OBS 二次开发插件录屏

基于OBS二次开发的录屏工具,使用OBS的SDK和Qt开发的工具。QT 5.15.2 MSVC 64编译。

添加视频源

int obsRecord::AddSource(eCaptureType model)
{
    //清除之前的Source
    clearScene();

    //音频源处理
    obs_set_output_source(kChannelTransitions, NULL);
    obs_set_output_source(kChannelOutput, NULL);
    obs_set_output_source(kChannelInput, NULL);

    //设置淡入淡出
    size_t idx = 0;
    const char *id;

    /* automatically add transitions that have no configuration (things
     * such as cut/fade/etc) */
    while (obs_enum_transition_types(idx++, &id)) {
        if (!obs_is_source_configurable(id)) {
            const char *name = obs_source_get_display_name(id);

            obs_source_t *tr =
                obs_source_create_private(id, name, NULL);

            if (strcmp(id, "fade_transition") == 0)
                fadeTransition_ = tr;
        }
    }

    if(!fadeTransition_)
        return false;

    obs_set_output_source(kChannelTransitions, fadeTransition_);
    obs_source_release(fadeTransition_);

    obs_source_t *s = obs_get_output_source(kChannelTransitions);
    obs_transition_set(s, obs_scene_get_source(scene_));
    obs_source_release(s);

    //音频输入输出源添加
    if(HasAudioDevices(OUTPUT_AUDIO_SOURCE))
        ResetAudioDevice(OUTPUT_AUDIO_SOURCE, "default", "DesktopDevice1", kChannelOutput);
    if(HasAudioDevices(INPUT_AUDIO_SOURCE))
        ResetAudioDevice(INPUT_AUDIO_SOURCE, "default", "AuxDevice1", kChannelInput);


    //设置降噪处理
    AddFilterToAudioInput("noise_suppress_filter");

    //添加画面采集源
    if(model == kCaptureWindow)
    {
        captureSource_ = obs_source_create(CaptureWindowID, "WindowCapture", NULL, NULL);
    }
    else if(model == kCaptureMonitor)
    {
        captureSource_ = obs_source_create(CaptureMonitorID, "CaptureMonitor", NULL, NULL);
    }
    if(!captureSource_)
        return false;
    eCaptureModel_ = model;
    //添加Source到场景中
    obs_enter_graphics();
    obs_scene_atomic_update(scene_, AddSourceToScene, captureSource_);
    obs_leave_graphics();


    //设置默认采集窗口
    // obs_data_t *setting = obs_source_get_settings(captureSource_);
    // obs_data_t *cpSetting = obs_data_create();
    // obs_data_apply(cpSetting, setting);
    // obs_data_release(setting);


    captureSourceProperty_ = obs_source_properties(captureSource_);

    printf("AddSource Success\n");
    return true;
}

开始录制
 

bool obsRecord::startRecording(const std::string &fileName)
{
    OBSDataAutoRelease settings = obs_data_create();

    obs_data_set_string(settings, "url", fileName.c_str());
    obs_data_set_string(settings, "format_name", ".mp4");
    obs_data_set_string(settings, "format_mime_type", "mime/mp4");
    obs_data_set_string(settings, "muxer_settings", "movflags=faststart");
//    obs_data_set_int(settings, "gop_size", 200);
    obs_data_set_int(settings, "gop_size", m_FPS * 10);
    obs_data_set_int(settings, "video_bitrate", 150);
    obs_data_set_string(settings, "video_encoder", "libx264");
    obs_data_set_int(settings, "video_encoder_id", AV_CODEC_ID_H264);   //AV_CODEC_ID_H264
    obs_data_set_string(settings, "video_settings", "profile=main x264-params=crf=22");
    obs_data_set_int(settings, "audio_bitrate", 128);
    obs_data_set_string(settings, "audio_encoder", "aac");
    obs_data_set_int(settings, "audio_encoder_id", AV_CODEC_ID_AAC); //AV_CODEC_ID_AAC
    obs_data_set_string(settings, "audio_settings", NULL);

    obs_output_set_mixers(recordOutput_, 1);
    obs_output_set_media(recordOutput_, obs_get_video(), obs_get_audio());
    obs_output_update(recordOutput_, settings);

    obs_data_release(settings);

    if(obs_output_start(recordOutput_))
        return true;
    blog(LOG_ERROR, "start failed");
    return false;
}

OBS 二次开发插件录屏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值