Skip to content

Desuq Cafe

文档菜单

此翻译可能落后于最新的英文版本。 查看英文版

原生 C++ 委托

每个可在 Blueprint 中赋值的 OBS 事件(FOBSOn*)都有一个原生 C++ 对应版本,其名称带有 Native 后缀(FOBSOn*Native)。原生委托使用 DECLARE_MULTICAST_DELEGATE_* 而非动态变体,因此它们接受 C++ lambda、成员函数以及 AddSP/AddUObject 绑定,这些都是仅限 Blueprint 的动态委托所不支持的。

原生委托携带与其 Blueprint 对应版本相同的参数(参数名称记录于事件页面)。插件在内部使用它们来保持处理器缓存同步,并将事件向上转发至事件金字塔;对于非 UObject 的 C++ 代码(例如无法对动态委托使用 AddSP 的编辑器 Details 面板定制代码),它们也是正确的绑定点。

用法

将 lambda 绑定到任意原生委托。当从具有独立生命周期的对象进行绑定时,务必在 lambda 内部捕获弱引用并检查其有效性。

// Connection
OBS->OnConnectedNative.AddLambda([]() { /* ... */ });
OBS->OnDisconnectedNative.AddLambda([](const FString& Reason) { /* ... */ });

// A handler-level event (lambda)
Client->GetScenes()->OnCurrentSceneChangedNative.AddLambda(
    [](const FString& SceneName, const FString& SceneUuid)
    {
        UE_LOG(LogTemp, Log, TEXT("Now on scene: %s"), *SceneName);
    });

// Member-function binding from a UObject
Client->GetOutputs()->OnRecordStateChangedNative.AddUObject(
    this, &UMyClass::HandleRecordStateChanged);

以同样的方式添加 AddSP(共享指针)绑定。若后续需要调用 Remove() 来解绑,请保留返回的 FDelegateHandle,并在绑定对象销毁之前解除绑定。

连接与重连

原生委托签名
FOBSOnConnectedNative()
FOBSOnDisconnectedNative(const FString& Reason)
FOBSOnConnectionErrorNative(const FString& Error)
FOBSOnReconnectingNative(int32 AttemptNumber)
FOBSOnReconnectFailedNative()
FOBSOnRequestFailedNative(const FString& RequestType, int32 StatusCode, const FString& Comment)

输出(录制 / 推流 / Virtual Camera / Replay Buffer)

原生委托签名
FOBSOnStreamStateChangedNative(bool bActive, EOBSOutputState State)
FOBSOnRecordStateChangedNative(bool bActive, EOBSOutputState State)
FOBSOnRecordingStoppedNative(bool bActive, EOBSOutputState State, const FString& OutputPath)
FOBSOnVirtualCamStateChangedNative(bool bActive, EOBSOutputState State)
FOBSOnReplayBufferStateChangedNative(bool bActive, EOBSOutputState State)
FOBSOnReplayBufferSavedNative(const FString& SavedReplayPath)
FOBSOnRecordFileChangedNative(const FString& NewOutputPath)
FOBSOnRecordDirectoryReceivedNative(const FString& RecordDirectory)
FOBSOnOutputListReceivedNative(const TArray<FOBSOutput>& Outputs)
FOBSOnOutputStatusReceivedNative(const FOBSOutputStatus& Status)

场景与场景项目

原生委托签名
FOBSOnCurrentSceneChangedNative(const FString& SceneName, const FString& SceneUuid)
FOBSOnSceneListUpdatedNative()
FOBSOnSceneItemTransformChangedNative(const FString& SceneName, int32 SceneItemId, const FOBSSceneItemTransform& Transform)
FOBSOnSceneItemCreatedNative(const FString& SceneName, const FString& SourceName, int32 SceneItemId, int32 SceneItemIndex)
FOBSOnSceneItemRemovedNative(const FString& SceneName, const FString& SourceName, int32 SceneItemId)
FOBSOnSceneItemLockStateChangedNative(const FString& SceneName, int32 SceneItemId, bool bLocked)
FOBSOnSceneItemEnableStateChangedNative(const FString& SceneName, int32 SceneItemId, bool bEnabled)
FOBSOnSceneItemListReindexedNative(const FString& SceneName)
FOBSOnSceneCreatedNative(const FString& SceneName, const FString& SceneUuid, bool bIsGroup)
FOBSOnSceneRemovedNative(const FString& SceneName, const FString& SceneUuid, bool bIsGroup)
FOBSOnSceneNameChangedNative(const FString& SceneUuid, const FString& OldSceneName, const FString& NewSceneName)
FOBSOnTransitionOverrideReceivedNative(const FString& SceneName, const FOBSSceneTransitionOverride& Override)

音频

原生委托签名
FOBSOnInputListUpdatedNative()
FOBSOnInputMuteStateChangedNative(const FString& InputName, bool bMuted)
FOBSOnInputVolumeChangedNative(const FString& InputName, float VolumeDb, float VolumeMul)
FOBSOnInputVolumeMetersNative(const TArray<FOBSInputVolumeMeter>& Meters)
FOBSOnInputActiveStateChangedNative(const FString& InputName, bool bVideoActive)
FOBSOnMicActivityChangedNative(const FString& InputName, bool bActive)
FOBSOnInputCreatedNative(const FString& InputName, const FString& InputUuid, const FString& InputKind, const FString& UnversionedInputKind)
FOBSOnInputRemovedNative(const FString& InputName, const FString& InputUuid)
FOBSOnInputNameChangedNative(const FString& InputUuid, const FString& OldInputName, const FString& NewInputName)
FOBSOnInputKindListReceivedNative(const TArray<FString>& InputKinds)
FOBSOnInputAudioBalanceChangedNative(const FString& InputName, const FString& InputUuid, float AudioBalance)
FOBSOnInputAudioSyncOffsetChangedNative(const FString& InputName, const FString& InputUuid, int32 SyncOffsetMs)
FOBSOnInputAudioTracksChangedNative(const FString& InputName, const FString& InputUuid, const FOBSAudioTracks& AudioTracks)
FOBSOnInputAudioMonitorTypeChangedNative(const FString& InputName, const FString& InputUuid, EOBSMonitorType MonitorType)
FOBSOnSpecialInputsReceivedNative(const FOBSSpecialInputs& SpecialInputs)

