info('SRS webhook received', [ 'action' => $action, 'data' => $data, 'path' => $path ]); // Handle heartbeat separately if ($action === 'heartbeat') { // Update SRS server status updateSRSStatus($data); echo json_encode(['code' => 0, 'message' => 'heartbeat received']); exit; } // Handle stream webhooks $response = $liveStreaming->handleSRSWebhook($action, $data); echo json_encode($response); } catch (Exception $e) { $logger->error('SRS webhook error', [ 'error' => $e->getMessage(), 'input' => $input ?? '', 'path' => $_SERVER['REQUEST_URI'] ?? '' ]); // Return error response echo json_encode([ 'code' => 1, 'message' => $e->getMessage() ]); } /** * Update SRS server status * @param array $data Heartbeat data */ function updateSRSStatus($data) { try { $db = VDatabase::getInstance(); $statusData = [ 'server_id' => $data['device_id'] ?? 'srs-server', 'status' => 'online', 'last_heartbeat' => date('Y-m-d H:i:s'), 'data' => json_encode($data), 'updated_at' => date('Y-m-d H:i:s') ]; // Insert or update server status $existing = $db->doQuery("SELECT id FROM db_srs_servers WHERE server_id = ?", [$statusData['server_id']]); if ($db->doFetch($existing)) { $db->doUpdate('db_srs_servers', 'server_id', $statusData, $statusData['server_id']); } else { $statusData['created_at'] = date('Y-m-d H:i:s'); $db->doInsert('db_srs_servers', $statusData); } } catch (Exception $e) { VLogger::getInstance()->error('Failed to update SRS status', [ 'error' => $e->getMessage(), 'data' => $data ]); } } ?>