SFU M0: browser lab E2E client for Janus VideoRoom.

Add lab page with screen-share publisher and subscriber viewer, join API
feed support, shared session auth, static assets route, and lab docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Anton Afanasyeu
2026-08-07 22:15:42 +02:00
parent 61248e6c8b
commit 0c5c079179
7 changed files with 374 additions and 14 deletions

View File

@@ -4,15 +4,23 @@ require_once dirname(__DIR__) . '/src/bootstrap.php';
/* ── Simple front-controller ─────────────────────────────────────── */
$uri = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH);
$script = basename($uri);
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
/* Strip project prefix /app/androidcast_project/sfu */
$uri = preg_replace('#^/app/androidcast_project/sfu#', '', $uri);
$uri = $uri === '' ? '/' : $uri;
if (preg_match('#^/api/rooms/\d+$#', $uri)) {
require __DIR__ . '/api/rooms.php';
exit;
}
$routes = [
'/' => 'dashboard.php',
'/dashboard' => 'dashboard.php',
'/dashboard.php' => 'dashboard.php',
'/lab' => 'lab.php',
'/lab.php' => 'lab.php',
'/health' => 'health.php',
'/health.php' => 'health.php',
'/api/rooms' => 'api/rooms.php',
@@ -28,6 +36,19 @@ if ($target && is_file(__DIR__ . '/' . $target)) {
require __DIR__ . '/' . $target;
exit;
}
/* Static assets under /assets/ */
if (str_starts_with($uri, '/assets/')) {
$file = __DIR__ . $uri;
if (is_file($file)) {
$ext = pathinfo($file, PATHINFO_EXTENSION);
$types = ['js' => 'application/javascript', 'css' => 'text/css'];
header('Content-Type: ' . ($types[$ext] ?? 'application/octet-stream'));
readfile($file);
exit;
}
}
http_response_code(404);
header('Content-Type: application/json');
echo json_encode(['ok' => false, 'error' => 'not found']);