OnInputVolumeMetersNativeOnInputActiveStateChangedNativeOnMicActivityChangedNative 是高频率/需手动订阅的流。详见语音活动检测

输入设置

原生委托签名
FOBSOnInputSettingsChangedNative(const FString& InputName, const FString& InputUuid)
FOBSOnInputSettingsReceivedNative(const FString& InputName, const FString& InputKind, TSharedPtr<FJsonObject> Settings)
FOBSOnInputPropertyItemsReceivedNative(const FString& InputName, const FString& PropertyName, const TArray<FOBSPropertyItem>& Items)

OnInputSettingsReceivedNative 仅限原生使用,它暴露原始的 TSharedPtr<FJsonObject> 设置对象(对应的 Blueprint 事件则以字符串形式呈现该数据)。

媒体输入

原生委托签名
FOBSOnMediaInputPlaybackStartedNative(const FString& InputName)
FOBSOnMediaInputPlaybackEndedNative(const FString& InputName)
FOBSOnMediaInputActionTriggeredNative(const FString& InputName, EOBSMediaInputAction Action)
FOBSOnMediaInputStatusReceivedNative(const FOBSMediaInputStatus& Status)

转场

原生委托签名
FOBSOnCurrentTransitionChangedNative(const FString& TransitionName)
FOBSOnTransitionDurationChangedNative(int32 DurationMs)
FOBSOnTransitionStartedNative(const FString& TransitionName)
FOBSOnTransitionEndedNative(const FString& TransitionName)
FOBSOnTransitionVideoEndedNative(const FString& TransitionName)
FOBSOnTransitionListUpdatedNative()

工作室模式

原生委托签名
FOBSOnStudioModeStateChangedNative(bool bStudioModeEnabled)
FOBSOnCurrentPreviewSceneChangedNative(const FString& SceneName, const FString& SceneUuid)

滤镜

原生委托签名
FOBSOnSourceFilterCreatedNative(const FString& SourceName, const FString& FilterName, const FString& FilterKind, int32 FilterIndex, bool bFilterEnabled)
FOBSOnSourceFilterRemovedNative(const FString& SourceName, const FString& FilterName)
FOBSOnSourceFilterNameChangedNative(const FString& SourceName, const FString& OldFilterName, const FString& FilterName)
FOBSOnSourceFilterSettingsChangedNative(const FString& SourceName, const FString& FilterName)
FOBSOnSourceFilterEnableStateChangedNative(const FString& SourceName, const FString& FilterName, bool bFilterEnabled)
FOBSOnSourceFilterListReindexedNative(const FString& SourceName)
FOBSOnSourceFilterListReceivedNative(const FString& SourceName)

OnSourceFilterListReceivedNative 仅限原生使用:它在解析 GetSourceFilterList 响应后触发(不存在对应的 OBS 推送事件),以便编辑器 UI 可以刷新该来源的滤镜下拉菜单。

截图

原生委托签名
FOBSOnScreenshotCapturedNative(const FOBSScreenshotResult& Result)
FOBSOnScreenshotSavedNative(const FString& SourceName, const FString& FilePath)

截图事件仅在处理器层级可用。请通过 Client->GetScreenshots() 访问(它们不会在 Subsystem 上重新广播)。

配置(场景集合 / 配置文件 / 视频 / 推流服务 / 持久化数据)

原生委托签名
FOBSOnCurrentSceneCollectionChangingNative(const FString& SceneCollectionName)
FOBSOnCurrentSceneCollectionChangedNative(const FString& SceneCollectionName)
FOBSOnSceneCollectionListChangedNative()
FOBSOnCurrentProfileChangingNative(const FString& ProfileName)
FOBSOnCurrentProfileChangedNative(const FString& ProfileName)
FOBSOnProfileListChangedNative()
FOBSOnVideoSettingsReceivedNative(const FOBSVideoSettings& Settings)
FOBSOnStreamServiceSettingsReceivedNative(const FOBSStreamServiceSettings& Settings)
FOBSOnPersistentDataReceivedNative(EOBSDataRealm Realm, const FString& SlotName, const FString& SlotValueJson)

通用(性能统计 / 热键 / Vendor / 自定义事件)

原生委托签名
FOBSOnStatsReceivedNative(const FOBSStats& Stats)
FOBSOnHotkeyListReceivedNative(const TArray<FString>& HotkeyNames)
FOBSOnExitStartedNative()
FOBSOnVendorEventNative(const FString& VendorName, const FString& EventType, const FString& EventDataJson)
FOBSOnCustomEventNative(const FString& EventDataJson)
FOBSOnVendorResponseReceivedNative(const FString& VendorName, const FString& RequestType, const FString& ResponseDataJson)

另见:事件,查阅 Blueprint 事件名称及每个事件在哪个层级(处理器 / Subsystem / Component)可用。