Relay:
- /signal/{channel} path for SDP/ICE exchange via WebSocket
- handle_signaling broadcasts text messages between signaling peers
- signaling_tx broadcast channel in ChannelState
- 46 ds-stream tests (+2 signaling path tests)
JS Runtime:
- _initWebRTC(signalingUrl, streamUrl, mode) with RTCPeerConnection
- Unordered DataChannel (ordered:false, maxRetransmits:0) for low latency
- Auto-fallback: WebSocket starts immediately, WebRTC upgrades in ≤5s
- Data channel override of _streamSend for transparent binary protocol
Parser/AST:
- StreamTransport enum (WebSocket, WebRTC)
- transport field in StreamDecl
- Parses: stream x on url { mode: signal, transport: webrtc }
Codegen:
- WebRTC: emits DS._initWebRTC(sigUrl, streamUrl, mode)
- WebSocket: emits DS._initStream(url, mode) (unchanged)
97 tests, 0 failures
26 lines
648 B
Text
26 lines
648 B
Text
-- DreamStack WebRTC Streaming Counter
|
|
-- Same as streaming-counter.ds but uses peer-to-peer WebRTC
|
|
-- data channels for sub-frame latency, with WebSocket fallback.
|
|
--
|
|
-- Run with:
|
|
-- cargo run -p ds-stream &
|
|
-- dreamstack stream examples/streaming-webrtc.ds
|
|
|
|
let count = 0
|
|
let doubled = count * 2
|
|
let message = "WebRTC Counter"
|
|
|
|
stream counter on "ws://localhost:9100/source/webrtc-demo" { mode: signal, transport: webrtc }
|
|
|
|
view counter =
|
|
column [
|
|
text message
|
|
text count
|
|
text doubled
|
|
row [
|
|
button "-" { click: count -= 1 }
|
|
button "+" { click: count += 1 }
|
|
]
|
|
when count > 10 ->
|
|
text "On fire!"
|
|
]
|