OBS 是一个开源的视频直播软件
功能很强大,B站 快手 抖音 直播软件大都以此为基础,进行二次开发,或深度借鉴OBS进行开发。
OBS开发中,会常用到很多内部定义的源,本文将各种源枚举下,以方便查找。
OBS很多函数 是以源id为参数的,
id,是定义在源的导出接口中的
比如
struct obs_source_info window_capture_info = { .id = "window_capture", .type = OBS_SOURCE_TYPE_INPUT, .output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW, .get_name = wc_getname, .create = wc_create, .destroy = wc_destroy, .update = wc_update, .video_render = wc_render, .video_tick = wc_tick, .get_width = wc_width, .get_height = wc_height, .get_defaults = wc_defaults, .get_properties = wc_properties};
OBS有哪些源ID呢,在此列举下:
ID name
image_source 图像
color_source 色源
slideshow 图像幻灯片放映
ffmpeg_source 媒体源
text_gdiplus 文本 (GDI+)
text_ft2_source 文本 (FreeType 2)
monitor_capture 显示器捕获
window_capture 窗口捕获
game_capture 游戏捕获
dshow_input 视频捕获设备
wasapi_input_capture 音频输入捕获
wasapi_output_capture 音频输出捕获
img_TransImg 透明图 —–自定义的
比如 右键 添加按钮,会添加各种源,所用的相关API接口如下:
/** * Enumerates all available inputs source types. * * Inputs are general source inputs (such as capture sources, device sources, * etc). */EXPORT bool obs_enum_input_types(size_t idx, const char **id);
/** Returns the translated display name of a source */EXPORT const char *obs_source_get_display_name(const char *id);
/** Returns capability flags of a source */EXPORT uint32_t obs_source_get_output_flags(const obs_source_t *source);/** Returns capability flags of a source type */EXPORT uint32_t obs_get_source_output_flags(const char *id);
右键菜单代码,遍历源ID
QMenu *OBSBasic::CreateAddSourcePopupMenu()
const char *type; size_t idx = 0; while (obs_enum_input_types(idx++, &type)) { const char *name = obs_source_get_display_name(type); uint32_t caps = obs_get_source_output_flags(type); //... if (strcmp(type, "image_source") == 0 || strcmp(type, "monitor_capture") == 0 || strcmp(type, "dshow_input") == 0) //... { if ((caps & OBS_SOURCE_DEPRECATED) == 0) { addSource(popup, type, name); //addSource(popup, type, name); } else { addSource(deprecated, type, name); foundDeprecated = true; } foundValues = true; } }