mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-06-25 18:29:10 +02:00
Add jsdocs for Ffmpeg and tools controller
This commit is contained in:
parent
91cca2e358
commit
1e6dd0e3e0
6 changed files with 606 additions and 54 deletions
|
@ -1,4 +1,3 @@
|
|||
|
||||
const EventEmitter = require('events')
|
||||
const Path = require('path')
|
||||
const Logger = require('../Logger')
|
||||
|
@ -46,7 +45,7 @@ class Stream extends EventEmitter {
|
|||
}
|
||||
get episode() {
|
||||
if (!this.isPodcast) return null
|
||||
return this.libraryItem.media.episodes.find(ep => ep.id === this.episodeId)
|
||||
return this.libraryItem.media.episodes.find((ep) => ep.id === this.episodeId)
|
||||
}
|
||||
get libraryItemId() {
|
||||
return this.libraryItem.id
|
||||
|
@ -76,21 +75,10 @@ class Stream extends EventEmitter {
|
|||
return this.tracks[0].codec
|
||||
}
|
||||
get mimeTypesToForceAAC() {
|
||||
return [
|
||||
AudioMimeType.FLAC,
|
||||
AudioMimeType.OPUS,
|
||||
AudioMimeType.WMA,
|
||||
AudioMimeType.AIFF,
|
||||
AudioMimeType.WEBM,
|
||||
AudioMimeType.WEBMA,
|
||||
AudioMimeType.AWB,
|
||||
AudioMimeType.CAF
|
||||
]
|
||||
return [AudioMimeType.FLAC, AudioMimeType.OPUS, AudioMimeType.WMA, AudioMimeType.AIFF, AudioMimeType.WEBM, AudioMimeType.WEBMA, AudioMimeType.AWB, AudioMimeType.CAF]
|
||||
}
|
||||
get codecsToForceAAC() {
|
||||
return [
|
||||
'alac'
|
||||
]
|
||||
return ['alac']
|
||||
}
|
||||
get userToken() {
|
||||
return this.user.token
|
||||
|
@ -109,7 +97,7 @@ class Stream extends EventEmitter {
|
|||
}
|
||||
get numSegments() {
|
||||
var numSegs = Math.floor(this.totalDuration / this.segmentLength)
|
||||
if (this.totalDuration - (numSegs * this.segmentLength) > 0) {
|
||||
if (this.totalDuration - numSegs * this.segmentLength > 0) {
|
||||
numSegs++
|
||||
}
|
||||
return numSegs
|
||||
|
@ -135,7 +123,7 @@ class Stream extends EventEmitter {
|
|||
clientPlaylistUri: this.clientPlaylistUri,
|
||||
startTime: this.startTime,
|
||||
segmentStartNumber: this.segmentStartNumber,
|
||||
isTranscodeComplete: this.isTranscodeComplete,
|
||||
isTranscodeComplete: this.isTranscodeComplete
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,7 +131,7 @@ class Stream extends EventEmitter {
|
|||
const segStartTime = segNum * this.segmentLength
|
||||
if (this.segmentStartNumber > segNum) {
|
||||
Logger.warn(`[STREAM] Segment #${segNum} Request is before starting segment number #${this.segmentStartNumber} - Reset Transcode`)
|
||||
await this.reset(segStartTime - (this.segmentLength * 5))
|
||||
await this.reset(segStartTime - this.segmentLength * 5)
|
||||
return segStartTime
|
||||
} else if (this.isTranscodeComplete) {
|
||||
return false
|
||||
|
@ -153,7 +141,7 @@ class Stream extends EventEmitter {
|
|||
const distanceFromFurthestSegment = segNum - this.furthestSegmentCreated
|
||||
if (distanceFromFurthestSegment > 10) {
|
||||
Logger.info(`Segment #${segNum} requested is ${distanceFromFurthestSegment} segments from latest (${secondsToTimestamp(segStartTime)}) - Reset Transcode`)
|
||||
await this.reset(segStartTime - (this.segmentLength * 5))
|
||||
await this.reset(segStartTime - this.segmentLength * 5)
|
||||
return segStartTime
|
||||
}
|
||||
}
|
||||
|
@ -217,7 +205,7 @@ class Stream extends EventEmitter {
|
|||
else chunks.push(`${current_chunk[0]}-${current_chunk[current_chunk.length - 1]}`)
|
||||
}
|
||||
|
||||
var perc = (this.segmentsCreated.size * 100 / this.numSegments).toFixed(2) + '%'
|
||||
var perc = ((this.segmentsCreated.size * 100) / this.numSegments).toFixed(2) + '%'
|
||||
Logger.info('[STREAM-CHECK] Check Files', this.segmentsCreated.size, 'of', this.numSegments, perc, `Furthest Segment: ${this.furthestSegmentCreated}`)
|
||||
// Logger.debug('[STREAM-CHECK] Chunks', chunks.join(', '))
|
||||
|
||||
|
@ -251,6 +239,7 @@ class Stream extends EventEmitter {
|
|||
async start() {
|
||||
Logger.info(`[STREAM] START STREAM - Num Segments: ${this.numSegments}`)
|
||||
|
||||
/** @type {import('../libs/fluentFfmpeg/index').FfmpegCommand} */
|
||||
this.ffmpeg = Ffmpeg()
|
||||
this.furthestSegmentCreated = 0
|
||||
|
||||
|
@ -289,24 +278,8 @@ class Stream extends EventEmitter {
|
|||
audioCodec = 'aac'
|
||||
}
|
||||
|
||||
this.ffmpeg.addOption([
|
||||
`-loglevel ${logLevel}`,
|
||||
'-map 0:a',
|
||||
`-c:a ${audioCodec}`
|
||||
])
|
||||
const hlsOptions = [
|
||||
'-f hls',
|
||||
"-copyts",
|
||||
"-avoid_negative_ts make_non_negative",
|
||||
"-max_delay 5000000",
|
||||
"-max_muxing_queue_size 2048",
|
||||
`-hls_time 6`,
|
||||
`-hls_segment_type ${this.hlsSegmentType}`,
|
||||
`-start_number ${this.segmentStartNumber}`,
|
||||
"-hls_playlist_type vod",
|
||||
"-hls_list_size 0",
|
||||
"-hls_allow_cache 0"
|
||||
]
|
||||
this.ffmpeg.addOption([`-loglevel ${logLevel}`, '-map 0:a', `-c:a ${audioCodec}`])
|
||||
const hlsOptions = ['-f hls', '-copyts', '-avoid_negative_ts make_non_negative', '-max_delay 5000000', '-max_muxing_queue_size 2048', `-hls_time 6`, `-hls_segment_type ${this.hlsSegmentType}`, `-start_number ${this.segmentStartNumber}`, '-hls_playlist_type vod', '-hls_list_size 0', '-hls_allow_cache 0']
|
||||
if (this.hlsSegmentType === 'fmp4') {
|
||||
hlsOptions.push('-strict -2')
|
||||
var fmp4InitFilename = Path.join(this.streamPath, 'init.mp4')
|
||||
|
@ -369,7 +342,6 @@ class Stream extends EventEmitter {
|
|||
|
||||
Logger.info(`[STREAM] ${this.id} notifying client that stream is ready`)
|
||||
this.clientEmit('stream_open', this.toJSON())
|
||||
|
||||
}
|
||||
this.isTranscodeComplete = true
|
||||
this.ffmpeg = null
|
||||
|
@ -387,11 +359,14 @@ class Stream extends EventEmitter {
|
|||
this.ffmpeg.kill('SIGKILL')
|
||||
}
|
||||
|
||||
await fs.remove(this.streamPath).then(() => {
|
||||
Logger.info('Deleted session data', this.streamPath)
|
||||
}).catch((err) => {
|
||||
Logger.error('Failed to delete session data', err)
|
||||
})
|
||||
await fs
|
||||
.remove(this.streamPath)
|
||||
.then(() => {
|
||||
Logger.info('Deleted session data', this.streamPath)
|
||||
})
|
||||
.catch((err) => {
|
||||
Logger.error('Failed to delete session data', err)
|
||||
})
|
||||
|
||||
if (errorMessage) this.clientEmit('stream_error', { id: this.id, error: (errorMessage || '').trim() })
|
||||
else this.clientEmit('stream_closed', this.id)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue