Presentation is loading. Please wait.

Presentation is loading. Please wait.

ORTC Walk Through IETF 88 Robin Raymond, Hookflash Bernard Aboba, Microsoft Adalberto Foresti, Microsoft Open Technologies, Inc. ORCA – Object-RTC API.

Similar presentations


Presentation on theme: "ORTC Walk Through IETF 88 Robin Raymond, Hookflash Bernard Aboba, Microsoft Adalberto Foresti, Microsoft Open Technologies, Inc. ORCA – Object-RTC API."— Presentation transcript:

1 ORTC Walk Through IETF 88 Robin Raymond, Hookflash Bernard Aboba, Microsoft Adalberto Foresti, Microsoft Open Technologies, Inc. ORCA – Object-RTC API Community Group

2 Meeting Purpose The purpose of this meeting is explain: – Why a community has come together to work on an alternative API – High level features of the ORTC API – How to use the API to implement a simple video chat demo – How you can get involved with developing the spec and code – Introduce open source effort / call to action There will be time for refreshments and Q&A the last 30 minutes Session is recorded and streamed to the web (sponsored by Hookflash)

3 Introduction to ORTC ORTC – Object Realtime Communications – A next-generation JavaScript API for browser, mobile, and cloud realtime audio / video scenarios – ORTC is an alternative API to the W3C WebRTC 1.0 draft API – It is being developed in the ORCA W3C Community Group

4 The ORCA W3C Community Group W3C Community Groups are forums open to all without fee – Simple IPR policy – royalty-free commitments to one’s own contributions – Not on standards track – Mature CG specs can get broader IPR commitments, transition to standards track – Don’t have to be W3C member!

5 The ORCA W3C Community Group Object RTC API Community Group, – Formed in August 2013 Chair and editor: Robin Raymond – Goal to develop WebRTC API that exposes an object API rather than blobs of SDP – Community group founded by JS developers coming from both SIP/other protocol signaling backgrounds, node.js and WebRTC enthusiasts.

6 This is not a community group meeting Goal here is to explain mission and progress, recruit new members To suggest API changes, join the Community Group – we can’t accept suggestions from those who have not signed the Contributor License Agreement

7 Special Thanks to… ORCA Community Group asked Microsoft Open Technologies if they would implement ORTC as demo / validation of concept. Special thanks for Microsoft Open Technologies, Inc. for implementing demo / validation of concept. (and the refreshments!)

8 WebRTC Needs Mobile: SDKs enabling development of mobile apps protocol- compatible with WebRTC. Analytics. Diagnostics and monitoring for carrier scale operation. Cloud. Easy setup and management of WebRTC systems. – Tools. Enabling connection of WebRTC clients to legacy infrastructure (e.g. node.js) – APIs. Enabling management of STUN/TURN credentials, audio/video mixers, SIP proxies, XMPP connection managers, etc. Extensibility: Enabling addition of functionality beyond the core (e.g. mobile-friendly video codecs such as H.264/SVC)). A next generation JavaScript API compatible with the above.

9 What are ORTC potential uses? Browser code (simplified RTC control) Mobile development via “ortclib” SDK under development https://github.com/openpeer/ortclibhttps://github.com/openpeer/ortclib Server code via Node.js new services or legacy inter-op solutions – call to contribute under development https://github.com/openpeer/ortc-nodehttps://github.com/openpeer/ortc-node Open Source projects are under way!

10 Write ORTC apps using existing WebRTC 1.0 Browsers An WebRTC 1.0 “shim” will be made available to maintain backwards compatibility If you like the WebRTC 1.0 API, you can still use the 1.0 API!

11 WebRTC 1.0 (SDP) SDP / SIP (shim) 1.0 Strategy Node.JS Browsers Chrome / Firefox / etc ORTC (shim) Node.JS Web App Browsers (see demo) Browsers (see demo) ORTC 2.0 Future ? ORTC Migration Strategy Web App Mobile (ortclib) Mobile (ortclib) Mobile

12 Isn’t ORTC just CU-RTCWeb? No Both are object models but at different levels While CU-RTCWeb inspired ORTC, they are are different. Issues with CU-RTCWeb: -too powerful/difficult to use -exposing too much socket level control (i.e. security risks) -couldn’t shim CU-RTCWeb

13 Where will ORTC be supported by vendors? Support is via the shim over WebRTC 1.0 for now for browsers. Direct ORTC API source code is being developed. Microsoft Open Tech developed a shim plugin for IE (but not a product announcement).

