feat: panelden video izleme/indirme/silme + eşzamanlı yayın kapasitesi düzeltmesi

- streamIngest worker concurrency 3'ten sabit değildi, artık
  MAX_CONCURRENT_CAPTURES (varsayılan 10) ile ayarlanabiliyor. Eskiden
  3'ten fazla kanal aynı anda canlıya geçerse fazlası, ilk 3'ten biri
  bitene kadar (saatlerce) hiç kayda alınmıyordu.
- Python worker'larda (signal-detection, stt-scoring) bullmq varsayılan
  concurrency'si 1'di — WORKER_CONCURRENCY (varsayılan 5) ile
  paralelleştirildi, birden fazla kanal aynı anda segment/transkript
  üretirse sıraya takılmasın diye.
- Frontend artık shared-media volume'üne bağlı: /api/segments/[id]/video
  route'u Range destekli video stream/indirme sağlıyor. Segment ve
  kanal detay sayfalarına <video> oynatıcı, indirme linki ve onaylı
  silme (RawSegment + CandidateSegment, dosya dahil) eklendi.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 18:33:33 +03:00
co-authored by Claude Sonnet 5
parent fd21bbfb14
commit 8a92b9b019
11 changed files with 148 additions and 5 deletions
+5
View File
@@ -16,3 +16,8 @@ QUEUE_NAMES = {
REDIS_URL = os.environ.get("REDIS_URL", "redis://localhost:6379")
SHARED_MEDIA_ROOT = os.environ.get("SHARED_MEDIA_ROOT", "./shared-media")
# bullmq-python defaults Worker concurrency to 1, so several channels
# producing segments/candidates around the same time would otherwise process
# strictly one at a time and build up a backlog.
WORKER_CONCURRENCY = int(os.environ.get("WORKER_CONCURRENCY", "5"))
+6 -2
View File
@@ -11,7 +11,7 @@ import soundfile as sf
from bullmq import Queue, Worker
from . import db
from .queues import QUEUE_NAMES, REDIS_URL, SHARED_MEDIA_ROOT
from .queues import QUEUE_NAMES, REDIS_URL, SHARED_MEDIA_ROOT, WORKER_CONCURRENCY
WINDOW_SEC = 1.0
PEAK_STD_MULTIPLIER = 1.5
@@ -161,4 +161,8 @@ async def process_signal_detection(job, job_token=None):
def start_signal_detection_worker() -> Worker:
return Worker(QUEUE_NAMES["SIGNAL_DETECTION"], process_signal_detection, {"connection": REDIS_URL})
return Worker(
QUEUE_NAMES["SIGNAL_DETECTION"],
process_signal_detection,
{"connection": REDIS_URL, "concurrency": WORKER_CONCURRENCY},
)
+6 -2
View File
@@ -7,7 +7,7 @@ from bullmq import Worker
from openai import OpenAI
from . import db
from .queues import QUEUE_NAMES, REDIS_URL
from .queues import QUEUE_NAMES, REDIS_URL, WORKER_CONCURRENCY
from .telegram import send_telegram_message
_openai_client: OpenAI | None = None
@@ -71,4 +71,8 @@ async def process_stt_scoring(job, job_token=None):
def start_stt_scoring_worker() -> Worker:
return Worker(QUEUE_NAMES["STT_SCORING"], process_stt_scoring, {"connection": REDIS_URL})
return Worker(
QUEUE_NAMES["STT_SCORING"],
process_stt_scoring,
{"connection": REDIS_URL, "concurrency": WORKER_CONCURRENCY},
)