Awesome
rtc-everywhere
<img src="https://i.imgur.com/xDnqJCo.gif" align="center"/>What is this?
Sick of the incompatible mess of vendor prefixes, adapters, plugins, extensions, and native modules? rtc-everywhere aims to provide a spec-compliant WebRTC implementation in as many environments as possible.
Supported Environments
:computer: Desktop
- Chrome
- Firefox
- MS Edge [Partial]
- No data channels
- Safari 7+
- Requires Temasys Plugin
- Internet Explorer 9+ [In Progress]
- Requires Temasys Plugin
:iphone: Mobile
- Android 5+
- Cordova iOS
- Requires install of
cordova-iosrtc
- Requires install of
- Cordova Android
- Requires install of
cordova-crosswalk
- Requires install of
- react-native iOS/Android [In Progress]
- Requires install of
react-native-webrtc
- Requires install of
Other
- Node.js 0.10+
- Requires install of
wrtc
- Only works on x64 Linux, Mac, and Windows
- MediaStream APIs are not supported at this time
- See wrtc for more info.
- Requires install of
Getting Started
npm install rtc-everywhere --save
var rtc = require('rtc-everywhere')();
// Available:
// rtc.RTCPeerConnection
// rtc.RTCIceCandidate
// rtc.RTCSessionDescription
// rtc.getUserMedia
// rtc.attachStream(stream, videoElement)
:crystal_ball: Want a more detailed example that uses these functions? Check out the loopback stream example!
API
RTCPeerConnection
Exactly the same as the specification. See the Specification Documentation!
RTCIceCandidate
Exactly the same as the specification. See the Specification Documentation!
RTCSessionDescription
Exactly the same as the specification. See the Specification Documentation!
getUserMedia(constraints, cb)
Similar to the specification, but slightly adjusted to have an easier API.
Modifications
-
constraints
is optional (makes things easier)- Defaults to
{video: true, audio: true}
- Defaults to
-
cb
is a node-style error first callback
// these are the same thing
rtc.getUserMedia(function(err, stream){});
rtc.getUserMedia({video: true, audio: true}, function(err, stream){});
attachStream(stream, element)
- Attaches a stream to a given video element
- Returns the element the video was attached to
- In IE and Safari, the video element will be replaced by an
object
element- Elements will not be replaced or modified unless they exist on the DOM
- Regardless of replacement, the new
object
element will be returned