Profile parameter added, build.py script created
authorVásáry Dániel <vasary@elgekko.net>
Thu, 1 Feb 2024 13:11:04 +0000 (14:11 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Thu, 1 Feb 2024 13:11:04 +0000 (14:11 +0100)
media-samurai/api.py
media-samurai/build.py [new file with mode: 0644]
media-samurai/logger.yaml
media-samurai/main.py
media-samurai/transcode.py

index 062b28d5757b0da3b41e1790aecd84539b1b4b64..a44848db7d313c1ed017463667ec3a5e7c239f3f 100644 (file)
@@ -4,11 +4,11 @@ from typing import Optional
 import shortuuid
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.staticfiles import StaticFiles
-from fastapi import BackgroundTasks, FastAPI
+from fastapi import BackgroundTasks, FastAPI, HTTPException
 from pydantic import BaseModel
 
 from hls import TranscodeJob
-from transcode import TranscodeItem, TranscodeStatus, background_tasks_results, execute_transcode_task
+from transcode import TranscodeItem, TranscodeStatus, background_tasks_results, execute_hls_transcode_task
 
 
 # https://docs.pydantic.dev/2.4/concepts/models/
@@ -34,11 +34,14 @@ app.mount("/video", StaticFiles(directory="hls"), name="VIDEO")
 
 @app.post("/submit")
 async def submit(item: TranscodeItem, background_tasks: BackgroundTasks):
-    task_id = shortuuid.uuid()
-    background_tasks.add_task(execute_transcode_task, task_id, item.source, item.target, item.frames)
-    job = TranscodeJob()
-    job.status = TranscodeStatus.RUNNING
-    background_tasks_results[task_id] = job
+    if item.profile == 'hls':
+        task_id = shortuuid.uuid()
+        background_tasks.add_task(execute_hls_transcode_task, task_id, item.source, item.target, item.frames)
+        job = TranscodeJob()
+        job.status = TranscodeStatus.RUNNING
+        background_tasks_results[task_id] = job
+    else:
+        raise HTTPException(status_code=400, detail="Profile not defined!")
     return {"task_id": task_id}
 
 
diff --git a/media-samurai/build.py b/media-samurai/build.py
new file mode 100644 (file)
index 0000000..b4873a6
--- /dev/null
@@ -0,0 +1,14 @@
+import os
+import subprocess
+from pathlib import Path
+import nicegui
+
+cmd = [
+    'pyinstaller',
+    'main.py', # your main file with ui.run()
+    '--name', 'media-samurai', # name of your app
+    '--onefile',
+    #'--windowed', # prevent console appearing, only use with ui.run(native=True, ...)
+    '--add-data', f'{Path(nicegui.__file__).parent}{os.pathsep}nicegui'
+]
+subprocess.call(cmd)
\ No newline at end of file
index 3dddc5ed394218ad3a153f258fa7612d502ad536..c9484ff7aeab9c52bd051b52ef8356aca3ad4e9f 100644 (file)
@@ -3,7 +3,7 @@ handlers:
     format: '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> <level>{message}</level>'
     colorize: true
     diagnose: true
-  - sink: media-samurai.log
+  - sink: /logs/media-samurai.log
     enqueue: true
     serialize: false
     format: '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> <level>{message}</level>'
index 08c5b3a37ff87778f3c08e87e04eae0b2705092a..594d975ff1b5cc8ded79bab608c9fac950a52eeb 100644 (file)
@@ -15,4 +15,5 @@ ui.label(f'MediaSamurai listening on port: {app_config.api.port}')
 ui.link('Check documentation', '/docs')
 ui.run_with(app, favicon=site_icon_lizzard)
 if __name__ == "__main__":
-    uvicorn.run(app, port=8181, log_level='critical')
+    uvicorn.run(app, port=8181)
+    # , log_level='critical'
index 546c914a8eb196aecf4fd1fd3d419028b826b02d..5f12bb7eb6be743631996f9e44c045b7f52386cf 100644 (file)
@@ -15,6 +15,7 @@ executor = ThreadPoolExecutor(max_workers=5)
 class TranscodeItem(BaseModel):
     source: str
     target: str
+    profile: str
     frames: int
 
 
@@ -28,7 +29,7 @@ def simulate_background_task(task_id, duration):
     job.status = TranscodeStatus.COMPLETED
 
 
-def execute_transcode_task(task_id, remote_source_file, remote_target_directory, frames):
+def execute_hls_transcode_task(task_id, remote_source_file, remote_target_directory, frames):
     job = background_tasks_results[task_id]
     job.started = datetime.now()
     job.status = TranscodeStatus.RUNNING