OBS二次开发 | 源码解读(一) | 初始化流程

!!!注意:不同版本的OBS源码,函数、参数等有细节性差别…

前期回顾:
OBS二次开发 | 构建、编译

OBS28.1.0源码

一、判断是否已经初始化OBS

1.函数声明/定义

/** @return true if the main OBS context has been initialized */
EXPORT bool obs_initialized(void);

bool obs_initialized(void)
{
   
	return obs != NULL;
}

2.函数调用

在进行OBS初始化之前,先判断是否已经完成了初始化。若已完成初始化,则不需再进行初始化;若未进行初始化,再进行初始化。

if (obs_initialized())
	return false;

二、初始化OBS

1.函数声明/定义

/**
 * Initializes OBS
 * @param  locale              The locale to use for modules
 * @param  module_config_path  Path to module config storage directory (or NULL if none)
 * @param  store               The profiler name store for OBS to use or NULL
 */
EXPORT bool obs_startup(const char *locale, const char *module_config_path, profiler_name_store_t *store);

//核心:obs_init(locale, module_config_path, store);
static const char *obs_startup_name = "obs_startup";
bool obs_startup(const char *locale, const char *module_config_path, profiler_name_store_t *store)
{
   
	bool success;
	profile_start(obs_startup_name);
	if (obs) {
   
		blog(LOG_WARNING, "Tried to call obs_startup more than once");
		return false;
	}
#ifdef _WIN32
	com_initialized = initialize_com();
#endif
	/*
	其中obs_init(locale, module_config_path, store);对struct obs_core *obs;进行初始化设置。成功则返回true;
	static bool obs_init(const char *locale, const char *module_config_path, profiler_name_store_t *store)
	*/
	success = obs_init(locale, module_config_path, store);
	profile_end(obs_startup_name);
	if (!success) //失败则调用obs_shutdown();将释放obs并置空obs = NULL;。
		obs_shutdown();
	return success;
}

2.函数调用

这里对struct obs_core *obs;进行初始化设置。

if (!obs_startup("zh-CN", nullptr, nullptr))
	return false;

三、初始化音频基本配置

1.函数定义/声明

设置基本音频输出格式、通道、样本等…
如果输出当前处于活动状态,则无法重置基本音频。

EXPORT bool obs_reset_audio2(const struct obs_audio_info2 *oai);
//核心:obs_init_audio(&ai);
bool obs_reset_audio2(const struct obs_audio_info2 *oai)
{
   
	struct obs_core_audio *audio = &obs->audio;
	struct audio_output_info ai;
	/* don't allow changing of audio settings if active. */
	if (!obs || (audio->audio && audio_output_active(audio->audio)))
		return false;
	obs_free_audio();
	if (!oai)
		return true;
	if (oai->max_buffering_ms) {
   
		uint32_t max_frames = oai->max_buffering_ms *
				      oai->samples_per_sec / SEC_TO_MSEC;
		max_frames += (AUDIO_OUTPUT_FRAMES - 1);
		audio->max_buffering_ticks = max_frames / AUDIO_OUTPUT_FRAMES;
	} else {
   
		audio->max_buffering_ticks = 45;
	}
	audio->fixed_buffer = oai->fixed_buffering;
	int max_buffering_ms = audio->max_buffering_ticks *
			       AUDIO_OUTPUT_FRAMES * SEC_TO_MSEC /
			       (int)oai->samples_per_sec;

	ai.name = "Audio";
	ai.samples_per_sec = oai->samples_per_sec;
	ai.format = AUDIO_FORMAT_FLOAT_PLANAR;
	ai.speakers = oai->speakers;
	ai.input_callback = audio_callback;
	blog(LOG_INFO, "---------------------------------")
  • 33
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在OBS源码中添加图片来源,首先需要理解OBS的基本结构和工作原理。OBS(Open Broadcaster Software)是一款开源的多媒体直播和录制软件,可以通过它进行实时视频和音频的捕获、混音、编码和广播。 在OBS中,源码的添加是通过插件(Plugin)来实现的。插件是一种扩展功能的模块,可以将自定义的代码和资源整合到OBS中。 添加图片源的过程如下: 1. 创建一个新的插件项目。可以通过OBS提供的插件模板来创建一个新的插件项目,或者根据自己的需求进行修改。 2. 在插件的源代码中,添加一个新的源类型。这个新的源类型就是图片源,在源代码中定义它的基本属性和方法。例如,可以定义图片路径、尺寸、位置等属性,以及加载、渲染图片等方法。 3. 实现图片加载和渲染逻辑。使用合适的库,如OpenCV、SDL_image等,加载指定路径的图片,并将其渲染到OBS的场景中。这可以通过调用OBS提供的渲染接口来完成。 4. 在插件的设置中,提供一个界面用于用户配置图片路径、尺寸和位置等属性。这可以通过使用OBS提供的UI库和功能来实现。 5. 编译和安装插件。根据OBS的编译和安装流程,将插件代码编译成可执行文件,并将插件文件复制到OBS的插件目录中。 6. 启动OBS,进入“Sources”窗口,在“添加”下拉菜单中选择刚才添加的图片源类型。根据使用者的需求,配置图片源的相关属性。 通过以上步骤,就可以在OBS中成功添加一个图片源。用户可以通过更改配置文件、设置图片路径等方式,动态修改和加载图片。这样,就能够灵活地实现图片的嵌入和切换,从而满足不同场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值