14 openpeer/ortc GitHub Specification Repo https://github.com/openpeer/ortc Original home of the ORTC API discussion Spec discussion spun off to CG, OSS code for ORTC stays in GitHub Why do we need the GitHub repo? – Pull requests – discussed on public-orca mailing list

15 openpeer/ortclib GitHub Mobility Repo https://github.com/openpeer/ortclib ORTC mobile implementation Maintained by Hookflash Exposes C++ WebRTC library as an ORTC API To be wrapped in iOS, Java (for Android) and JavaScript hybrid

16 openpeer/ortc-node GitHub Node.JS Repo https://github.com/openpeer/ortc-node ORTC Node.JS implementation Call to action – seeking contributors – What should implementation look like? – What are native code integration points?

17 Will contributing to ortc break protocol compatibility with web browser? No Wire level compatibility is maintained Maintaining wire compatibility is a tenet of ORTC implementations with WebRTC enabled browsers* We encourage expansion of features, not removal of basic wire support. * as much as they are compatible with each other

18 Motivation for ORTC Design

19 Traditional Browser Rendering Engine Description Format (HTML/CSS) Description Format (HTML/CSS) Resource Render Engine Output JS

20 JS asks browser “Give me webpage that meets this criteria” 1 1 Modify browser provided HTML 3 3 Set HTML 4 4 Browser generates some HTML (gives to JavaScript) 2 2 This is not how we program HTML on the web…

21 WebRTC 1.0 Capture / Render Engine Description Format (SDP) Description Format (SDP) Resource Capture/Render Engine Input/Output JS Description Format (SDP) Description Format (SDP) Resource Capture/Render Engine Input/Output JS { Cloud }

22 ORTC Capture / Render Engine Capture/Render Engine Input/Output Capture/Render Engine Input/Output { Cloud } JS

23 ORTC Simple Use Case RTCConnection { cloud } Application Browser RTCConnection Application Browser RTP / DATA / DTLS / ICE signaling

24 Questions?

25 ORTC API

26 ORTC Simple Use Case RTCConnection { cloud } Application Browser RTCConnection Application Browser RTP / DATA / DTLS / ICE signaling

27 MediaStream MediaStreamTrack RTCTrack RTCStream ORTC - Object Relationships RTCConnection RTCConnectionOptions RTCConnectionInfo RTCIceConnectionInfo RTCDtlsConnectionInfo RTCIceCandidate RTCSocket RTCStream MediaStream RTCTrack MediaStreamTrack RTCIceCandidate local remote RTCConnectionInfo RTCIceConnectionInfo RTCDtlsConnectionInfo remote local

28 RTCConnection [Constructor(RTCConnectionOptions options)] interface RTCConnection : EventTarget { readonly attribute RTCSocket socket; readonly attribute RTCConnectionState state; attribute RTCConnectionRole role; readonly attribute RTCConnectionInfo local; attribute RTCConnectionInfo remote; void addRemoteCandidate(RTCCandidateDescription candidate); void connect(); void gather(); (RTCSTream? or RTCTrack?) send((MediaStream or MediaStreamTrack or RTCTrack or RTCStream) streamOrTrack); (RTCStream? or RTCTrack?) receive((RTCStream or RTCTrack) streamOrTrack); sequence sendStreams(); sequence sendTracks(); sequence receiveStreams(); sequence receiveTracks(); void close (); attribute EventHandler oncandidate; attribute EventHandler onendofcandidates; attribute EventHandler onactivecandidate; attribute EventHandler onstatechanged; attribute EventHandler onnetworkchange; attribute EventHandler onunknowntrack; };

29 RTCConnection (p1) -RTCSocket (attached to one network socket) -States -“new” – connection not started -“searching” – searching for connectivity -“halted” – no connectivity found -“connected” – found connectivity (ready) -“closed” – connection is finished (one-time-use)

30 RTCConnection (p2) -role (“controlling” vs “controlled”) -Local and remote information -ICE credentials (usernameFrag / password) -DTLS fingerprint (generated or discovered) -ICE Candidates – local and remote (for connectivity checks)

31 RTCConnection (p3) -Gathers local ICE candidates -Performs ICE connectivity checks -Causes sending / receiving of media tracks RTP data over the “nominated” ICE connection

32 RTCConnection (p4) RTCStreams and RTCTracks (sending or receiving) -Contains mapping of on-the-wire RTC/RTP/RTCP/etc information to media streams / media stream tracks) -Contains respective “MediaStream” or “MediaStreamTrack” objects.

