Summary - December 2020
Every feature not marked at risk of the WebRTC 1.0 specification has been demonstrably and independently implemented in two browsers, except for:
- A few mandatory-to-implement stats which have not been implemented, but are not critical to real-world interoperability and which implementors are committed to provide in the upcoming weeks.
- The
RTCSctpTransport
andRTCIceTransport
interfaces have been implemented in only one current browser; other browser vendors have indicated their intent to eventually ship these, and these interfaces have also received implementation experience outside of current browsers (in the old Edge Spartan, in orclib, in the Medooze server). RTCRtpSender.setStreams()
is implemented in a single browser, but is expected to land in more browsers in the near future.- The
closing
event forRTCDataChannel
is implemented in only one browser, but is expected to land in more browsers in the near future. - The way browsers report errors occuring during WebRTC operations is not yet fully conformant with the specification.
Given the implementors commitment for these features and given their relative low real-world interoperability impact, the Working Group is confident that these implementation gaps are unlikely to require substantive changes to the specification as implementations catch up. Should this prove necessary, the Working Group will take advantage of the 2020 W3C Process for normative correction of bugs.
As a result of this implementation analysis, the WebRTC Working Group estimates that the implementations of the current WebRTC 1.0 are sufficient to proceed with publication as a W3C Recommendation under the 2020 W3C Process.
Detailed Implementation issues
Gaps
No implementation
- voiceActivityFlag in SSRC (marked "at risk")
- No implementation (CR, FF)
- MTI Stats (CR, full support planned in Safari)
- No implementation of
Only one implementation
- RTCDataChannel.onclosing
- Missing in FF (low difficulty) & planned in Safari (webkit)
RTCRtpSender.setStreams()
- Not implemented in FF (low difficulty), planned in Safari
RTCDtlsTransport.getRemoteCertificates
- Missing from FF impl of RTCDtlsTransport; Safari doesn't implement RTCDtlsTransport
RTCIceTransport
interface- Missing in FF; Available in SecureContext only in Chromium? missing component attribute in Chromium; missing most attributes/methods in Safari
- onicecandidateerror
- Not available in Firefox, Safari
- sctp transport
- Missing in FF, Safari
- RTCError, RTCErrorEvent
- Not implemented in Firefox, No plan for Safari (OperationError fallback test?); bug in RTCErrorEvent constructor (cf idlharness test)
- RTCPeerConnectionIceEvent url attribute
- Missing in FF, Chromium
- validation of
rid
values in addTransceiver - Missing in FF, planned in Safari
- RTCPeerConnectionIceErrorEvent
- Missing in FF, Safari; address, port missing in Chromium
- MTI Stats (single impl)
- Full support planned in Safari, Currently only one implementation of RTCReceivedRtpStreamStats's framesDropped, RTCInboundRtpStreamStats's remoteId, RTCInboundRtpStreamStats's framesReceived, RTCInboundRtpStreamStats's totalAudioEnergy,RTCInboundRtpStreamStats's totalSamplesDuration,RTCOutboundRtpStreamStats's framesSent, RTCRemoteOutboundRtpStreamStats's localId, RTCRemoteOutboundRtpStreamStats's remoteTimestamp, RTCPeerConnectionStats's dataChannelsOpened, RTCPeerConnectionStats's dataChannelsClosed, RTCAudioSourceStats's totalAudioEnergy, RTCAudioSourceStats's totalSamplesDuration, RTCVideoSourceStats's width, RTCVideoSourceStats's height, RTCVideoSourceStats's framesPerSecond, RTCTransportStats's bytesSent, RTCTransportStats's bytesReceived, RTCTransportStats's selectedCandidatePairId, RTCTransportStats's localCertificateId, RTCTransportStats's remoteCertificateId, RTCIceCandidateStats's address
Gap in single browser that affect test suite because of dependencies
blob
argument forRTCDataChannel.send()
- Missing in Chromium (CR2276)
setConfiguration
- Missing in Firefox
Bugs
- Stats lifecycle
-
Chromium lifecyle for presence of RTCInboundRtpStreamStats,
RTCRemoteInboundRtpStreamStats, RTCOutboundRtpStreamStats,
RTCRemoteOutboundRtpStreamStats, RTCDataChannelStats?
FF lifecycle for presence of RTCIceCandidatePairStats.state, currentRoundTripTime. RTCCodecStats, RTCInboundRtpStreamStats, RTCRemoteInboundRtpStreamStats, RTCOutboundRtpStreamStats, RTCRemoteOutboundRtpStreamStats, RTCDataChannelStats, RTCMediaHandlerStats, RTCTransportStats, RTCCertificateStats? RTCPeerConnection.addIceCandidate()
- Supports for zero-argument in Safari
RTCPeerConnection.setLocalDescription()
- Supports for zero-argument in Safari
- readonly attributes in RTCSessionDescription (type, sdp)
- writable in FF, Chromium
restartIce
survives remote offer containing partial restart- Not implemented in FF, Chromium
createOffer
- Chromium Safari fails "When media stream is added when createOffer() is running in parallel, the result offer should contain the new media stream"
- setLocalDescription() with offer not created by own createOffer() should reject with InvalidModificationError
- Fails in Chromium, Safari
- getSynchronizationSources
- returns empty array on audio track in Chromium (?); misses rtpTimestamp, voiceActivityFlag in Safari; doesn't work on video track in FF, which also lacks voiceActivityFlag
- mute/unmute timing
- Buggy in Chrome, Safari
Test suite issues
Bugs
- In general, some tests are https-only, but not clear if this is always justified
- test for
bufferedAmount
depends onblob
sending (but not implemented in Chromium yet)
Annotated WPT results
Tests | Chrome | Edge | FireFox | Safari | Notes |
---|---|---|---|---|---|
webrtc/RTCCertificate-postMessage.html | 3/4 | 3/4 | 1/4 | 4/4 | Check cross-origin created RTCCertificate fails on 3 browsers |
webrtc/RTCCertificate.html | 5/6 | 5/6 | 2/6 | 5/6 | test need to be updated - only first certificate of RTCPeerConnection({ certificates }) needs to be taken into account |
webrtc/RTCConfiguration-bundlePolicy.html | 16/16 | 16/16 | 8/16 | 16/16 | |
webrtc/RTCConfiguration-iceCandidatePoolSize.html | 10/10 | 10/10 | 1/10 | 10/10 | |
webrtc/RTCConfiguration-iceServers.html | 34/66 | 33/66 | 30/66 | 32/66 | Buggy on edge cases / error reporting, but overall interop between Chromium / Safari, and FF if not using setConfig
|
webrtc/RTCConfiguration-iceTransportPolicy.html | 14/17 | 14/17 | 11/17 | 17/17 | each sub-test is passed by two implementations |
webrtc/RTCConfiguration-rtcpMuxPolicy.html | 14/14 | 14/14 | 1/14 | 14/14 | |
webrtc/RTCDTMFSender-insertDTMF.https.html | 8/8 | 8/8 | 8/8 | 8/8 | |
webrtc/RTCDTMFSender-ontonechange-long.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCDTMFSender-ontonechange.https.html | 14/15 | 14/15 | 15/15 | 15/15 | |
webrtc/RTCDataChannel-binaryType.window.html | 2/8 | 2/8 | 3/8 | 3/8 | Bugs are limited to error handling (mostly type of errors for Chromium/Safari) |
webrtc/RTCDataChannel-bufferedAmount.html | 21/25 | 21/25 | 25/25 | 25/25 | missing support on Safari; Chromium fails because of dependency on blob sending |
webrtc/RTCDataChannel-close.html | 11/11 | 11/11 | 3/11 | 0/11 | FF & Safari don't implement closing |
webrtc/RTCDataChannel-id.html | 5/5 | 5/5 | 5/5 | 1/5 | |
webrtc/RTCDataChannel-send-blob-order.html | 1/3 | 1/3 | 1/3 | 3/3 | Chromium not implementing blob sending, but otherwise passes; FF missing order |
webrtc/RTCDataChannel-send.html | 12/22 | 12/22 | 20/22 | 18/22 | lack of blob support explains 4 Chromium failures; maxSize test depends on sctp transport availability |
webrtc/RTCDataChannelEvent-constructor.html | 5/5 | 5/5 | 5/5 | 5/5 | |
webrtc/RTCDtlsTransport-getRemoteCertificates.html | 2/2 | 2/2 | 1/2 | 1/2 | DtlsTransport not implemented in FF, Safari |
webrtc/RTCDtlsTransport-state.html | 4/4 | 4/4 | 4/4 | 1/4 | DtlsTransport not implemented in FF, Safari |
webrtc/RTCError.html | 24/24 | 24/24 | 1/24 | 1/24 | RTCError not implemented in FF, Safari |
webrtc/RTCIceCandidate-constructor.html | 19/19 | 19/19 | 17/19 | 19/19 | missing IceCandidate additional attributes in FF, Safari |
webrtc/RTCIceConnectionState-candidate-pair.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCIceTransport-extension.https.html | 32/32 | 32/32 | 1/32 | 1/32 | not part of webrtc-pc |
webrtc/RTCIceTransport.html | 1/3 | 1/3 | 1/3 | 1/3 | fails for lack of SctpTransport in FF, Safari; fails because RTCIceTransport is only available in secure context in Chromium |
webrtc/RTCPeerConnection-SLD-SRD-timing.https.html | 2/2 | 2/2 | 2/2 | 1/2 | |
webrtc/RTCPeerConnection-add-track-no-deadlock.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html | 4/4 | 4/4 | 4/4 | 1/4 | |
webrtc/RTCPeerConnection-addIceCandidate-timing.https.html | 5/5 | 5/5 | 5/5 | 5/5 | Safari don't implement argument-less sLD; known timing bug in Chromium |
webrtc/RTCPeerConnection-addIceCandidate.html | 17/30 | 17/30 | 30/30 | 10/30 | 2 failures because of wrong error names in Chromium; Chromium doesn't handle null candidate as end-of-candidate (explains 7 of the failures) |
webrtc/RTCPeerConnection-addTrack.https.html | 10/10 | 9/10 | 10/10 | 10/10 | |
webrtc/RTCPeerConnection-addTransceiver.https.html | 13/13 | 13/13 | 11/13 | 11/13 | FF & Safari fail to validate rid (16 chars, alphanumeric) |
webrtc/RTCPeerConnection-canTrickleIceCandidates.html | 4/4 | 4/4 | 4/4 | 1/4 | |
webrtc/RTCPeerConnection-candidate-in-sdp.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCPeerConnection-connectionState.https.html | 8/8 | 8/8 | 1/8 | 6/8 | 1 Safari failure linked to lack of sctp transport; 2nd linked to wrong state machine (FF doesn't implement) |
webrtc/RTCPeerConnection-constructor.html | 23/23 | 23/23 | 21/23 | 22/23 | All subtests pass on at minimum 2 browsers |
webrtc/RTCPeerConnection-createAnswer.html | 3/4 | 3/4 | 4/4 | 4/4 | |
webrtc/RTCPeerConnection-createDataChannel.html | 47/51 | 47/51 | 51/51 | 33/51 | 2
Chromium fails because of lack of blob support; 2 other fails due to
failure no negotiated ids; last chromium issue is linked to dependency
on missing stop() on transceiver |
webrtc/RTCPeerConnection-createOffer.html | 3/6 | 3/6 | 6/6 | 4/6 | bug in operation queuing in Chromium, missing in Safari |
webrtc/RTCPeerConnection-description-attributes-timing.https.html | 5/5 | 5/5 | 5/5 | 1/5 | bug in chromium |
webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html | 4/4 | 4/4 | 4/4 | 0/4 | |
webrtc/RTCPeerConnection-generateCertificate.html | 7/9 | 7/9 | 9/9 | 9/9 | |
webrtc/RTCPeerConnection-getStats.https.html | 17/19 | 17/19 | 6/19 | 14/19 | FF misses mandatory stats: IceCandidate.url, RTCRtpStreamStats.transportId, RTCRtpStreamStats.codecId, RTCReceivedRtpStreamStats.packetsDiscarded, RTCReceivedRtpStreamStats.framesDropped, RTCInboundRTPStreamStats.receiverId, RTCInboundRTPStreamStats.remoteId, RTCInboundRTPStreamStats.framesDecoded, RTCInboundRTPStreamStats.framesReceived, RTCOutboundRTPStreamStats.senderId, RTCOutboundRTPStreamStats.remoteId, RTCOutboundRTPStreamStats.nackCount, RTCIceCandidatePairStats.transportId, RTCIceCandidatePairStats.totalRoundTripTime, RTCIceCandidatePairStats.currentRoundTripTime, RTCIceCandidatePairStats.state, RTCOutboundRTPStreamStats.framesSent, RTCCodecStats, RTCRemoteOutboundRTPStreamStats.remoteTimeStamp, RTCTransportStats, RTCCertificateStats, RTCPeerConnectionStats, RTCDataChannelStats; Chromium, Safari |
webrtc/RTCPeerConnection-getTransceivers.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCPeerConnection-helper-test.html | 2/2 | 2/2 | 2/2 | 1/2 | |
webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCPeerConnection-iceConnectionState.https.html | 13/13 | 13/13 | 9/13 | 8/13 | FF failures linked to lack of sctp / receiver.transport |
webrtc/RTCPeerConnection-iceGatheringState.html | 9/9 | 9/9 | 7/9 | 2/9 | FF/Safari fails because of lack of sctp; Chromium because RTCIceTransport not available in non-secure context |
webrtc/RTCPeerConnection-mandatory-getStats.https.html | 67/78 | 67/78 | 40/78 | 41/78 | 48 implemented in 2+ browsers, 21 in only one browser, 5 in no browser, 2 can't be reliably detected with WPT (issuerCertificatedId, codecType) |
webrtc/RTCPeerConnection-ondatachannel.html | 9/9 | 9/9 | 9/9 | 4/9 | |
webrtc/RTCPeerConnection-onicecandidateerror.https.html | 2/2 | 2/2 | 0/2 | 0/2 | icecandidateerror not implemented in FF, Safari |
webrtc/RTCPeerConnection-onnegotiationneeded.html | 17/17 | 17/17 | 16/17 | 16/17 | Now implemented in FF, bug in chromium https://crbug.com/1043503 |
webrtc/RTCPeerConnection-onsignalingstatechanged.https.html | 4/4 | 4/4 | 4/4 | 3/4 | bug in chromium |
webrtc/RTCPeerConnection-ontrack.https.html | 8/8 | 8/8 | 8/8 | 8/8 | |
webrtc/RTCPeerConnection-operations.https.html | 6/29 | 6/29 | 28/29 | 17/29 | Only FF support |
webrtc/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html | 3/3 | 3/3 | 3/3 | 1/3 | |
webrtc/RTCPeerConnection-perfect-negotiation-stress-glare.https.html | 3/3 | 3/3 | 3/3 | 1/3 | |
webrtc/RTCPeerConnection-perfect-negotiation.https.html | 5/5 | 5/5 | 5/5 | 3/5 | Only FF support, https://bugs.chromium.org/p/chromium/issues/detail?id=980872 |
webrtc/RTCPeerConnection-remote-track-mute.https.html | 1/6 | 1/6 | 3/6 | 1/6 | Timing bug in muting/unmuting in Chromium; FF partial impl of transceiver/close impact on mute events |
webrtc/RTCPeerConnection-removeTrack.https.html | 15/15 | 15/15 | 15/15 | 14/15 | |
webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html | 2/2 | 2/2 | 2/2 | 2/2 | timing bug in Chromium; restartIce not implemented in Safari |
webrtc/RTCPeerConnection-restartIce.https.html | 12/14 | 12/14 | 13/14 | 11/14 | only edge case lack implementation |
webrtc/RTCPeerConnection-setDescription-transceiver.html | 7/7 | 7/7 | 6/7 | 3/7 | |
webrtc/RTCPeerConnection-setLocalDescription-answer.html | 6/8 | 6/8 | 8/8 | 2/8 | Chromium error is just wrong error type raised |
webrtc/RTCPeerConnection-setLocalDescription-offer.html | 8/9 | 8/9 | 9/9 | 3/9 | setLocalDescription() with offer not created by own createOffer() should reject with InvalidModificationError but doesn't in Chromium, Safari |
webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html | 11/14 | 11/14 | 12/14 | 12/14 | Safari doesn't support parameter-less SLD; FF & Chromium bug in falling back to last answer? |
webrtc/RTCPeerConnection-setLocalDescription-pranswer.html | 3/5 | 3/5 | 1/5 | 4/5 | Test is wrong to assume pendingRemoteDescription is null? other chromium failure is wrong error name |
webrtc/RTCPeerConnection-setLocalDescription-rollback.html | 6/6 | 6/6 | 6/6 | 3/6 | Wrong queuing in Chromium |
webrtc/RTCPeerConnection-setLocalDescription.html | 4/4 | 4/4 | 4/4 | 4/4 | |
webrtc/RTCPeerConnection-setRemoteDescription-answer.html | 4/4 | 4/4 | 4/4 | 4/4 | |
webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCPeerConnection-setRemoteDescription-offer.html | 5/14 | 5/14 | 0/1 | 3/14 | FF failures are only linked to error type; Chromium doesn't follow spec algo |
webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html | 5/5 | 5/5 | 1/5 | 5/5 | |
webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html | 7/7 | 7/7 | 7/7 | 7/7 | |
webrtc/RTCPeerConnection-setRemoteDescription-rollback.html | 22/22 | 22/22 | 19/22 | 3/22 | Safari has wrong state machine FF: one failure due to lack of setStreams, 2 due to state machine bugs |
webrtc/RTCPeerConnection-setRemoteDescription-simulcast.https.html | 1/2 | 1/2 | 2/2 | 1/2 | chromium bug |
webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html | 11/15 | 11/15 | 15/15 | 11/15 | timing bug in muted track explains 2 Chromium failures (the 3rd actually passes when timeout removed) |
webrtc/RTCPeerConnection-setRemoteDescription.html | 5/6 | 5/6 | 6/6 | 6/6 | |
webrtc/RTCPeerConnection-track-stats.https.html | 14/15 | 14/15 | 0/15 | 12/15 | Chromium fails in handling replaceTrack; 3 of safari failures due to outdated stream stat tests, others are real; FF doesn't implement trackIdentifier which is required for this test |
webrtc/RTCPeerConnection-transceivers.https.html | 45/45 | 45/45 | 44/45 | 42/45 | only FF failure due to missing encodings on sendparameters |
webrtc/RTCPeerConnection-videoDetectorTest.html | 2/2 | 2/2 | 2/2 | 0/2 | |
webrtc/RTCPeerConnectionIceErrorEvent.html | 2/2 | 2/2 | 1/2 | 1/2 | |
webrtc/RTCPeerConnectionIceEvent-constructor.html | 7/9 | 7/9 | 7/9 | 9/9 | Minor bug in FF/Chromium (undefined instead of nullable) |
webrtc/RTCRtpParameters-codecs.html | 7/7 | 7/7 | 1/7 | 1/7 | FF doesn't implement RtpParameters.codecs; Safari doesn't reject invalid modifications |
webrtc/RTCRtpParameters-encodings.html | 15/15 | 15/15 | 1/15 | 1/15 | FF doesn't implement RtpParameters.encodings; Safari doesn't set active/maxBitRate/rid and doesn't reject invalid modifications ("only" 7 real failures) |
webrtc/RTCRtpParameters-headerExtensions.html | 2/2 | 2/2 | 1/2 | 1/2 | FF doesn't implement RtpParameters.headerExtensions; Safari OK (sends InvalidStateError instead of InvalidModificationError |
webrtc/RTCRtpParameters-rtcp.html | 3/3 | 3/3 | 1/3 | 1/3 | not implemented in FF nor Safari |
webrtc/RTCRtpParameters-transactionId.html | 6/6 | 6/6 | 1/6 | 1/6 | rtcp not implemented in Safari OK (sends InvalidStateError instead of InvalidModificationError |
webrtc/RTCRtpReceiver-getCapabilities.html | 4/4 | 4/4 | 1/4 | 4/4 | |
webrtc/RTCRtpReceiver-getContributingSources.https.html | 3/3 | 3/3 | 3/3 | 3/3 | |
webrtc/RTCRtpReceiver-getParameters.html | 3/4 | 3/4 | 1/4 | 1/4 | Safari doesn't implement .rctp, but otherwise passes same tests as Chromium (i.e. fails on simulcast test, not sure if it's right); FF doesn't implement getParameters (#1618999) |
webrtc/RTCRtpReceiver-getStats.https.html | 1/3 | 1/3 | 1/3 | 1/3 | Chromium and FF miss some mandatory stats |
webrtc/RTCRtpReceiver-getSynchronizationSources.https.html | 0/15 | 0/15 | 14/15 | 0/15 | Safari doesn't implement rtpTimestamp, voiceActivityFlag; Chromium timeout on audio (CR) but works OK for video (the FF error is voiceActivtyFlag support, marked at risk) |
webrtc/RTCRtpSender-encode-same-track-twice.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCRtpSender-getCapabilities.html | 4/4 | 4/4 | 1/4 | 4/4 | |
webrtc/RTCRtpSender-getStats.https.html | 1/3 | 1/3 | 1/3 | 1/3 | gaps in MTI stats (but selector implemented) |
webrtc/RTCRtpSender-replaceTrack.https.html | 9/11 | 9/11 | 11/11 | 9/11 | All subtests pass on at minimum 2 browsers |
webrtc/RTCRtpSender-setParameters.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCRtpSender-setStreams.https.html | 6/6 | 6/6 | 1/6 | 1/6 | setStreams not implemented in FF, Safari |
webrtc/RTCRtpSender-transport.https.html | 9/9 | 9/9 | 6/9 | 1/9 | Missing transport objects in FF/Safari - does old Edge help? |
webrtc/RTCRtpSender.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/RTCRtpTransceiver-direction.html | 4/4 | 4/4 | 4/4 | 4/4 | |
webrtc/RTCRtpTransceiver-setCodecPreferences.html | 20/20 | 20/20 | 1/20 | 19/20 | setCodecPreferences not implemented in FF; Safari fails to reject invalid modifications |
webrtc/RTCRtpTransceiver-stop.html | 8/9 | 8/9 | 7/9 | 6/9 | FF fails on 'A stopped sendonly transceiver should generate a sendonly m-section in the offer' |
webrtc/RTCRtpTransceiver.https.html | 31/39 | 31/39 | 31/39 | 0/1 | Chromium failures due to bug in mute timing, (+ SDP parsing failure in checkMsidNoTrackId, track negotiation in checkAddTransceiverThenAddTrackPairs & checkRemoveTrackNegotiation) |
webrtc/RTCSctpTransport-constructor.html | 5/5 | 5/5 | 1/5 | 1/5 | sctp transport not implemented in FF/Safari |
webrtc/RTCSctpTransport-events.html | 3/3 | 3/3 | 0/3 | 0/3 | sctp transport not implemented in FF/Safari |
webrtc/RTCSctpTransport-maxChannels.html | 3/3 | 3/3 | 0/3 | 0/3 | sctp transport not implemented in FF/Safari |
webrtc/RTCSctpTransport-maxMessageSize.html | 6/6 | 6/6 | 1/6 | 1/6 | sctp transport not implemented in FF/Safari |
webrtc/RTCTrackEvent-constructor.html | 7/8 | 7/8 | 8/8 | 8/8 | |
webrtc/RTCTrackEvent-fire.html | 8/10 | 8/10 | 10/10 | 5/10 | Chromium bug in handling duplicate/empty msid - ignore? |
webrtc/datachannel-emptystring.html | 1/2 | 1/2 | 1/2 | 1/2 | edge case |
webrtc/getstats.html | 2/2 | 2/2 | 1/2 | 2/2 | |
webrtc/historical.html | 9/18 | 9/18 | 10/18 | 18/18 | legacy backwards-compat support will not be removed from Chrome and FF, and Safari had added it, although not advertised. |
webrtc/idlharness.https.window.html | 481/497 | 481/497 | 336/497 | 376/497 | IDL gaps as documented in impl tracker |
webrtc/legacy/RTCPeerConnection-addStream.https.html | 2/2 | 2/2 | 1/2 | 1/2 | not in spec |
webrtc/legacy/RTCPeerConnection-createOffer-offerToReceive.html | 19/19 | 19/19 | 19/19 | 5/19 | |
webrtc/legacy/RTCRtpTransceiver-with-OfferToReceive-options.https.html | 5/5 | 4/5 | 5/5 | 2/5 | |
webrtc/legacy/onaddstream.https.html | 2/2 | 1/2 | 2/2 | 1/2 | |
webrtc/no-media-call.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/promises-call.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/protocol/RTCPeerConnection-payloadTypes.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/protocol/bundle.https.html | 3/3 | 3/3 | 1/3 | 1/3 | FF and Safari don't implement ICE / DTLS transports |
webrtc/protocol/candidate-exchange.https.html | 8/8 | 8/8 | 4/8 | 4/8 | FF doesn't implement IceTransport; Safari doesn't expose it |
webrtc/protocol/crypto-suite.https.html | 7/9 | 7/9 | 1/9 | 0/9 | FF and Safari don't implement SCTP transport |
webrtc/protocol/dtls-fingerprint-validation.html | 2/2 | 2/2 | 0/2 | 0/2 | FF doesn't implement connectionState (not clear if it is failing the pc); Safari doesn't make the PC fail |
webrtc/protocol/handover.html | 3/3 | 3/3 | 1/3 | 3/3 | |
webrtc/protocol/ice-state.https.html | 4/4 | 4/4 | 3/4 | 3/4 | FF & Safari go to failed instead of disconnected on invalid ICE candidate |
webrtc/protocol/ice-ufragpwd.html | 3/3 | 3/3 | 1/3 | 3/3 | FF and Safari fail to fail on ICE invalid content |
webrtc/protocol/jsep-initial-offer.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/protocol/missing-fields.html | 3/3 | 3/3 | 3/3 | 3/3 | |
webrtc/protocol/msid-parse.html | 5/5 | 5/5 | 5/5 | 5/5 | |
webrtc/protocol/rtp-demuxing.html | 3/3 | 3/3 | 2/3 | 3/3 | |
webrtc/protocol/rtp-payloadtypes.html | 2/4 | 2/4 | 3/4 | 2/4 | |
webrtc/protocol/sctp-format.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/protocol/simulcast-answer.html | 2/2 | 2/2 | 1/2 | 2/2 | FF doesn't implement rid |
webrtc/protocol/simulcast-offer.html | 2/2 | 2/2 | 1/2 | 1/2 | FF/Safari don't implement rid |
webrtc/protocol/split.https.html | 2/2 | 2/2 | 1/2 | 2/2 | |
webrtc/protocol/unknown-mediatypes.html | 2/2 | 2/2 | 1/2 | 1/2 | |
webrtc/protocol/video-codecs.https.html | 4/4 | 4/4 | 1/4 | 4/4 | FF failures due to H264 not enabled in WPT runs (1) and lack of RTCParameters support (2); Safari passes |
webrtc/receiver-track-live.https.html | 3/5 | 1/5 | 5/5 | 3/5 | |
webrtc/simplecall-no-ssrcs.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/simplecall.https.html | 2/2 | 2/2 | 2/2 | 2/2 | |
webrtc/simulcast/basic.https.html | 2/2 | 1/2 | 1/2 | 0/2 | Safari's failure is linked to an unrelated bug on the loadmetadata event |
webrtc/simulcast/getStats.https.html | 2/2 | 1/2 | 1/2 | 0/2 | Safari only reports stats on 1 layer (instead of all 3 layers) |
webrtc/simulcast/h264.https.html | 2/2 | 1/2 | 1/2 | 0/2 | Safari's failure is linked to an unrelated bug on the loadmetadata event |
webrtc/simulcast/setParameters-active.https.html | 2/2 | 1/2 | 1/2 | 0/2 | Safari's failure is linked to an unrelated bug on the loadmetadata event |
webrtc/simulcast/vp8.https.html | 2/2 | 1/2 | 1/2 | 0/2 | Safari's failure is linked to an unrelated bug on the loadmetadata event |
MTI Stats
Static results as of 30 september 2020 (based on mandatory stats test)
Subtest | Chromium | FF | Safari |
---|---|---|---|
getStats succeeds |
|||
Validating stats |
❌
|
||
RTCRtpStreamStats's ssrc |
|||
RTCRtpStreamStats's kind |
|||
RTCRtpStreamStats's transportId |
❌
|
||
RTCRtpStreamStats's codecId |
❌
|
||
RTCReceivedRtpStreamStats's packetsReceived |
|||
RTCReceivedRtpStreamStats's packetsLost |
|||
RTCReceivedRtpStreamStats's jitter |
|||
RTCReceivedRtpStreamStats's packetsDiscarded |
❌
|
❌
|
❌
|
RTCReceivedRtpStreamStats's framesDropped |
❌
|
❌
|
|
RTCInboundRtpStreamStats's receiverId |
❌
|
❌
|
❌
|
RTCInboundRtpStreamStats's remoteId |
❌
|
❌
|
|
RTCInboundRtpStreamStats's framesDecoded |
|||
RTCInboundRtpStreamStats's nackCount |
|||
RTCInboundRtpStreamStats's framesReceived |
❌
|
❌
|
|
RTCInboundRtpStreamStats's bytesReceived |
|||
RTCInboundRtpStreamStats's totalAudioEnergy |
❌
|
❌
|
|
RTCInboundRtpStreamStats's totalSamplesDuration |
❌
|
❌
|
|
RTCRemoteInboundRtpStreamStats's localId |
❌
|
||
RTCRemoteInboundRtpStreamStats's roundTripTime |
❌
|
||
RTCSentRtpStreamStats's packetsSent |
❌
|
||
RTCSentRtpStreamStats's bytesSent |
❌
|
||
RTCOutboundRtpStreamStats's senderId |
❌
|
❌
|
❌
|
RTCOutboundRtpStreamStats's remoteId |
❌
|
||
RTCOutboundRtpStreamStats's framesEncoded |
❌
|
||
RTCOutboundRtpStreamStats's nackCount |
❌
|
||
RTCOutboundRtpStreamStats's framesSent |
❌
|
❌
|
|
RTCRemoteOutboundRtpStreamStats's localId |
❌
|
❌
|
|
RTCRemoteOutboundRtpStreamStats's remoteTimestamp |
❌
|
❌
|
|
RTCPeerConnectionStats's dataChannelsOpened |
❌
|
❌
|
|
RTCPeerConnectionStats's dataChannelsClosed |
❌
|
❌
|
|
RTCDataChannelStats's label |
|||
RTCDataChannelStats's protocol |
|||
RTCDataChannelStats's dataChannelIdentifier |
❌
|
||
RTCDataChannelStats's state |
|||
RTCDataChannelStats's messagesSent |
|||
RTCDataChannelStats's bytesSent |
|||
RTCDataChannelStats's messagesReceived |
|||
RTCDataChannelStats's bytesReceived |
|||
RTCMediaSourceStats's trackIdentifier |
❌
|
||
RTCMediaSourceStats's kind |
❌
|
||
RTCAudioSourceStats's totalAudioEnergy |
❌
|
❌
|
|
RTCAudioSourceStats's totalSamplesDuration |
❌
|
❌
|
|
RTCVideoSourceStats's width |
❌
|
❌
|
|
RTCVideoSourceStats's height |
❌
|
❌
|
|
RTCVideoSourceStats's framesPerSecond |
❌
|
❌
|
|
RTCMediaHandlerStats's trackIdentifier |
❌
|
❌
|
❌
|
RTCCodecStats's payloadType |
❌
|
||
RTCCodecStats's codecType |
?
|
?
|
?
|
RTCCodecStats's mimeType |
❌
|
||
RTCCodecStats's clockRate |
❌
|
||
RTCCodecStats's channels |
❌
|
||
RTCCodecStats's sdpFmtpLine |
❌
|
||
RTCTransportStats's bytesSent |
❌
|
❌
|
|
RTCTransportStats's bytesReceived |
❌
|
❌
|
|
RTCTransportStats's selectedCandidatePairId |
❌
|
❌
|
|
RTCTransportStats's localCertificateId |
❌
|
❌
|
|
RTCTransportStats's remoteCertificateId |
❌
|
❌
|
|
RTCIceCandidatePairStats's transportId |
|||
RTCIceCandidatePairStats's localCandidateId |
|||
RTCIceCandidatePairStats's remoteCandidateId |
|||
RTCIceCandidatePairStats's state |
|||
RTCIceCandidatePairStats's nominated |
|||
RTCIceCandidatePairStats's bytesSent |
|||
RTCIceCandidatePairStats's bytesReceived |
|||
RTCIceCandidatePairStats's totalRoundTripTime |
❌
|
||
RTCIceCandidatePairStats's currentRoundTripTime |
❌
|
||
RTCIceCandidateStats's address |
❌
|
❌
|
|
RTCIceCandidateStats's port |
|||
RTCIceCandidateStats's protocol |
|||
RTCIceCandidateStats's candidateType |
|||
RTCIceCandidateStats's url |
❌
|
❌
|
❌
|
RTCCertificateStats's fingerprint |
❌
|
||
RTCCertificateStats's fingerprintAlgorithm |
❌
|
||
RTCCertificateStats's base64Certificate |
❌
|
||
RTCCertificateStats's issuerCertificateId |
?
|
?
|
?
|