mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-27 17:19:14 +01:00
Fix:Force AAC when transcoding ALAC audio file streams #1372
This commit is contained in:
parent
7a7708403f
commit
ff10287d05
@ -748,7 +748,6 @@ export default {
|
|||||||
if (this.libraryItem.episodesDownloading) {
|
if (this.libraryItem.episodesDownloading) {
|
||||||
this.episodeDownloadsQueued = this.libraryItem.episodesDownloading || []
|
this.episodeDownloadsQueued = this.libraryItem.episodesDownloading || []
|
||||||
}
|
}
|
||||||
console.log('Media metadata', this.mediaMetadata)
|
|
||||||
|
|
||||||
// use this items library id as the current
|
// use this items library id as the current
|
||||||
if (this.libraryId) {
|
if (this.libraryId) {
|
||||||
|
@ -71,6 +71,10 @@ class Stream extends EventEmitter {
|
|||||||
if (!this.tracks.length) return null
|
if (!this.tracks.length) return null
|
||||||
return this.tracks[0].mimeType
|
return this.tracks[0].mimeType
|
||||||
}
|
}
|
||||||
|
get tracksCodec() {
|
||||||
|
if (!this.tracks.length) return null
|
||||||
|
return this.tracks[0].codec
|
||||||
|
}
|
||||||
get mimeTypesToForceAAC() {
|
get mimeTypesToForceAAC() {
|
||||||
return [
|
return [
|
||||||
AudioMimeType.FLAC,
|
AudioMimeType.FLAC,
|
||||||
@ -81,6 +85,11 @@ class Stream extends EventEmitter {
|
|||||||
AudioMimeType.WEBMA
|
AudioMimeType.WEBMA
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
get codecsToForceAAC() {
|
||||||
|
return [
|
||||||
|
'alac'
|
||||||
|
]
|
||||||
|
}
|
||||||
get userToken() {
|
get userToken() {
|
||||||
return this.user.token
|
return this.user.token
|
||||||
}
|
}
|
||||||
@ -130,7 +139,7 @@ class Stream extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async checkSegmentNumberRequest(segNum) {
|
async checkSegmentNumberRequest(segNum) {
|
||||||
var segStartTime = segNum * this.segmentLength
|
const segStartTime = segNum * this.segmentLength
|
||||||
if (this.startTime > segStartTime) {
|
if (this.startTime > segStartTime) {
|
||||||
Logger.warn(`[STREAM] Segment #${segNum} Request @${secondsToTimestamp(segStartTime)} is before start time (${secondsToTimestamp(this.startTime)}) - Reset Transcode`)
|
Logger.warn(`[STREAM] Segment #${segNum} Request @${secondsToTimestamp(segStartTime)} is before start time (${secondsToTimestamp(this.startTime)}) - Reset Transcode`)
|
||||||
await this.reset(segStartTime - (this.segmentLength * 2))
|
await this.reset(segStartTime - (this.segmentLength * 2))
|
||||||
@ -139,7 +148,7 @@ class Stream extends EventEmitter {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
var distanceFromFurthestSegment = segNum - this.furthestSegmentCreated
|
const distanceFromFurthestSegment = segNum - this.furthestSegmentCreated
|
||||||
if (distanceFromFurthestSegment > 10) {
|
if (distanceFromFurthestSegment > 10) {
|
||||||
Logger.info(`Segment #${segNum} requested is ${distanceFromFurthestSegment} segments from latest (${secondsToTimestamp(segStartTime)}) - Reset Transcode`)
|
Logger.info(`Segment #${segNum} requested is ${distanceFromFurthestSegment} segments from latest (${secondsToTimestamp(segStartTime)}) - Reset Transcode`)
|
||||||
await this.reset(segStartTime - (this.segmentLength * 2))
|
await this.reset(segStartTime - (this.segmentLength * 2))
|
||||||
@ -264,7 +273,11 @@ class Stream extends EventEmitter {
|
|||||||
|
|
||||||
const logLevel = process.env.NODE_ENV === 'production' ? 'error' : 'warning'
|
const logLevel = process.env.NODE_ENV === 'production' ? 'error' : 'warning'
|
||||||
|
|
||||||
const audioCodec = (this.mimeTypesToForceAAC.includes(this.tracksMimeType) || this.transcodeForceAAC) ? 'aac' : 'copy'
|
let audioCodec = 'copy'
|
||||||
|
if (this.transcodeForceAAC || this.mimeTypesToForceAAC.includes(this.tracksMimeType) || this.codecsToForceAAC.includes(this.tracksCodec)) {
|
||||||
|
Logger.debug(`[Stream] Forcing AAC for tracks with mime type ${this.tracksMimeType} and codec ${this.tracksCodec}`)
|
||||||
|
audioCodec = 'aac'
|
||||||
|
}
|
||||||
|
|
||||||
this.ffmpeg.addOption([
|
this.ffmpeg.addOption([
|
||||||
`-loglevel ${logLevel}`,
|
`-loglevel ${logLevel}`,
|
||||||
|
@ -9,6 +9,7 @@ class AudioTrack {
|
|||||||
this.title = null
|
this.title = null
|
||||||
this.contentUrl = null
|
this.contentUrl = null
|
||||||
this.mimeType = null
|
this.mimeType = null
|
||||||
|
this.codec = null
|
||||||
this.metadata = null
|
this.metadata = null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,6 +21,7 @@ class AudioTrack {
|
|||||||
title: this.title,
|
title: this.title,
|
||||||
contentUrl: this.contentUrl,
|
contentUrl: this.contentUrl,
|
||||||
mimeType: this.mimeType,
|
mimeType: this.mimeType,
|
||||||
|
codec: this.codec,
|
||||||
metadata: this.metadata ? this.metadata.toJSON() : null
|
metadata: this.metadata ? this.metadata.toJSON() : null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -31,6 +33,7 @@ class AudioTrack {
|
|||||||
this.title = audioFile.metadata.filename || ''
|
this.title = audioFile.metadata.filename || ''
|
||||||
this.contentUrl = Path.join(`${global.RouterBasePath}/s/item/${itemId}`, encodeUriPath(audioFile.metadata.relPath))
|
this.contentUrl = Path.join(`${global.RouterBasePath}/s/item/${itemId}`, encodeUriPath(audioFile.metadata.relPath))
|
||||||
this.mimeType = audioFile.mimeType
|
this.mimeType = audioFile.mimeType
|
||||||
|
this.codec = audioFile.codec || null
|
||||||
this.metadata = audioFile.metadata.clone()
|
this.metadata = audioFile.metadata.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ class VideoTrack {
|
|||||||
this.title = null
|
this.title = null
|
||||||
this.contentUrl = null
|
this.contentUrl = null
|
||||||
this.mimeType = null
|
this.mimeType = null
|
||||||
|
this.codec = null
|
||||||
this.metadata = null
|
this.metadata = null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ class VideoTrack {
|
|||||||
title: this.title,
|
title: this.title,
|
||||||
contentUrl: this.contentUrl,
|
contentUrl: this.contentUrl,
|
||||||
mimeType: this.mimeType,
|
mimeType: this.mimeType,
|
||||||
|
codec: this.codec,
|
||||||
metadata: this.metadata ? this.metadata.toJSON() : null
|
metadata: this.metadata ? this.metadata.toJSON() : null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -28,6 +30,7 @@ class VideoTrack {
|
|||||||
this.title = videoFile.metadata.filename || ''
|
this.title = videoFile.metadata.filename || ''
|
||||||
this.contentUrl = Path.join(`${global.RouterBasePath}/s/item/${itemId}`, encodeUriPath(videoFile.metadata.relPath))
|
this.contentUrl = Path.join(`${global.RouterBasePath}/s/item/${itemId}`, encodeUriPath(videoFile.metadata.relPath))
|
||||||
this.mimeType = videoFile.mimeType
|
this.mimeType = videoFile.mimeType
|
||||||
|
this.codec = videoFile.codec
|
||||||
this.metadata = videoFile.metadata.clone()
|
this.metadata = videoFile.metadata.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user