TRROSDK

TRRO Class, instance must be initialized before Join

Constructor

new TRROSDK(params)

Parameters:
NameTypeDescription
paramsObject
Properties
NameTypeAttributesDefaultDescription
cloudModeCloudMode<optional>
'private'

Cloud mode, optional.
public - Public cloud, private - Private cloud.
Default: private.

serverIpstring | Array.<string><optional>

Domain or IP of signaling dispatch server, can provide multiple addresses.
Invalid in public cloud mode; Required in private cloud mode.

portnumber<optional>

Signaling service port.
Invalid in public cloud mode; Default 3000/443 (with HTTPS) in private cloud.

httpsboolean<optional>
false

Enable HTTPS protocol, optional.
Forced in public cloud mode; Default false in private cloud.

mqttOptionsObject<optional>

MQTT configuration, optional.

Properties
NameTypeAttributesDefaultDescription
urlstring | Array.<string><optional>

MQTT server domain/IP, can provide multiple addresses.
Usually not needed in public cloud; Defaults to serverIp in private cloud.

portnumber<optional>

MQTT server port.
Usually not needed in public cloud; Default 2833 in private cloud.

forceLoginboolean<optional>
false

Force MQTT login, optional. Default false.

projectIdstring | number

Project ID

remoteDeviceIdstring

Remote device ID

passwordstring

Remote device password

observerTRROMediaObserver<optional>

Event callback functions. See TRROMediaObserver for full field documentation.

loggerOptionObject<optional>

Logger configuration. See TRROConfig#loggerOption for full field documentation.

customMessageOptionObject<optional>

Custom-message (onControlData) options. See TRROConfig#customMessageOption for full field documentation.

Example
// Minimal public cloud configuration
new TRROSDK({
 cloudMode: 'public',
 projectId: 'xxxxxxxx',
 remoteDeviceId: 'xxxxxxxx',
 password: '********',
});

// Minimal private cloud configuration
new TRROSDK({
 serverIp: '1.1.1.1',
 projectId: 1111,
 remoteDeviceId: 'xxxxxxxx',
 password: '',
});

Methods

(async) init()

Initialize MQTT connection

Returns:

Promise object

NameTypeDescription
codenumber0 success, 21 MQTT connect error, 26 MQTT already connected, etc.
messagestringDescription and error information
Example
init()

setSessionPermissionToken(fieldDeviceId, token) → {void}

Set temporary session key for field device

Parameters:
NameTypeDescription
fieldDeviceIdstring
tokenstring
Returns:
Type: 
void
Example
setSessionPermissionToken('xxxxxxxx', '********')

(async) connect(fieldDeviceId)

Connect to specified field device

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

Returns:

Returns Promise object

NameTypeDescription
codenumber0 Already joined, 2 joining, 20 MQTT client not found, 21 MQTT connection error, 100 request error
messagestringDescription and error message
Example
connect('xxxxxxxx')

(async) subscribe(params)

Subscribe to tracks (pull stream)

Parameters:
NameTypeDescription
paramsObject
Properties
NameTypeAttributesDefaultDescription
fieldDeviceIdstring

Field device ID

containersArray.<Object>
Properties
NameTypeDescription
streamIdnumber

Video stream ID

mountstring

Video stream mount point (element ID format, e.g., #test-div-0). SDK will automatically create media elements under this node for playback.

callbackfunction

Callback with end-to-end latency and requestVideoFrameCallback metadata

audioContainerstring<optional>

Audio stream mount point (element ID format, e.g., #test-div-0). If not provided, audio stream won't be pulled. Invalid if containers field is missing.

incrementalboolean<optional>
false

Whether to use incremental subscription. Default false (overwrite existing subscriptions), true keeps existing subscriptions while adding/updating new ones.

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, 3 failed, 4 streams not published, 5 empty containers, 20 MQTT client not found, 21 MQTT not connected, 100 request error
messagestringDescription and error message
Example
subscribe({
  fieldDeviceId: 'xxxxxxxx',
  containers: [{
    streamId: 0,
    mount: '#test-div-0',
    callback: ({latency, metadata}) => {
      console.log(latency, metadata);
    }
  },{
    streamId: 1,
    mount: '#test-div-1',
    callback: ({latency, metadata}) => {
      console.log(latency, metadata);
    }
  }],
  audioContainer: '#test-div-audio'
})

(async) unsubscribe(params)

Unsubscribe from tracks (stop pulling stream)

Parameters:
NameTypeDescription
paramsObject
Properties
NameTypeAttributesDefaultDescription
fieldDeviceIdstring

Field device ID

streamIdsArray.<number>

Video stream IDs to unsubscribe

audioStreamboolean<optional>
false

Whether to unsubscribe audio stream

sendUnpublishNotificationboolean<optional>
false

Whether to immediately notify gateway to stop publishing

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, 5 empty stream IDs, 20 MQTT client not found, 21 MQTT not connected, 100 request error
messagestringDescription and error message
Example
unsubscribe({ fieldDeviceId: 'xxxxxxxx', streamIds: [0] })

(async) publish(params)

Publish audio stream (push stream)
Audio streaming requires successful video subscription first. Unsubscribing all video streams will automatically stop audio publishing via onEvent callback.
Only one audio stream per SDK instance is allowed.
Requires master permission via requestPermission in server mode.

Parameters:
NameTypeDescription
paramsObject
Properties
NameTypeDescription
audioTrackMediaStreamTrack

Audio stream track obtained via navigator.mediaDevices.getUserMedia()

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, etc.
messagestringStatus description and error information
Example
try {
  // Initialize SDK instance
  const client = new TRROSDK({ ... });
  // Connect to field device
  await client.connect('xxxxxxxx');
  // Subscribe to video streams
  await client.subscribe({ fieldDeviceId: 'xxxxxxxx', containers: [{ streamId: 0, mount: '#test-div-0' }] });
  // Get local audio stream
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false });
  [audioTrack] = stream.getAudioTracks()
  // Publish audio stream
  await client.publish({ audioTrack });
} catch () {}

