Unreal Blueprint SDK Guide
Unreal Blueprint nodes, install and limitations.
Unreal Engine (Blueprint) is the blueprint exposure layer of the same C++ engine: method names are capitalized (Initialize, JoinChannelWithOptions) and events are exposed to blueprints as delegates.
Prerequisites
- Unreal Engine 5.2+ with the NimeetRtc plugin enabled.
- Shares the runtime library with the C++ side; the permission requirements are the same.
- An
appIdand a token service (see Enable Services and Get Credentials).
Installation
YourGame/Plugins/NimeetRtc/…
# regenerate the project files → enable it in .uproject → a "Nimeet RTC" category appears in the editorGet a token
Do not hardcode the token in a blueprint. Recommended: get the backend-issued token during login, store it in a string variable on GameInstance, and pass it as an argument of JoinChannelWithOptions when joining.
Join a channel
Blueprint node order (every node name matches the interface definition):
Initialize(arguments:AppId, optional log configuration)SetChannelProfile(ChannelProfileLiveBroadcasting)EnableVideoStartPreviewJoinChannelWithOptions(Token,ChannelId,Uid,ChannelMediaOptions)
The corresponding C++ implementation (you can wrap it in your own Actor):
Engine->Initialize(Context);
Engine->SetChannelProfile(CHANNEL_PROFILE_LIVE_BROADCASTING);
Engine->EnableVideo();
Engine->StartPreview();
Engine->JoinChannelWithOptions(Token, ChannelId, Uid, Options);Publishing and subscribing
Blueprint nodes: MuteLocalAudioStream, MuteLocalVideoStream, EnableLocalVideo, UpdateChannelMediaOptions. Screen sharing: GetScreenCaptureSources (returns the source list) → StartScreenCaptureByDisplayId / StartScreenCaptureByWindowId.
Events
Blueprint events (Event nodes):
| Event | When it fires |
|---|---|
OnJoinChannelSuccess | Joining succeeded |
OnUserJoined | A remote user joined |
OnUserOffline | A remote user left |
OnTokenPrivilegeWillExpire | The privilege is about to expire |
OnError | Runtime error |
Error handling
OnErrorgiveserr(the Agora error number) andmsg;- Synchronous nodes return
int, and a negative value is an error; - Unimplemented capabilities return
-4(ERR_NOT_SUPPORTED); the blueprint sees a failure instead of a silent success.
Troubleshooting
| Symptom | Cause | Handling |
|---|---|---|
| Nodes missing in the editor | The plugin is not enabled/compiled | Enable the plugin and recompile |
| Nodes stop working after packaging | The plugin did not make it into the package | Check the Plugins directory and the packaging log |
| Events never fire | The delegate is not bound | Bind in BeginPlay and unbind in EndPlay |
| The remote picture is blank | No render material is set | Bind the video surface component the plugin provides |
| The Android package is too large | ABIs were not stripped | Keep only the target ABI |
Next steps
- Full interfaces and overloads: API reference for this platform
- Error codes and troubleshooting: Error code table, FAQ
- Issue tokens on your server: Token authentication
Platform information
| Item | value |
|---|---|
| Platform | Unreal Engine(Blueprint) |
| Language | Blueprint / C++ |
| SDK package | NimeetRtcBlueprint |
| Interface version | 4.5.1 |
| Compatible Agora API | Agora unreal-blueprint API |
The public interfaces are aligned with the Agora unreal-blueprint API; installation and runtime requirements are listed under Prerequisites above.
Availability
This platform's SDK: Generally available. The examples use the public API; runtime capability follows the published SDK package.
join-channel flow
The method names, parameter types and return values match the API reference for the same platform. Where a method has several overloads, the most common one is shown here; see the API reference for all overloads.
| Step | Interface | Method | Overload count |
|---|---|---|---|
| Join a channel | __unattributed__ | JoinChannel | 1 |
| Leave a channel | __unattributed__ | LeaveChannel | 1 |
| enable video and local preview | IRtcEngine | EnableVideo | 1 |
| Create instance / initialize | IRtcEngine | Initialize | 1 |
| subscribe to remote media | IRtcEngine | MuteRemoteAudioStream | 1 |
| Renew the Token | IRtcEngine | RenewToken | 1 |
| Channel scenarios | IRtcEngine | SetChannelProfile | 1 |
| switch roles | IRtcEngine | SetClientRole | 1 |
| bind the local video | IRtcEngine | SetupLocalVideo | 1 |
JoinChannel(token: const FString&, channelId: const FString&, uid: int64): int
LeaveChannel(): int
EnableVideo(): int
Initialize(context: const FRtcEngineContext&): int
MuteRemoteAudioStream(uid: int64, mute: bool): int
RenewToken(token: const FString&): int
SetChannelProfile(profile: ECHANNEL_PROFILE_TYPE): int
SetClientRole(options: FClientRoleOptions, clientroletype?: ECLIENT_ROLE_TYPE): int
SetupLocalVideo(canvas: const FVideoCanvas&): intEvents and callbacks
This SDK has no event callbacks.
Error codes
| Constant | value |
|---|---|
VT_ERR_INTERNAL | 20 |
VT_ERR_INVALID_IMAGE_PATH | 3 |
VT_ERR_INVALID_LAYOUT | 5 |
VT_ERR_INVALID_VIDEO_SOURCE_TYPE | 2 |
VT_ERR_UNSUPPORT_IMAGE_FORMAT | 4 |
VT_ERR_VIDEO_SOURCE_NOT_READY | 1 |
the platform REST layer uses REST error codes;the SDK layer maps connection/authentication failures to Agora error numbers, for the mapping table see SDK error identifiers per platform。