summaryrefslogtreecommitdiffstats
path: root/opt/obsproxy/server.py
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-10-13 19:17:26 -0700
committeryum <yum.food.vr@gmail.com>2025-10-28 17:19:35 -0700
commitc3fa121f1a3ec74c5980bc8981e4836ca3a708f2 (patch)
tree9a481e6d5a25ea59055724fb089ceeca43a00f42 /opt/obsproxy/server.py
parent8aca05a7e644f3d4aff6bcf636514882dd2ae934 (diff)
shart attack
Diffstat (limited to 'opt/obsproxy/server.py')
-rwxr-xr-xopt/obsproxy/server.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/opt/obsproxy/server.py b/opt/obsproxy/server.py
index 8191d30..242e223 100755
--- a/opt/obsproxy/server.py
+++ b/opt/obsproxy/server.py
@@ -22,6 +22,7 @@ BASE_DIR = Path(os.environ.get('STREAM_DIR', '/var/www/streams'))
SERVER_DOMAIN = os.environ.get('SERVER_DOMAIN', 'yummers.dev')
STREAM_HEX = secrets.token_hex(16)
STREAM_PATH = BASE_DIR / 'live' / STREAM_HEX
+DASH_ROUTE_PREFIX = f"/dash/{STREAM_HEX}"
# Setup logging
logging.basicConfig(
@@ -74,7 +75,7 @@ def start_ffmpeg_process():
'-map', '0:v:0?',
'-map', '0:a:0?',
'-c:v', 'copy',
- '-c:a', 'aac', '-b:a', '192k',
+ '-c:a', 'copy',
'-f', 'dash',
'-seg_duration', str(DASH_SEGMENT_TIME),
'-frag_duration', str(DASH_FRAGMENT_TIME),
@@ -158,16 +159,20 @@ def cleanup_stream():
# Routes
-@app.route('/dash/manifest.mpd')
+@app.route(f"{DASH_ROUTE_PREFIX}/manifest.mpd")
def serve_dash_manifest():
"""Serve the MPEG-DASH manifest"""
if not stream_active:
return "Stream not found", 404
+ manifest_file = STREAM_PATH / "manifest.mpd"
+ if not manifest_file.exists():
+ return "Manifest not ready", 503
+
return send_from_directory(str(STREAM_PATH), "manifest.mpd")
-@app.route('/dash/<path:filename>')
+@app.route(f"{DASH_ROUTE_PREFIX}/<path:filename>")
def serve_dash_segments(filename):
"""Serve the MPEG-DASH segment files"""
if not stream_active:
@@ -194,8 +199,11 @@ def on_publish():
if not start_ffmpeg_process():
return "Failed to start stream", 500
- logger.info("Stream started successfully")
- logger.info(f"Access stream at https://{SERVER_DOMAIN}/dash/manifest.mpd")
+ logger.info(
+ "Stream active; manifest available at https://%s%s/manifest.mpd",
+ SERVER_DOMAIN,
+ DASH_ROUTE_PREFIX
+ )
return "OK"
@@ -229,15 +237,15 @@ def health_check():
def print_instructions():
"""Print usage instructions"""
obs_url = f"rtmp://{SERVER_DOMAIN}/live"
- vrc_url = f"rtmp://{SERVER_DOMAIN}/live/{STREAM_HEX}"
+ dash_url = f"https://{SERVER_DOMAIN}{DASH_ROUTE_PREFIX}/manifest.mpd"
print("\n" + "="*80)
print(f"{'OBS TO VRCHAT STREAMING PROXY':^80}")
print("="*80)
print("\n[URLS]")
- print(f" OBS: {obs_url}")
- print(f" VRChat: {vrc_url}")
+ print(f" OBS ingest: {obs_url}")
+ print(f" DASH: {dash_url}")
print("\n[STATUS]")
print(f" Stream is {'ACTIVE' if ffmpeg_process else 'INACTIVE'}")