OBS工具配合OBS插件SDK可实现OutPut插件功能。通过阅读本文,你可以了解实现OBS OutPut插件的方法。 使用限制 仅支持在Windows和Mac平台编译OBS源码。 操作步骤 下载并解压OBS源码。下载地址,请参见OBS-Studio。 下载并解压OBS插件SDK。下载地址,请参见SDK下载。 在obs-studio/plugins/obs-outputs目录(OBS源码目录)中创建ali_rts_sdk文件夹,并复制ali_rts_sdk目录(OBS插件SDK解压之后的目录)中的include和lib文件夹至obs-studio/plugins/obs-outputs/ali_rts_sdk目录中。 复制ali_rts_sdk/obs-output-example目录(OBS插件SDK解压之后的目录)中的artc-stream.h和artc-stream.c文件至obs-studio/plugins/obs-outputs目录(OBS源码目录)中。 修改编译脚本obs-studio/plugins/obs-outputs/CMakeLists.txt。set(obs-artc_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/ali_rts_sdk/include/ali_rts_sdk.h artc-stream.h) set(obs-artc_SOURCES artc-stream.c) if(WIN32) set(obs-artc_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/ali_rts_sdk/lib/win64/ali_rts_sdk.lib ${CMAKE_CURRENT_SOURCE_DIR}/ali_rts_sdk/lib/win64/RtsSDK.lib) else() set(obs-artc_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/ali_rts_sdk/lib/mac/ali_rts_sdk.dylib ${CMAKE_CURRENT_SOURCE_DIR}/ali_rts_sdk/lib/mac/libRtsSDK.dylib) endif() set(obs-outputs_HEADERS "${CMAKE_BINARY_DIR}/plugins/obs-outputs/config/obs-outputs-config.h" obs-output-ver.h rtmp-helpers.h rtmp-stream.h net-if.h flv-mux.h ${obs-artc_HEADERS}) set(obs-outputs_SOURCES obs-outputs.c null-output.c rtmp-stream.c rtmp-windows.c flv-output.c flv-mux.c net-if.c ${obs-artc_SOURCES}) if(WIN32) set(MODULE_DESCRIPTION "OBS output module") if(NOT BUILD_LIVE_ENGINE_SHARED) add_definitions(-DENGINE_STATIC) endif() configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-outputs.rc) list(APPEND obs-outputs_SOURCES obs-outputs.rc) endif() add_library(obs-outputs MODULE ${ftl_SOURCES} ${ftl_HEADERS} ${obs-outputs_SOURCES} ${obs-outputs_HEADERS} ${obs-outputs_librtmp_SOURCES} ${obs-outputs_librtmp_HEADERS}) target_link_libraries(obs-outputs ${obs-artc_LIBS}) 修改obs-studio/plugins/obs-outputs/obs-outputs.c文件注册artc_output插件。extern struct obs_output_info artc_output_info;obs_register_output(&artc_output_info); 修改obs-studio/UI/window-basic-main-outputs.cpp文件配置启动artc_output插件。const char *type = obs_service_get_output_type(service); if (!type) { type = "rtmp_output"; const char *url = obs_service_get_url(service); if (url != NULL && strncmp(url, FTL_PROTOCOL, strlen(FTL_PROTOCOL)) == 0) { type = "ftl_output"; } else if (url != NULL && strncmp(url, ARTC_PROTOCOL, strlen(ARTC_PROTOCOL)) == 0) { type = "artc_output"; } else if (url != NULL && strncmp(url, RTMP_PROTOCOL, strlen(RTMP_PROTOCOL)) != 0) { type = "ffmpeg_mpegts_muxer"; } } 编译并运行。具体操作,请参见安装说明。 编译完成之后,运行之前需要将OBS插件SDK动态库文件复制到OBS运行目录下。 以Mac端Debug环境为例(其他端环境与Mac端类似,本文不再赘述),复制ali_rts_sdk/lib/mac目录(OBS插件SDK动态库目录)中的libRtsSDK.dylib和ali_rts_sdk.dylib文件至obs-studio/build/rundir/Debug/bin目录(OBS Debug环境运行目录)中。如果没有复制动态库文件,可能会提示以下错误: 后续步骤 执行以下步骤测试artc_output插件功能(RTS推流)。 打开OBS推流工具。 在左侧导航栏选择推流,服务器输入已生成的完整推流地址artc://<推流地址>,进行RTS推流。 在播放器中输入播流地址,例如:artc://<播流地址>,播放RTS直播流。