OBS工具配合OBS插件SDK可实现OutPut插件功能。通过阅读本文,你可以了解实现OBS OutPut插件的方法。

使用限制

仅支持在Windows和Mac平台编译OBS源码。

操作步骤

  1. 下载并解压OBS源码。下载地址,请参见OBS-Studio
  2. 下载并解压OBS插件SDK。下载地址,请参见SDK下载
  3. obs-studio/plugins/obs-outputs目录(OBS源码目录)中创建ali_rts_sdk文件夹,并复制ali_rts_sdk目录(OBS插件SDK解压之后的目录)中的includelib文件夹至obs-studio/plugins/obs-outputs/ali_rts_sdk目录中。
  4. 复制ali_rts_sdk/obs-output-example目录(OBS插件SDK解压之后的目录)中的artc-stream.hartc-stream.c文件至obs-studio/plugins/obs-outputs目录(OBS源码目录)中。
  5. 修改编译脚本obs-studio/plugins/obs-outputs/CMakeLists.txt
    001
    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})
  6. 修改obs-studio/plugins/obs-outputs/obs-outputs.c文件注册artc_output插件。
    002
    extern struct obs_output_info artc_output_info;
    obs_register_output(&artc_output_info);
  7. 修改obs-studio/UI/window-basic-main-outputs.cpp文件配置启动artc_output插件。
    003
    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";
        }
    }
  8. 编译并运行。具体操作,请参见安装说明

    编译完成之后,运行之前需要将OBS插件SDK动态库文件复制到OBS运行目录下。

    以Mac端Debug环境为例(其他端环境与Mac端类似,本文不再赘述),复制ali_rts_sdk/lib/mac目录(OBS插件SDK动态库目录)中的libRtsSDK.dylibali_rts_sdk.dylib文件至obs-studio/build/rundir/Debug/bin目录(OBS Debug环境运行目录)中。如果没有复制动态库文件,可能会提示以下错误:

    004

后续步骤

执行以下步骤测试artc_output插件功能(RTS推流)。

  1. 打开OBS推流工具。
  2. 在左侧导航栏选择推流服务器输入已生成的完整推流地址artc://<推流地址>,进行RTS推流。
  3. 在播放器中输入播流地址,例如:artc://<播流地址>,播放RTS直播流。