npm

live-raylink
TypeScript icon, indicating that this package has built-in type declarations

1.0.5 • Public • Published

Raylink RayStreaming Launcher

RayStreaming launcher

Quick start

Initial params

interface ClientInfo {
  token: string // auth info
  account: string // username
  endpoint: string // backend socket endpoint
  fingerprint: string // browser fingerprint
  machineName: string // specify at will
  professional: boolean // license type
}
enum LogLevel {
  log = 0,
  info = 1,
  warn = 2,
  error = 3,
}
class Sentry {
  static LogLevel = LogLevel
  constructor(
    clientInfo: ClientInfo,
    options?: {
      logLevel?: LogLevel // default: LogLevel.log
      dbName?: string // database name of persistence log. default: avica-log-db
    },
  )
}

// example
import { Sentry } from 'live-raylink'

const sentryIns = new Sentry(
  {
    token: 'rsat:xxxx',
    account: 'anonymous',
    endpoint: 'wss://raylink.live',
    fingerprint: 'xxxx',
    machineName: "somebody's MacBook",
    professional: true,
  },
  {
    logLevel: Sentry.LogLevel.warn,
    dbName: 'awesome-db-name',
  },
)

Event

use as below, payload type refers to the export type in package

sentryIns.eventBus.subscribe('event_name', handler)
Event name Desc Payload
peer_disconnected emit when peer closed the connection string
group_received emit when group received GroupItem[]
device_received emit when device received DeviceItem[]
push_message server push PushMessage
license_changed server push LicenseChanged
connect_state_changed emit when state changes of connection with backend ConnectState
monitor_count_changed emit when peer monitor count changed { count: number; deviceId: string }
codec_changed emit when peer codec options changed { bitrate: number; framerate: number; gopLength: number; deviceId: string }
ice_state_changed emit when ICE connect state changed { state: RTCIceConnectionState; deviceId: string }
error emit when socket/WebRTC/Logic blocked with error { source: ErrorSource; reason: ErrorReason; code?: ValueOf<error_codeMap> }

Methods

prepare
import { GroupType } from 'live-raylink'

// fetch all group info
sentryIns.getGroupList()
// fetch all device info
sentryIns.getDeviceList(GroupType.Root)
// fetch device in recent sessions set
sentryIns.getDeviceList(GroupType.RecentSessions)
// change license to pro
sentryIns.changeLicense(true)
session manager
// check device if online before connecting
sentryIns
  .checkDevice()
  .then(() => {
    console.log('continue')
  })
  .catch((e) => {
    console.warn(e)
  })
// resume connect if need admin auth
sentryIns.resumeConnectPeer('device_id', { adminAccount: 'admin_account', adminPassword: 'passwd' })
// resume connect if key miss match
sentryIns.resumeConnectPeer('device_id', { key: 'key' })

// create session
interface Options {
  minBitrate: number // append x-google-min-bitrate in create offer. Default: 2000
  maxBitrate: number // x-google-max-bitrate. Default: 5000
  startBitrate: number // x-google-start-bitrate. Default: 4000
  orientationLock: boolean // no longer auto-rotate the streaming orientation to fit the container size
  iceTransportPolicy: RTCIceTransportPolicy // 'all': use all candidate, 'relay': only use 'relay' candidate. Default: 'all'
  onRotate: (result: boolean) => void // invoke when every change orientation if auto-rotate enable
  onPhaseChange: (phase: Phase, deltaTime: number) => void // invoke when phase change in Launcher
}
const options: Options = {}
sentryIns.createSession(hostEl, { deviceId: 'device_id', key: 'key' }, options)
feature
import { Protocol, ScaleMode } from 'live-raylink'

// hide peer device wallpaper
sentryIns.hideWallpaper('device_id')

// change video stream codec to 3000kbps/30fps on peer device
sentryIns.changeQuality('device_id', 3000, 30)

// scale screen to scaled mode on peer device
sentryIns.scaleScreen('device_id', ScaleMode.Scaled)

// switch to second monitor on peer device(if exist)
sentryIns.switchMonitor('device_id', 1)
// you can obtain monitor count by listen `monitor_count_changed` event
sentryIns.event.subscribe('monitor_count_changed', (count) => {
  console.log(`current peer device has ${count} monitor`)
})

// execute REBOOT command on peer device
sentryIns.runCommand('device_id', Protocol.RunCommandType.REBOOT)

Error

all error reason can infer of ErrorReason type in package

Type Desc Source
FAILED Protocol
REFUSE peer refuses connect Protocol
KEY_ERROR key miss match Protocol
WAIT_CONFIRM Protocol
NOT_FOUND_DEVICE Protocol
REPEAT_LOGIN Protocol
VERSION_TOO_LOW Protocol
AUTH_FAILURE Protocol
ACCOUNT_LOCKED Protocol
REPEAT_REGISTER_ID Protocol
DISCONNECT Protocol
DEVICE_OFFLINE Protocol
DEVICE_EXIST Protocol
GROUP_EXIST Protocol
GROUP_NOT_FOUND Protocol
UNSUPPORTED_OPERATION Protocol
DEVICE_NOT_ALLOW Protocol
ACCOUNT_EXPIRED Protocol
LEVEL_TOO_LOW Protocol
VERSION_TOO_LOW_NO_FORCE Protocol
DEVICE_REMOTE_CONTROL_ERROR Protocol
CONNECT_NEED_VERIFY_ADMINISTRATOR need verify administrator Protocol
VERIFY_ADMINISTRATOR_FAILED administrator auth failed Protocol
CHANNEL_NOT_ENOUGH channel not enough Protocol
CHECK_MISMATCH peer device not for WebRTC Boundary
NETWORK_CHANGE local device network change WebRTC
HANG_UP peer hang up WebRTC

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
1.0.51latest

Version History

VersionDownloads (Last 7 Days)Published
1.0.51
1.0.40
1.0.20
1.0.11
1.0.00
0.9.10
0.9.00
0.8.10
0.8.00
0.7.30
0.7.20
0.7.10
0.7.00
0.6.00
0.5.10
0.5.00
0.4.10
0.4.00
0.3.10
0.3.00
0.2.51
0.2.40
0.2.31
0.2.20
0.2.10
0.2.00
0.1.10
0.1.00

Package Sidebar

Install

npm i live-raylink

Weekly Downloads

4

Version

1.0.5

License

MIT

Unpacked Size

764 kB

Total Files

14

Last publish

Collaborators

  • icehuhx
  • kitsch