WebRTC Quality Analytics

Documentation / Data model

Data model

Everything the app computes lives in plain Delta tables in your Unity Catalog — a medallion architecture (bronze → silver → gold), W3C getStats-compliant and ObserveRTC-compatible, designed so a future collection SDK feeds the exact same shape.

Tables

Bronze — raw input ledger

TableWhat it holds
bronze_uploadsOne row per uploaded file: name, size, SHA-256 (dedup), parse status and error.

Silver — normalized, source-agnostic

TableWhat it holds
silver_sessionsOne row per client session (one dump / one SDK client): origin URL, browser, OS, duration.
silver_peer_connectionsOne row per RTCPeerConnection: final states, time-to-connected, ICE restarts.
silver_pc_eventsConnection lifecycle events (ICE/connection/signaling state changes, errors) for timeline overlays.
silver_rtp_samplesPer-second RTP stream stats: W3C cumulative counters as reported, plus parser-derived per-interval rates (bitrate, loss %, fps), with remote-inbound feedback folded into outbound rows.
silver_ice_candidatesLocal/remote ICE candidate dimension (type, protocol, network type; addresses maskable).
silver_ice_candidate_pair_samplesPer-second candidate-pair stats — the source of transport RTT and available bandwidth.

Gold — QoE aggregates the app reads

TableWhat it holds
gold_stream_qoePer-stream rollup: bitrate/loss/ jitter/RTT stats with percentiles, freezes, concealment, MOS.
gold_session_qoeCall-level rollup driving the session list — denormalized dimensions (browser, network, TURN) for filtering, plus MOS, degraded %, and the QoE grade.
gold_qoe_timelineFixed 10-second windows per kind/direction with per-window MOS and a degraded flag.
gold_session_diagnosisAppend-only history of AI diagnoses (severity, summary, evidence-citing markdown, token usage).
gold_daily_qoeDaily rollup by source/browser/OS for trends and the bundled AI/BI dashboard.

Column naming follows W3C getStats identifiers in snake_case, with units suffixed where converted (_ms, _s, _kbps, _pct). ObserveRTC identity fields (call_id, client_id, …) are kept so SDK samples map one-to-one later.

QoE scoring

MOS values are estimates for triage and comparison — they are not a measured user opinion score.

Building on the tables