W3C ORTC Community Group Meeting #10
November 20, 2015 10:00AM-11:30AM PDT
Chair: Erik Lagerway (erik@hookflash.com)
W3C CG IPR Policy
Welcome!
About this Virtual Meeting
Information on the meeting:
W3C ORTC Community Group Basics
Associated Sites
Editor’s Draft Changes
Changes from the 22 June Editor’s Draft:
RTCWEB/WebRTC 1.0 Compatibility
Adapter.js: ORTC as a WebRTC Shim
WebRTC Application
adapter.js
ORTC
Can adapter.js be modified to run WebRTC 1.0 examples on ORTC?
Codec Capabilities and Settings
Data Channel Issues
RtpListener issue
Scenario:
How can the RtpListener fill in the muxId / rid values in the RtpUnhandledEvent dictionary if the RtpHeaderExensions are not yet known?
dictionary RTCRtpUnhandledEventInit : EventInit {� DOMString muxId; // <-- how is this value obtained??� DOMString rid; // <-- how is this value obtained??� payloadtype payloadType;� unsigned long ssrc;�};
RtpListener issue
Solution:
Add optional sequence<RTCRtpHeaderExtensionParameters> headerExtensions to RtpListener's constructor.
[Constructor(� RTCDtlsTransport transport,� optional sequence<RTCRtpHeaderExtensionParameters> headerExtensions // adding this results issue�)]�interface RTCRtpListener {� readonly attribute RTCDtlsTransport transport;� attribute EventHandler? onunhandledrtp;�};
Miscellaneous
For Discussion Today (Video Theme)
VP8 and H.264 Capabilities
Note: H.264 (RFC 6184) does not have a max-fr SDP parameter.
VP8 and H.264 Settings
RTCPriorityType and RTCDegradationPreference
dictionary RTCRtpEncodingParameters {� unsigned long ssrc;� payloadtype codecPayloadType;� RTCRtpFecParameters fec;� RTCRtpRtxParameters rtx;� double priority = 1.0;� unsigned long maxBitrate;� double minQuality = 0;� double framerateBias = 0.5;� double resolutionScale;� double framerateScale;� boolean active = true;� DOMString encodingId;� sequence<DOMString> dependencyEncodingIds;�};
RTCPriorityType and RTCDegradationPreference (cont’d)
RTCPriorityType and RTCDegradationPreference (cont’d)
RTCPriorityType and RTCDegradationPreference (cont’d)
dictionary RTCRtpEncodingParameters {� unsigned long ssrc;� payloadtype codecPayloadType;� RTCRtpFecParameters fec;� RTCRtpRtxParameters rtx;� RTCPriorityType priority;
unsigned long maxBitrate;� double minQuality = 0;� double resolutionScale;� double framerateScale;� boolean active = true;� DOMString encodingId;� sequence<DOMString> dependencyEncodingIds;�};
dictionary RTCRtpParameters {� DOMString muxId = "";� sequence<RTCRtpCodecParameters> codecs;� sequence<RTCRtpHeaderExtensionParameters> headerExtensions;� sequence<RTCRtpEncodingParameters> encodings;� RTCRtcpParameters rtcp;� RTCDegradationPreference degradationPreference = "balanced";�};
things go
better
with
RIDS!
For a refreshing simulcast...
RID
Put a RID on it!
Purpose of RID
MID [aka "muxId"] identifies the RtpSender / RtpReceiver pairing by tagging SSRCs with a unique identifier [see MID].
An RTP packet tagged with MID will arrive at the correct RtpReceiver...
BUT how does the RtpReceiver know...
Proposal: Source RTP Stream Identifier (“RID”)
[see https://tools.ietf.org/html/draft-pthatcher-mmusic-rid-02]
RID Support in unhandledrtp events
dictionary RTCRtpUnhandledEventInit : EventInit {� DOMString muxId;� DOMString rid; // <-- added rid to event dictionary� payloadtype payloadType;� unsigned long ssrc;�};
Proposal: Event the RID value to the application
The developer can use this information to handle the different simulcast streams appropriately.
RID Handling
dictionary RTCRtpEncodingParameters {
//... other stream or layer parameters ...� DOMString encodingId;� sequence<DOMString> dependencyEncodingIds;�};
Rules for handling RID inside RtpEncodingParameters:
Does Encoding Parameters need a RID attribute?
Not really… but it could have one:
dictionary RTCRtpEncodingParameters {
//... other stream or layer parameters …
� DOMString rid; // <-- do we really need this???
� DOMString encodingId;� sequence<DOMString> dependencyEncodingIds;�};
The rules for encodingId already support RID without the need to have a redundant identifier in the RtpEncodingParameters.
Simulcast Scenarios
What do we need in ORTC API?
Question for Community Group:
Are there any comments regarding known deficiencies of the ORTC API at this time?
Good time to speak before implementation is too far along!
Thank you
Special thanks to:
Bernard Aboba - Microsoft
Michael Champion - Microsoft
Justin Uberti - Google
Peter Thatcher - Google
Robin Raymond - Hookflash
Erik Lagerway - Hookflash
For More Information
Further Background...
The following slides are details on implementation statuses and will not be covered in Community Group meeting.
Organization / Call for implementation feedback
Mobile C++ ORTC implementation:
https://github.com/openpeer/ortc-lib-sdk
ORTC JS "shims" (i.e. downshim and upshim to / from WebRTC 1.0)
https://github.com/openpeer/ortc-js-shim (vacant repo)
ORTC specification:
https://github.com/openpeer/ortc
ORTC Node JS implementations:
https://github.com/openpeer/ortc-node
Browser Implementations:
Requested at this time (status.modern.ie lists ORTC as "In Development")
ORTC Update
What is in Microsoft Edge ORTC?
What is in Edge ORTC (cont’d)?
Edge ORTC Test Drive
https://dev.modern.ie/testdrive/
For More Information
What is ORTC-lib?
What is in ORTC-lib?
What is in ORTC-lib?
Data Channel
Sctp Transport
RtpSender
Track
Track
RtpSender
DtlsTransport
IceTransport
IceTransport
DtlsTransport
RtpReceiver
Internet
Native C++ application
C# application
WinRT CX API wrapper
WinJS application*
Objective-C API wrapper
Java API wrapper
iOS application
Android application
Mac application
IceGatherer
IceGatherer
IceTransportController
Data Channel
Sctp Transport
Sdes Transport
Sdes Transport
Track
RtpReceiver
Track
Sctp Transport
Data Channel
Sctp Transport
Data Channel
IceTransportController
Sending Application
Receiving Application
RtpListener
* not officially supported
Learnings from ORTC Lib
No major red flags in the object model.
While minor issues in the specification were found, the object model appears to be sound.
Some issues found were related to: