test4
This commit is contained in:
32
get_data.py
32
get_data.py
@@ -155,6 +155,8 @@ PRELOAD_LOCK = False # когда True — consumer будет принимат
|
||||
PRELOADED_GAME_ID = None # ID матча, который мы держим «тёплым»
|
||||
PRELOAD_HOLD_UNTIL = None # timestamp, до какого момента держим (T-1:15)
|
||||
|
||||
# 🔥 кэш картинок в оперативной памяти
|
||||
SHOTMAP_CACHE: dict[str, bytes] = {}
|
||||
|
||||
# общая очередь
|
||||
results_q = queue.Queue()
|
||||
@@ -1409,6 +1411,14 @@ app = FastAPI(
|
||||
# раздаём /shotmaps как статику из SHOTMAP_DIR
|
||||
app.mount("/shotmaps", StaticFiles(directory=SHOTMAP_DIR), name="shotmaps")
|
||||
|
||||
@app.get("/shotmaps/{filename}")
|
||||
async def get_shotmap(filename: str):
|
||||
data = SHOTMAP_CACHE.get(filename)
|
||||
if not data:
|
||||
# если вдруг перезапустился процесс или такой карты нет
|
||||
raise HTTPException(status_code=404, detail="Shotmap not found")
|
||||
return Response(content=data, media_type="image/png")
|
||||
|
||||
def format_time(seconds: float | int) -> str:
|
||||
"""
|
||||
Удобный формат времени для игроков:
|
||||
@@ -3460,16 +3470,30 @@ def get_image(points, bib, count_point):
|
||||
# текст
|
||||
draw.text((text_x, text_y), label, font=font, fill=(255, 255, 255, 255))
|
||||
|
||||
# --- сохраняем картинку в оперативную память ---
|
||||
filename = f"shots_{bib}_{count_point}.png"
|
||||
path = os.path.join(SHOTMAP_DIR, filename)
|
||||
|
||||
from io import BytesIO
|
||||
buf = BytesIO()
|
||||
try:
|
||||
base_image.save(path, "PNG")
|
||||
# compress_level=1 — быстрее, чем дефолт
|
||||
base_image.save(buf, format="PNG", compress_level=1)
|
||||
except Exception as e:
|
||||
logger.warning(f"[shotmap] не удалось сохранить {path}: {e}")
|
||||
logger.warning(f"[shotmap] не удалось сохранить shotmap в память: {e}")
|
||||
return ""
|
||||
|
||||
return f"https://{MYHOST}.tvstart.ru{path.replace('/root/RFB', '')}"
|
||||
data = buf.getvalue()
|
||||
SHOTMAP_CACHE[filename] = data # кладём в RAM
|
||||
|
||||
# формируем URL для vMix
|
||||
public_base = f"https://{MYHOST}.tvstart.ru"
|
||||
public_url = f"{public_base.rstrip('/')}/shotmaps/{filename}"
|
||||
|
||||
logger.info(
|
||||
f"[shotmap] generated in-memory shotmap for bib={bib}, ver={count_point} "
|
||||
f"-> {filename}, url={public_url}"
|
||||
)
|
||||
return public_url
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user