Object RTC (ORTC) is a free, open project that enables mobile endpoints to talk to servers and web browsers with Real-Time Communications (RTC) capabilities via native and simple Javascript APIs. The Object RTC components are being optimized to best serve this purpose.
Our mission: To enable rich, high quality, RTC applications to be developed in mobile endpoints and servers via native toolkits, simple Javascript APIs and HTML5. It is also a mandate that Object RTC be compatible with WebRTC.
The Object RTC initiative is a project supported by Hookflash, Microsoft, Google and others. This page is maintained by the Hookflash team.
The ORTC C++ Library is a project sponsored by Hookflash. To sponsor ORTC Lib projects send an email to sponsor@ortc.org
2. ORTC Lib - Introduction
What is ORTC Lib?
A C++ library and mobile wrappers based on ORTC (Object
Real-time Communication) API Public Draft.
API Public Draft: http://ortc.org (upper right hand side)
Codebase: https://github.com/openpeer/ortc-lib
1
3. ORTC - Other related projects
Other ORTC projects dependent on ORTC Lib:
Open Peer: P2P communications project
http://openpeer.org
ORTC Node: Node.js implementation (will require ORTC Lib server hardening)
https://github.com/openpeer/ortc-node
Other related proposed projects:
JavaScript Shims
● Upshim (WebRTC 1.0 ORTC)
● Downshim (ORTC WebRTC 1.0)
4. ORTC Project Maintainer
Who are the maintainers?
Hookflash Inc. is the primary sponsor of the ORTC Open Source projects.
This Canadian company, made up industry veterans, offers a PaaS for Real-time
Communications. Hookflash is also the creator and custodian of Open
Peer, an Open Source project for P2P communications.
More on Hookflash: http://hookflash.com
5. ORTC Lib - Introduction
What can it be used for?
Enabling real-time communications (Voice, Video, Data Channel) for mobile and web via C++ &
JavaScript libraries. The JS libs are out of scope for this project.
What are the goals?
The primary goal is to build an open source ORTC client reference implementation that will support all
of the ORTC API objects, methods & attributes, using WebRTC open source components for
maximum interoperability.
Platforms:
Under development: C++, iOS, Android
Under consideration: Mac, Windows, Windows Phone
6. ORTC Lib - Value Statement
Why should I use ORTC Lib?
The libs have been built to the ORTC spec as it has
evolved. This is the open source ORTC C++ library that is
maintained by the specification founders, editors and
authors.
7. ORTC Lib - Chrome Dependencies
A word about Chrome Dependencies
The maintainers wanted to provide an implementation of ORTC providing
maximum flexibility for developers.
Signaling: As signaling on the wire is not defined as part of WebRTC 1.0, the
the maintainers removed all “on the wire” signalling from the library, (e.g. SDP
offer/answer and Libjingle).
ORTC is a WebRTC wire compatible "do as I say" API, that allows the
developer to provide their own signalling in Javascript. As a result, a built-in
SDP parser is not needed and the PeerConnection ICE implementation was
replaced with a custom ICE implementation.
8. ORTC Lib - Chrome Compatibility
Is ORTC Lib compatible with Chrome?
Yes, it is interoperable with Chrome “on the wire” protocols.
ORTC Lib uses Chrome's WebRTC real-time communication engine internally,
minus the library formerly known as “Libjingle” (XMPP/Peer Connection, ICE
and TURN). Thus RTP, SRTP, and codecs are all compatible, as they are
common to Chrome.
9. ORTC Lib - License
What is the license model?
ORTC Lib is utilizes the FreeBSD open source model
(see slide 21 for details).
10. ORTC Lib - Coverage
Is it compatible with the ORTC Public Draft?
Not yet.
The public draft specification was completed and released
on Aug. 20, 2014. As a result, the codebase has not yet
achieved parity with the ORTC API Public Draft.
11. ORTC Lib - Work Completed
● Removed Chrome dependencies:
○ WebRTC renderer
○ JSEP/SDP
○ PeerConnection
○ Libjingle
● Codecs
○ VP8 Support (Non SVC)
○ ISAC Support
○ Opus Support
● Security
○ OpenSSL
● NAT Traversal
○ Custom ICE/STUN/TURN implementation
(RFC Standard)
○ IPv6
○ Extended support for Trickle ICE
○ Extended support for Continuous
Gathering Mode
○ Multiple Network Interfaces (multi-homed)
○ ICE Consent Freshness
● DNS
○ IDN (Internationalized Domain Names)
○ SRV
○ A / AAAA
● Mobile
○ Reduced energy consumption
○ Application Backgrounding
○ Reduced footprint
● Assembly optimizations
○ YUV conversion
○ ...and too much more to list here
● Media
○ RTP / RTCP Multiplexing
○ A/V Multiplexing
○ Enhanced audio routing
○ Video rotation control
○ Facial recognition (iOS)
● Logging
○ Remote
○ Local
● Bug fixes
12. ORTC Lib - Outstanding Work Items
What’s left to do?
● General “tidying up” of the codebase.
● RTCRTPSender / Receiver (+ support for "encoding params")
● RTCDtlsTransport
○ DTLS demux
○ DTLS/SRTP key management
● Data Channel (e.g. SCTP/DTLS/UDP, proprietary RTP data channel, etc.)
● ICE
○ Wrappers for ICE Listener/ICE Transport
○ Support for "continuous" gather vs "complete" mode
○ ICE Transport controller (bandwidth and ICE freezing)
○ Custom gathering options (for mobility)
● Media
○ MediaStreamTrack
○ Advanced VP8 - temporal scalability and simulcast
○ H.264 support - RFC 6184 RTP payload transport
● DTMF Sender
● Stats
● IdP
13. ORTC Lib - H.264 Work Plan
The goal is to support the RFC 6184 RTP payload format based on the existing
Chromium patch and Cisco’s Open H.264 encoder/decoder.
However, the Open H.264 source will NOT be pulled into the codebase (though
the build process will support compiling it, if desired).
Initial goal is to support Constrained Baseline Profile, and to interoperate with
with Mozilla Firefox.
H.264/SVC (e.g. temporal scalability) and the RFC 6190 RTP payload format
will not be supported initially.
14. ORTC Lib - Extending
Should I contribute or fork?
We encourage contributions & extensions to this library versus forking. By
potentially creating multiple incompatible implementations of the ORTC API,
forking could cause confusion among developers as well as in the market,
adversely impacting the viability of the ORTC initiative. Once forked, recreating
a unified code base will be time consuming and difficult.
15. ORTC Lib - Standards Compliance
How will standards compliance be handled?
The implementers of ORTC Lib intend to produce an implementation faithful to
the WebRTC protocol specifications as well as the ORTC API specification. In
order to keep the ORTC toolset close to the intent of the specifications, issues
discovered will be brought back to the IETF RTCWEB WG and ORTC CG for
discussion and resolution.
The ORTC API is designed to support all features of the WebRTC 1.0 API as
well as to be backward-compatible with the WebRTC 1.0 API via “shims”.
16. ORTC Lib - Contributing
How do I contribute?
Want to help? Excellent!
Send an email to contribute@ortc.org with your
ideas and we will respond with next steps.
17. ORTC Lib - Sponsoring
How do I sponsor work?
If you would like to contract the maintainers to do work that
would be contributed back to the open source project under
BSD license, please email your project ideas to
sponsor@ortc.org
18. ORTC Lib - Thanks
This Open Source work would not have been possible without valuable
contributions from the community. The maintainers would like to thank those who
contributed for their effort.
Google Inc.
- WebRTC contributions
Microsoft Open Tech Inc. & Microsoft Inc.
- Demo and Node.js contributions
19. ORTC Lib - Links
Codebase: https://github.com/openpeer/ortc-lib
Dev Forum: https://groups.google.com/a/ortc.org/forum/#!forum/discuss-ortc
W3C CG: http://www.w3.org/community/ortc/
Current API Specification: http://ortc.org/
Contribute: contribute@ortc.org
Sponsor: sponsor@ortc.org
21. ORTC Lib - License Details
License:
Copyright (c) 2014, Hookflash Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of the FreeBSD Project.
23. ORTC Lib - Chrome Sync Policy
Chrome Code Syncing
While ORTC Lib uses Chromium's WebRTC engine, a fork of the WebRTC
engine was performed. Updates from Chromium are synchronized periodically
(and delta changes from Chromium are re-applied).
Pull requests are not performed back to Chromium simply due to the amount of
manual labour that is required to perform such duties.