33 RTCConnection “connect” Set remote “RTCIceConnectionInfo” ICE “usernameFrag” and “password” Call “connect” to cause candidate search Will causes state changes from “new”, “searching”, “haulted”, “connected”

34 RTCConnection “gather” Find new candidates - Restarts network topology ICE candidate gathering Does not affect connection state by itself Start gathering candidates before “connect”

35 RTCConnection “send” Send “MediaStream”, “MediaStreamTrack”, “RTCStream”, “RTCTrack” Convenience to auto-map “MediaStream” and “MediaStreamTrack” into RTP layer constructs Manipulate RTP mapping by first creating “RTPStream” / “RTCTrack” from “MediaStream” and “MediaStreamTrack”

36 RTCConnection “receive” Send “RTCStream”, “RTCTrack” Setup mapping for “MediaStream” and “MediaStreamTrack” for RTP layer constructs Manipulate mapping by constructing “RTPStream” / “RTCTrack” objects

37 RTCConnection “close” Shuts down RTCConnection object Object goes to “closed” state

38 RTCConnection events oncandidateFires for local candidate (can be cancelled) onendofcandidatesFires when all local candidates are discovered onactivecandidateFires when local:remote candidate connection changes onstatechangedFires as connection state changes onnetworkchangeFires when network topology change has been detected (auto “gather” called but can be cancelled) onunknowntrackFires when track discovered which has no mapping

39 RTCSocket interface RTCSocket { };

40 RTCSocket -No exposed attributes, members or events -Represents one physical local socket (as well as virtualized paired firewall/relay socket) -Re-use the same RTCSocket in another RTCConnection to send over same physical local socket

41 RTCStream [Constructor, Constructor(MediaStream)] interface RTCTrack { attribute MediaStream source; attribute DOMString msid; sequence tracks(); void start(); void stop(); void remove(); };

42 RTCStream -References single MediaStream -Collection of RTCTracks -Change collection then call RTCConnection “send”/”receive” again -Simplifies MediaStream usage in RTCConnection -Convenience “start” / “stop” methods -“remove” method to remove from RTCConnection

43 RTCTrack [Constructor, Constructor(MediaStreamTrack)] interface RTCTrack { attribute MediaStreamTrack source; attribute DOMString id; attribute DOMString kind; attribute unsigned long ssrc; attribute sequence codecs; attribute sequence mediaAttributes; attribute Object rtpExtHeaders; void start(); void stop(); void remove(); };

44 RTCTrack -References single MediaStreamTrack -Mapping of RTP/RTCP/etc wire information such as: -ssrc -codecs -media attributes (e.g. max width / height) -Change properties then call RTCConnection “send” / “receive” again -Convenience “start” / “stop” methods -“remove” method to remove from RTCConnection

45 RTCConnectionInfo dictionary RTCConnectionInfo { attribute RTCIceConnectionInfo ice; readonly attribute RTCDtlsConnectionInfo dtls; }; RTCIceConnectionInfo RTCDtlsConnectionInfo / CertificateFingerprint dictionary RTCIceConnectionInfo { DOMString usernameFrag; DOMString password; }; dictionary RTCDtlsConnectionInfo { attribute CertificateFingerprint fingerprint; }; dictionary CertificateFingerprint { getter ArrayBuffer (DOMString hashFunction); };

46 RTCIceCandidateInfo dictionary RTCIceCandidateInfo { DOMString foundation; int component; DOMString transport; int priority; DOMString connectionAddress; int connectionPort; DOMString type; DOMString relAddress; int relPort; };

47 Object Realtime Communications API (ORTC) Next generation WebRTC API, under development in the W3C ORCA community group: – – Rationale: webrtc-js-obj-api-rationalehttp://tools.ietf.org/html/draft-raymond-rtcweb- webrtc-js-obj-api-rationale Specification: – Github repository: – ORTC API drafts and shim: https://github.com/openpeer/ortchttps://github.com/openpeer/ortc – ortclib: https://github.com/openpeer/ortclibhttps://github.com/openpeer/ortclib – Demos: https://github.com/openpeer/webrtc-demohttps://github.com/openpeer/webrtc-demo

48 To Learn More ORCA Community Group: Demo and discussion tomorrow to follow…


Download ppt "ORTC Walk Through IETF 88 Robin Raymond, Hookflash Bernard Aboba, Microsoft Adalberto Foresti, Microsoft Open Technologies, Inc. ORCA – Object-RTC API."

Similar presentations


Ads by Google