1f7dbc2a7d
Cross-platform Electron + React + FFmpeg desktop app for sending multiple SRT streams simultaneously. Features: - Multiple simultaneous SRT output streams - Video sources: desktop, window capture, cameras, capture cards - Audio sources: microphones, system loopback, sound cards - H.264 encoding with HW acceleration (NVENC/QSV/AMF/VideoToolbox) - SRT modes: caller / listener / rendezvous - Frame profile presets (4K, 1080p, 720p, 480p, 360p) - Tolbek SRT receiver with configurable mode - System tray: minimize-to-tray, exit confirmation dialog - Portable build via electron-builder Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
1.4 KiB
JavaScript
35 lines
1.4 KiB
JavaScript
const { contextBridge, ipcRenderer } = require('electron')
|
|
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
// Config
|
|
getConfig: () => ipcRenderer.invoke('get-config'),
|
|
saveConfig: (config) => ipcRenderer.invoke('save-config', config),
|
|
|
|
// Devices
|
|
getDevices: () => ipcRenderer.invoke('get-devices'),
|
|
getWindows: () => ipcRenderer.invoke('get-windows'),
|
|
|
|
// Streams
|
|
startStream: (config) => ipcRenderer.invoke('start-stream', config),
|
|
stopStream: (id) => ipcRenderer.invoke('stop-stream', id),
|
|
getActiveStreams: () => ipcRenderer.invoke('get-active-streams'),
|
|
|
|
// Tolbek receiver
|
|
startTolbek: (config) => ipcRenderer.invoke('start-tolbek', config),
|
|
stopTolbek: () => ipcRenderer.invoke('stop-tolbek'),
|
|
|
|
// Window controls
|
|
minimizeWindow: () => ipcRenderer.invoke('minimize-window'),
|
|
hideWindow: () => ipcRenderer.invoke('hide-window'),
|
|
updateTrayCount: (count) => ipcRenderer.send('update-tray-count', count),
|
|
|
|
// Event listeners
|
|
onStreamStatus: (cb) => ipcRenderer.on('stream-status', (_, data) => cb(data)),
|
|
onStreamLog: (cb) => ipcRenderer.on('stream-log', (_, data) => cb(data)),
|
|
onStreamError: (cb) => ipcRenderer.on('stream-error', (_, data) => cb(data)),
|
|
onStreamEnded: (cb) => ipcRenderer.on('stream-ended', (_, data) => cb(data)),
|
|
onAllStreamsStopped: (cb) => ipcRenderer.on('all-streams-stopped', () => cb()),
|
|
|
|
removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel)
|
|
})
|