remove baresip for now, use ices2

This commit is contained in:
rdl technix 2021-09-03 19:08:48 +02:00
parent 3409fb8ab8
commit 333146a182
10 changed files with 123 additions and 20 deletions

61
backend/ices2.mjs Normal file
View file

@ -0,0 +1,61 @@
import p from 'path'
import split2 from 'split2'
import { Readable } from 'streamx'
import { spawn } from 'child_process'
import { fileURLToPath } from 'url';
const __dirname = p.dirname(fileURLToPath(import.meta.url))
import { action, STREAM_STATUS, LOG_MESSAGE } from './state.mjs'
export class Darkice {
constructor (opts = {}) {
this.command = opts.command || 'ices2'
this.config = opts.config || p.join(__dirname, '..', 'etc', 'ices2.xml')
this.logLevel = 8
this.stream = new Readable()
this.log = []
this.stream.on('data', row => this.log.push(row))
this.id = 'darkice'
this.url = 'https://stream.rdl.de/rdl_ob1.ogg'
}
restart () {
if (!this.process) return this.start()
this.process.once('close', () => {
process.nextTick(() => {
this.start()
})
})
this.stop()
}
stop () {
this.process.kill()
}
start () {
if (this.process) return
const args = [this.config]
this.process = spawn(this.command, args)
this.process.stdout.pipe(split2()).on('data', message => {
this.stream.push(action(LOG_MESSAGE, { id: this.id, type: 'stdout', message }))
// this.stream.push({ type: 'stdout', data })
})
this.process.stderr.pipe(split2()).on('data', message => {
this.stream.push(action(LOG_MESSAGE, { id: this.id, type: 'stdout', message }))
// this.stream.push({ type: 'stderr', data })
})
this.process.on('close', () => {
this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'stopped', url: this.url }))
this.process = null
})
this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'started', url: this.url }))
return new Promise((resolve, reject) => {
resolve()
})
}
}