This commit is contained in:
Brage Skjønborg 2026-02-02 00:31:53 +01:00
parent d76388c28b
commit 174ac51736
6 changed files with 71 additions and 61 deletions

View File

@ -16,13 +16,12 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.TaskRegistry
import no.iktdev.mediaprocessing.shared.common.getAppVersion import no.iktdev.mediaprocessing.shared.common.getAppVersion
import no.iktdev.mediaprocessing.shared.database.DatabaseApplication import no.iktdev.mediaprocessing.shared.database.DatabaseApplication
import no.iktdev.mediaprocessing.shared.database.DatabasebasedMediaProcessingApp import no.iktdev.mediaprocessing.shared.database.DatabasebasedMediaProcessingApp
import org.springframework.boot.context.properties.ConfigurationPropertiesScan
import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication import org.springframework.boot.runApplication
import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Configuration
@DatabasebasedMediaProcessingApp @DatabasebasedMediaProcessingApp
@ConfigurationPropertiesScan("no.iktdev.mediaprocessing.processer")
class ProcesserApplication: DatabaseApplication() { class ProcesserApplication: DatabaseApplication() {
} }
@ -78,6 +77,7 @@ class ProcesserConfig(
require(directoryProperties.logs.isNotBlank()) { require(directoryProperties.logs.isNotBlank()) {
"directories.logs must be set" "directories.logs must be set"
} }
log.info {"Logs will be stored in ${directoryProperties.logs}"}
} }
} }

View File

@ -11,11 +11,10 @@ class FileUtil(
private val dirs: DirectoryProperties, private val dirs: DirectoryProperties,
private val mediaPaths: MediaPaths private val mediaPaths: MediaPaths
) { ) {
init {
assert(dirs.logs != null)
}
fun getTemporaryStoreFile(fileName: String): File = fun getTemporaryStoreFile(fileName: String): File =
File(mediaPaths.cache).using(fileName) File(mediaPaths.cache).using(fileName)
fun getLogDirectory(): File = File(dirs.logs) fun getLogDirectory(): File {
return File(dirs.logs)
}
} }

View File

@ -3,7 +3,19 @@ package no.iktdev.mediaprocessing.processer.listeners
import no.iktdev.eventi.tasks.TaskListener import no.iktdev.eventi.tasks.TaskListener
import no.iktdev.eventi.tasks.TaskType import no.iktdev.eventi.tasks.TaskType
import no.iktdev.mediaprocessing.ffmpeg.FFmpeg import no.iktdev.mediaprocessing.ffmpeg.FFmpeg
import no.iktdev.mediaprocessing.ffmpeg.FFmpeg.Listener
import java.io.File
abstract class FfmpegTaskListener(taskType: TaskType): TaskListener(taskType) { abstract class FfmpegTaskListener(taskType: TaskType): TaskListener(taskType) {
abstract fun getFfmpeg(): FFmpeg open fun getFfmpeg(listener: Listener? = null, execPath: String, logDirectory: File): FFmpeg {
return buildFfmpeg(
listener = listener,
execPath = execPath,
logDirectory = logDirectory,
).also {
it.onCreate()
}
}
abstract fun buildFfmpeg(listener: Listener? = null, execPath: String, logDirectory: File): FFmpeg
} }

View File

