The key insight: a 2-party / small-mesh call needs NO server-side media — the
server only relays SDP/ICE and the browsers connect peer-to-peer. So the webrtc
package now has a genuinely working call MVP with no Rust/media engine.
- Signaling\RelaySignalingHandler: a blax-software/laravel-ws MessageHandler that
relays between browsers — welcome/join/joined/peer-joined/relay/broadcast/
peer-left. Peers in the kernel ConnectionRegistry, rooms in RoomManager.
- webrtc:serve now runs the relay over a laravel-ws WebSocketServer (browser-usable
ws://). require blax-software/laravel-ws.
- The engine-backed path (SignalingHandler/SignalingServer + MediaEngine) stays
for server-terminated media (recording/AI-bridge/SFU, Str0m = #1051).
- Tests 26 / 60 incl a REAL WebSocket welcome round-trip (browser->laravel-ws->relay);
verified with laravel-ws + reactphp-kernel resolved from Forgejo. README leads
with the browser P2P quickstart + JS example.
rel learn-atc #1055#1051#1019
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WebRTC for Laravel on blax-software/reactphp-kernel. PHP owns signaling +
orchestration; a pluggable MediaEngine owns real-time media, with the production
engine backed by a Rust core (str0m via ext-php-rs) so PHP never runs per-20ms DSP.
- WebRtcServiceProvider + config/webrtc.php + webrtc:serve command
- Contracts\MediaEngine (offer/ice/record/connect/bridge/close)
- Media\NullMediaEngine (signaling-only) + Media\Str0mMediaEngine (Rust seam)
- Signaling\SignalingHandler (transport-agnostic) + Server\SignalingServer (on the kernel)
- rust/ crate stub (blax_webrtc: str0m + ext-php-rs) documenting the media plan
Enables: server-side record/intercept, provider-hidden AI-realtime bridging,
and party-to-party/group calls. rel learn-atc #1055#1051#1019
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>