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

/live-raylink/

    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