@ -9,8 +9,8 @@ import no.iktdev.eventi.tasks.TaskType
import no.iktdev.exfl.using import no.iktdev.exfl.using
import no.iktdev.mediaprocessing.ffmpeg.FFmpeg import no.iktdev.mediaprocessing.ffmpeg.FFmpeg
import no.iktdev.mediaprocessing.ffmpeg.arguments.MpegArgument import no.iktdev.mediaprocessing.ffmpeg.arguments.MpegArgument
import no.iktdev.mediaprocessing.processer.config.FileUtil
import no.iktdev.mediaprocessing.processer.config.ExecutablesConfig import no.iktdev.mediaprocessing.processer.config.ExecutablesConfig
import no.iktdev.mediaprocessing.processer.config.FileUtil
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractResultEvent
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@ -60,7 +60,8 @@ class SubtitleTaskListener(
.outputFile(cachedOutFile.absolutePath) .outputFile(cachedOutFile.absolutePath)
.args(taskData.data.arguments) .args(taskData.data.arguments)
val result = getFfmpeg() val logDirectory = fileUtil.getLogDirectory().using("subtitles")
val result = getFfmpeg(execPath = executableConfig.ffmpeg, logDirectory = logDirectory)
withHeartbeatRunner { withHeartbeatRunner {
reporter?.updateLastSeen(task.taskId) reporter?.updateLastSeen(task.taskId)
} }
@ -91,12 +92,10 @@ class SubtitleTaskListener(
return ProcesserExtractResultEvent(null, status, error = message).producedFrom(task) return ProcesserExtractResultEvent(null, status, error = message).producedFrom(task)
} }
override fun getFfmpeg(): FFmpeg { override fun buildFfmpeg(listener: FFmpeg.Listener?, execPath: String, logDirectory: File): FFmpeg {
val logDirectory = fileUtil.getLogDirectory().using("subtitles") return SubtitleFFmpeg(listener, executableConfig.ffmpeg, logDirectory)
return SubtitleFFmpeg(null, executableConfig.ffmpeg, logDirectory)
} }
class SubtitleFFmpeg(override val listener: Listener? = null, private val executablePath: String, val logDirectory: File) : class SubtitleFFmpeg(override val listener: Listener? = null, private val executablePath: String, val logDirectory: File) :
FFmpeg(executable = executablePath, logDir = logDirectory) { FFmpeg(executable = executablePath, logDir = logDirectory) {

View File

@ -11,9 +11,9 @@ import no.iktdev.mediaprocessing.ffmpeg.FFmpeg
import no.iktdev.mediaprocessing.ffmpeg.arguments.MpegArgument import no.iktdev.mediaprocessing.ffmpeg.arguments.MpegArgument
import no.iktdev.mediaprocessing.ffmpeg.decoder.FfmpegDecodedProgress import no.iktdev.mediaprocessing.ffmpeg.decoder.FfmpegDecodedProgress
import no.iktdev.mediaprocessing.processer.CoordinatorClient import no.iktdev.mediaprocessing.processer.CoordinatorClient
import no.iktdev.mediaprocessing.processer.config.FileUtil
import no.iktdev.mediaprocessing.processer.LocalProgressCache import no.iktdev.mediaprocessing.processer.LocalProgressCache
import no.iktdev.mediaprocessing.processer.config.ExecutablesConfig import no.iktdev.mediaprocessing.processer.config.ExecutablesConfig
import no.iktdev.mediaprocessing.processer.config.FileUtil
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserEncodeResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserEncodeResultEvent
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeTask import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeTask
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@ -63,7 +63,12 @@ class VideoTaskListener(
.args(taskData.data.arguments) .args(taskData.data.arguments)
.withProgress(true) .withProgress(true)
val result = getFfmpeg() val logDirectory = fileUtil.getLogDirectory().using("encode")
val result = getFfmpeg(
listener = listener,
logDirectory = logDirectory,
execPath = executableConfig.ffmpeg
)
withHeartbeatRunner { withHeartbeatRunner {
reporter?.updateLastSeen(task.taskId) reporter?.updateLastSeen(task.taskId)
} }
@ -97,12 +102,7 @@ class VideoTaskListener(
return ProcesserEncodeResultEvent(null, null, status, error = message).producedFrom(task) return ProcesserEncodeResultEvent(null, null, status, error = message).producedFrom(task)
} }
val listener = object : FFmpeg.Listener {
override fun getFfmpeg(): FFmpeg {
val logDirectory = fileUtil.getLogDirectory().using("encode")
return VideoFFmpeg(execPath = executableConfig.ffmpeg,
logDirectory = logDirectory,
listener = object : FFmpeg.Listener {
var lastProgress: FfmpegDecodedProgress? = null var lastProgress: FfmpegDecodedProgress? = null
override fun onStarted(inputFile: String) { override fun onStarted(inputFile: String) {
} }
@ -141,9 +141,13 @@ class VideoTaskListener(
} }
} }
})
} }
override fun buildFfmpeg(listener: FFmpeg.Listener?, execPath: String, logDirectory: File): FFmpeg {
return VideoFFmpeg(execPath = executableConfig.ffmpeg,
logDirectory = logDirectory,
listener = listener)
}
class VideoFFmpeg(override val listener: Listener? = null, private val execPath: String, val logDirectory: File) : class VideoFFmpeg(override val listener: Listener? = null, private val execPath: String, val logDirectory: File) :
FFmpeg(executable = execPath, logDir = logDirectory) { FFmpeg(executable = execPath, logDir = logDirectory) {

View File

@ -36,10 +36,6 @@ open class FFmpeg(val executable: String, val logDir: File) {
open fun onCreate() {} open fun onCreate() {}
init {
onCreate()
}
protected lateinit var inputFile: String protected lateinit var inputFile: String
open suspend fun run(argument: MpegArgument) { open suspend fun run(argument: MpegArgument) {
inputFile = if (argument.inputFile == null) throw RuntimeException("Input file is required") else argument.inputFile!! inputFile = if (argument.inputFile == null) throw RuntimeException("Input file is required") else argument.inputFile!!