30 lines
844 B
Python
30 lines
844 B
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from fastapi import APIRouter, Depends, Request
|
||
|
|
from fastapi.responses import JSONResponse
|
||
|
|
|
||
|
|
from app_dependencies import get_runtime
|
||
|
|
from route_helpers import read_json_request
|
||
|
|
from web_runtime import WebAppRuntime
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/rtc/offer")
|
||
|
|
async def rtc_offer(
|
||
|
|
request: Request,
|
||
|
|
runtime: WebAppRuntime = Depends(get_runtime),
|
||
|
|
) -> JSONResponse:
|
||
|
|
try:
|
||
|
|
payload = await read_json_request(request)
|
||
|
|
except ValueError as exc:
|
||
|
|
return JSONResponse({"error": str(exc)}, status_code=400)
|
||
|
|
|
||
|
|
answer = await runtime.rtc_manager.handle_offer(payload)
|
||
|
|
if answer is None:
|
||
|
|
return JSONResponse(
|
||
|
|
{"error": "WebRTC backend unavailable on host (aiortc is not installed)."},
|
||
|
|
status_code=503,
|
||
|
|
)
|
||
|
|
return JSONResponse(answer)
|