(async) unpublish()

Unpublish audio stream (stop pushing)

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, etc.
messagestringStatus description and error information
Example
unpublish();

(async) muteAudio(params)

Mute/unmute specific audio stream

Parameters:
NameTypeDescription
paramsObject
Properties
NameTypeDescription
deviceIdstring

Field device ID or remote device ID (remoteDeviceId)

mutedboolean

true: mute, false: unmute

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, etc.
messagestringStatus description and error information
Example
muteAudio({ deviceId: 'xxxxxxxx', muted: true })

(async) disconnect(fieldDeviceId)

Disconnect from specific field device

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 3 failed, etc.
messagestringStatus description and error information
Example
disconnect('xxxxxxxx')

(async) disconnectAll()

Disconnect from all field devices

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 3 failed, etc.
messagestringStatus description and error information
Example
disconnectAll()

(async) destroy()

Destroy all connections

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 3 failed, etc.
messagestringStatus description and error information
Example
destroy()

changeFieldDeviceEncodeConfig(fieldDeviceId, params)

Temporarily update field device encoding configuration
Changes persist until device reboot
Only modifies specified fields, others remain unchanged

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

paramsArray.<Object>
Properties
NameTypeDescription
streamIdnumber

Video stream ID

encodeConfigObject

Encoding configuration

Properties
NameTypeAttributesDescription
encodeWidthnumber<optional>

Encoding width

encodeHeightnumber<optional>

Encoding height

minWidthnumber<optional>

Minimum width

fpsnumber<optional>

Target FPS

minFpsnumber<optional>

Minimum FPS

bpsnumber<optional>

Target bitrate (kbps)

minBpsnumber<optional>

Minimum bitrate (kbps)

forceMinBpsboolean<optional>

Enforce minimum bitrate

Returns:
NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, etc.
messagestringStatus description and error information
Example
changeFieldDeviceEncodeConfig('xxxxxxxx', [{ streamId: 0, encodeConfig: { minBps: 1000, forceMin: true } }])

(async) requestPermission(fieldDeviceId, params)

Request gateway permissions

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

paramsObject
Properties
NameTypeDescription
permissionPermissionState

'master' for control+view permissions, 'guest' for view-only

Returns:
NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, 20 MQTT client not found, 21 MQTT connection error, 22 MQTT publish failed, 23 request pending, 24 timeout
messagestringStatus description and error information
Example
requestPermission({ fieldDeviceId: 'xxx', permission: 'master' })

(async) pullGatewayList()

Retrieve gateway device list

Returns:
NameTypeDescription
codenumber0 success, 20 MQTT client not found, 21 MQTT connection error, 22 request failed, 23 request pending, 24 timeout
messagestringStatus description and error information
Example
pullGatewayList()

(async) getGatewayInfo(gatewayId)

Retrieve specified gateway device information

Parameters:
NameTypeDescription
gatewayIdstring

Gateway device ID

Returns:
NameTypeDescription
codenumber0 success, 20 MQTT client not found, 21 MQTT connection error, 22 request failed, 23 request pending, 24 timeout
messagestringStatus description and error information
dataGatewayGateway device information
Example
getGatewayInfo('gateway_id_123')

(async) adjustVideoRate(fieldDeviceId, params)

Adjust video bitrate

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

paramsArray.<Object>
Properties
NameTypeDescription
streamIdnumber

Video stream ID

videoRatenumber

Bitrate in kbps

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined, 2 joining, 3 failed, 20 MQTT client not found, 21 MQTT connection error, 100 request error
messagestringStatus description and error information
Example
adjustVideoRate('xxxxxxxx', [{ streamId: 0, videoRate: 3000 }, { streamId: 1, videoRate: 1000 }])

sendControlData(fieldDeviceId, params)

Send custom message via DataChannel or MQTT. Requires 'master' permission via requestPermission.

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

paramsObject
Properties
NameTypeAttributesDefaultDescription
datastring | ArrayBuffer

Custom message content

orderedboolean<optional>
true

Use reliable transmission channel (only effective for SCTP channel, conflicts with channelType='mqtt')

channelType'sctp' | 'mqtt'<optional>
'sctp'

Message channel type, 'sctp' for DataChannel, 'mqtt' for MQTT

Returns:

Returns Promise object

NameTypeDescription
codenumber0 success, 1 unjoined (SCTP only), 2 joining (SCTP only), 3 failed, 20 MQTT client not found, 21 MQTT connection error, 42 no permission, 45 no subscribed streams (SCTP only), 100 request error
messagestringStatus description and error information
Example
// Send via SCTP DataChannel (requires connect and subscribe first)
sendControlData('xxxxxxxx', { data: 'xxx', ordered: true })

// Send via MQTT (only login required, no connect and subscribe needed)
await sdk.init(); // Login successful
await sdk.requestPermission('fieldDeviceId', { permission: 'master' });
sendControlData('xxxxxxxx', { data: 'xxx', channelType: 'mqtt' })

(async) requestDiagnosisReport(fieldDeviceId) → {Promise.<DiagnosisReport>}

Get diagnosis report. Usually need to wait 10 seconds to get the report, maximum wait time is 15 seconds.

Parameters:
NameTypeDescription
fieldDeviceIdstring

Field device ID

Returns:

Returns diagnosis report.

Type: 
Promise.<DiagnosisReport>
Example
requestDiagnosisReport('<FIELD-DEVICE-ID>')