Files
usda-vision/scripts/test_rtsp.py
salirezav f6a37ca1ba Remove deprecated files and scripts to streamline the codebase
- Deleted unused API test files, RTSP diagnostic scripts, and development utility scripts to reduce clutter.
- Removed outdated database schema and modularization proposal documents to maintain focus on current architecture.
- Cleaned up configuration files and logging scripts that are no longer in use, enhancing project maintainability.
2025-11-02 10:07:59 -05:00

114 lines
4.1 KiB
Python

#!/usr/bin/env python3
"""
Quick test script to verify RTSP streaming is working.
Tests API endpoints and MediaMTX status.
"""
import requests
import json
import time
import sys
API_BASE = "http://exp-dash:8000"
MEDIAMTX_BASE = "http://exp-dash:8889"
CAMERA = "camera1"
def test_api_rtsp():
"""Test RTSP start endpoint"""
print(f"\n{'='*60}")
print(f"Testing RTSP streaming for {CAMERA}")
print(f"{'='*60}\n")
# 1. Check if camera exists
print(f"1. Checking camera status...")
try:
resp = requests.get(f"{API_BASE}/cameras/{CAMERA}/status", timeout=5)
if resp.status_code == 200:
print(f" ✅ Camera {CAMERA} found")
print(f" Status: {json.dumps(resp.json(), indent=2)}")
else:
print(f" ❌ Camera {CAMERA} not found (status: {resp.status_code})")
return False
except Exception as e:
print(f" ❌ Error checking camera: {e}")
return False
# 2. Start RTSP streaming
print(f"\n2. Starting RTSP streaming...")
try:
resp = requests.post(f"{API_BASE}/cameras/{CAMERA}/start-rtsp", timeout=10)
print(f" Response status: {resp.status_code}")
print(f" Response: {json.dumps(resp.json(), indent=2)}")
if resp.status_code == 200 and resp.json().get("success"):
print(f" ✅ RTSP streaming started successfully")
rtsp_url = resp.json().get("rtsp_url", "N/A")
print(f" RTSP URL: {rtsp_url}")
else:
print(f" ❌ Failed to start RTSP streaming")
return False
except Exception as e:
print(f" ❌ Error starting RTSP: {e}")
return False
# 3. Wait a moment for FFmpeg to start
print(f"\n3. Waiting for stream to initialize (5 seconds)...")
time.sleep(5)
# 4. Check MediaMTX for the stream
print(f"\n4. Checking MediaMTX for stream...")
try:
resp = requests.get(f"{MEDIAMTX_BASE}/v2/paths/list", timeout=5)
if resp.status_code == 200:
paths = resp.json()
print(f" MediaMTX paths: {json.dumps(paths, indent=2)}")
# Check if our camera path exists
if isinstance(paths, dict) and "items" in paths:
items = paths.get("items", {})
if CAMERA in items:
path_info = items[CAMERA]
source_ready = path_info.get("sourceReady", False)
readers = path_info.get("readers", [])
print(f" ✅ Path '{CAMERA}' found in MediaMTX")
print(f" Source ready: {source_ready}")
print(f" Active readers: {len(readers)}")
if source_ready:
print(f" ✅ Stream is ready!")
else:
print(f" ⚠️ Stream not ready yet (sourceReady=false)")
else:
print(f" ❌ Path '{CAMERA}' not found in MediaMTX")
print(f" Available paths: {list(items.keys())}")
else:
print(f" ⚠️ Unexpected response format from MediaMTX")
else:
print(f" ⚠️ MediaMTX API returned status {resp.status_code}")
except Exception as e:
print(f" ⚠️ Error checking MediaMTX: {e}")
# 5. Check specific path
print(f"\n5. Getting detailed info for path '{CAMERA}'...")
try:
resp = requests.get(f"{MEDIAMTX_BASE}/v2/paths/get/{CAMERA}", timeout=5)
if resp.status_code == 200:
info = resp.json()
print(f" Path info: {json.dumps(info, indent=2)}")
else:
print(f" Path not found (status: {resp.status_code})")
except Exception as e:
print(f" Error: {e}")
print(f"\n{'='*60}")
print(f"Test complete!")
print(f"Try viewing the stream with:")
print(f" vlc rtsp://exp-dash:8554/{CAMERA}")
print(f" ffplay -rtsp_transport tcp rtsp://exp-dash:8554/{CAMERA}")
print(f"{'='*60}\n")
return True
if __name__ == "__main__":
test_api_rtsp()