The Temasys Plugins bring support for webRTC to Desktop versions of Safari and IE. There is no solution to provide support for iOS versions of browsers at this stage. We are separately working on bringing webRTC support to iOS, with no timeline right now. Interested parties can contact us separately for details.
The Temasys WebRTC plugin implements the WebRTC spec as closely as possible. It implements the latest published draft, not working draft, and in case of ambiguity, will always align its behavior with the latest stable version of chrome and firefox.
It should work with existing code with only minor changes to the site. However for a site to take advantage installing the plugin on the target computer is not enough. We provide a modified version of adapter.js, an helper file originally provided by google and mozilla to help interaction between browsers, to illustrate what needs to be done.
We also provide a set of tests and demos, modified version of those provided by webrtc.org to support our plugin, as a way for you to test if the plugin installation was successful. Error should due reported against those tests whenever possible to provide us with a way to reproduce the problems.
I installed the plugin, now what?
You can try it on one of our public demos:
GetARoom.io: A fully integrated WebRTC client. It lets you communicate with up to 3 people.
Plugin.Temasys.com.sg: A series of tests first provided by google that were made plugin aware.
Do you have a technical issue with the plugin? Do you have a feature request?
Let us know in our plugin discussion group. https://groups.google.com/forum/#!forum/temasys-discuss-webrtcplugin
Do you have a commercial request? Do you want more support, to rebrand, redistribute, or embed the plugin? Do you have a feature request beyond the webRTC existing webRTC specs?
Commercial request should be sent instead to sales (a) temasys.com.sg
Like it or not, IE still matters
You can ignore reality, or you can reach more users. You can do it yourself but that’s also hard. We make it easy, so let us help!
Customize and make it your own
Add your logos to our installer, or embed the plugin in your own installer package. Add support for screensharing, or non-spec codecs. Get priority access to support and integration assistance.
|Feature||Free Plugin||Commercial Plugin|
|Full WebRTC specifications support for Internet Explorer & Safari||YES||YES|
|Regularly scheduled updates||YES||YES|
|Custom branded plugin binary||YES|
|Control over auto-update||YES|
|Control over the distribution of binary/installer||YES|
|Plugin binary audited / certified by 3rd party||YES|
|Plugin binary and/or installer signing||YES|
|Code Escrow (3rd party charges apply)||YES|
|Embed plugin binary in custom installer / user flow||YES|
|H.264 (3rd party charges apply)||YES|
|Support for integration & ongoing issue resolution||SLA|
|Win7 IE9||Win7 IE10||Win 7 IE 11||Win 8.1 IE 11||Win7 Safari||Win8.1 Safari||OSX 10.9 |
|OSX 10.10 |
|Stream Rendering||OK||OK||OK||OK||Size issues||Size issues||OK||OK|
|DataChannel||Strings only||Strings, Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array|
|Multi-Tab||One camera can only be used by ONE tab at the time||OK||OK|
|Temasys Backend||OK||OK||OK||OK||Size issues||Size issues||OK||OK|
Features introduced by the version 0.8.850 — July 13 2015
- Correction of a crash happening about 1/2 times when an update is available
- Correction of a crash when GUM is called before the tab is focused on (Windows only)
- Correction of a deadlock in the log system
Features introduced by the version 0.8.849 — July 8 2015
- Added support for MediaStream::getTracks API
- Added support for PeerConnection::removeStream
- Added support for PeerConnection::onremovestream
- Refactored the PeerConnection event system. The event arguments are now more "event-like". New attributes are:
- Added screen-sharing feature for the following domain names:
- The screen-sharing is only activated on HTTPS URLs
- Added interface [AdapterJS.WebRTCPlugin.]plugin.HasScreensharingFeature : true if the screen-sharing is embedded on this version; false otherwise
- Added interface [AdapterJS.WebRTCPlugin.]plugin.isScreensharingAvailable : true if the screen-sharing is usable on this website; false otherwise
- Added interface [AdapterJS.WebRTCPlugin.]plugin.screensharingKey : A string to use as sourceId to use to request a screen-sharing stream
- Fixed a camera input selection bug (overriding the default selection had no effect)
- Fixed a few deadlocks in the management of the camera
- Fixed video stretching issue when non natively supported resolution was requested
- PeerConnection::setLocalDescription can now take PeerConnection::localDescription as an argument (used to require a JS made dictionary)
- Instability correction when several plugin with the same id are present at once (issue present when using react on Safari)
- Mac version now build in 64 bits only. Windows is still built in 32 bits.
- The camera capturers on Mac are now based on AVFoundation
CPU consumption improvement
- Support of HiDPI quality for the permission popups
- Corrected upper-case issue in the auto-update popup ("update" corrected to "Update")
- New graphics for the Windows installer
22 April , 2015
- New version of the plugin: 0.8.836.
- MediaStream::addTrack is now available
- When a stream rendering is stopped, the plugin element keep displaying the latest image - fixed, the element becomes black
- The permission popup to access to camera and microphone sometimes appear blank - fixed
- Encoding problem in the choices of the permission popup - fixed
New version of the Adapter: 0.10.6
- AdapterJS can now be dropped in EasyRTC and will enable its use on IE and Safari
- On Safari, the popup authorising the use of the plugin will appear on the top of the screen. You no longer have to click on the plugin object
- You can now call attachMediaStream(element, null) to remove a stream from a rendering element
3 Feb, 2015
- New version of the plugin: 0.8.826.
- Correction of a freeze in certain cases of stoping a stream
- Correction of a crash on IE when stoping a stream onbeforeunload a page
- Correction of a crash when no devices are available
- Devices are fetched on the fly, letting devices be plugged while the plugin is in use
- STUN and TURN server can now have url either as strings, or array of strings (see spec)
- videoWidth and videoHeight are not also accessible on Windows
- ownerDocument is now accessible from a plugin object
- The user can ask to check again for a new plugin version using plugin.checkForUpdate
- The user can ask to access the plugin latest version link using plugin.downloadLink (read only)
- Stability improvement
New version of the Adapter: 0.10.4
- The WebRTC API can either be used once AdapterJS.onwebrtcready was called, or immediately on pageload (CPU intensive, see here)
- Added a function to set the plugin log level from the adapter: AdapterJS.WebRTCPlugin.setLogLevel
19 Dec, 2014
- New version of the plugin: 0.8.810.
- Enabled interpolation for the rendering on Mac (when relevant)
- Added attributes videoWidth and videoHeight to the plugin element, equivalent to videoTrackWidth and videoTrackHeight.
This is to match the <video> tag standard API
- Denying access would sometimes not trigger the failure callback
- Global stability improvements, mainly on Mac
New version of the Adapter: 0.10.0
- Stability improvements
- Merge with changes from Google's version of the adapter
- Refactored namespacing
09 Oct, 2014
- Interim release of the plugin with a few optimisation and maintenance fixes
03 Oct, 2014
- Global improvement of stability, mainly on version of Internet Explorer prior to 11
- New version of the adapter 0.9.2
- The adapter can now be safely injected in the header (previously forced into the body)
- Corrects error on IE (all version) of GetUserMedia input selection box not being prompted
- Better state reporting through Temasys.WebRTCPlugin.pluginState, reference in Temasys.WebRTCPlugin.PLUGIN_STATES
03 Sept, 2014
Adapter.js, version 0.9.0
namespacing of the plugin, the webrtc interface stays the same, you dont' need to change your code
All Temasys related code is located in
All plugin related code is located in
- You should now access the plugin through Temasys.WebRTCPlugin.TemRTCPlugin
- Two different injection strategies for IE 9 (or less) and any other browser
- new popup offering to install the plugin
- WebRTCReadyCb is deprecated, you should remove it from you code. You may now call any webrtc function at any time.
Please note that you don't HAVE to upgrade your version of the adapter to upgrade your plugin. However, this new version bring a number of improvements, and we really think you should .
Please note that our examples are using the latest version of the adapter.
- New auto-update popup (same style as for the plugin install popup)
PeerConnection::onicecandidate argument is now a RTCIceCandidate object instead of a simple dictionary
For the DataChannel to be able to send non-string element, the variable Temasys.WebRTCPlugin.TemRTCPlugin needs to be one access to the plugin
You must define Temasys.WebRTCPlugin.TemRTCPlugin as a variable, not a function, although typeof Temasys.WebRTCPlugin.TemRTCPlugin might return function
If you're using the adapter, this is already taken care of.
This declaration no longer needs to be part of your code
- Added functions play() and pause() to the rendering elements.
- Added onplaying callback the the rendering elements.
- Stability improvement, mainly on IE 9
12 Aug, 2014
- Correction of important stability issues on IE when closing tabs
- PeerConnection::addStream now takes a optional second argument that is always ignored. This is to ensure compatibility with websites using previous version of WebRTC
The latest spec takes only one argument (the stream itself).
1 Aug, 2014
- Correction of a bug happening when the plugin was launched with incorrect JS naming. The naming doesn't matter anymore
- Correction of a bug generated when a plugin is created without any param given. The plugin functionalities won't be activated, but it won't crash.
17 July, 2014
- New permission popup letting the user chose which devices (s)he wishes to grant access to. Default values are set according to the constraints provided to GUM
- plugin().setLogFunction is now deprecated; You no longer need to set the plugin log function from JS, it will automatically use console.log
- plugin().setPluginId is now deprecated; The plugin uses the id provided as parameter
- The adapter.js function TemInitPlugin0 is now deprecated
This declaration MUST be part of your code (if you're using our extension of adapter.js, this is already taken care of)
- The DataChannel can send the following types:
See New DataChannel implementation details for more details
A new parameter is needed for the <object> plugin element:
Adding the parameter
to the plugin element will enable the listing of all devices referenced on your computer (including unplugged devices, virtual devices, and so on)
See How to enable virtual devices for more details.
MediaStream.stop() now triggers MediaStream.onended
- Stability improvements
18 June, 2014
- The devices are only fetched and activated when needed an released as soon as possible
- Huge improvements regarding memory release (mainly on Windows)
- MediaStream::stop was implemented
- PeerConnection::close was implemented
- PeerConnection::onstatechange was renamed onsignalingstatechange according to the specs
- PeerConnection::oneicechange was renamed oniceconnectionstatechange according to the specs
- Added a cache breaker to prevent Safari caching the plugin's latest version number (preventing auto-update)
- PeerConnection ICEServer config can now take a sequence of ICESevers urls as well as a unique one for the same bloc of credentials
06 June, 2014
- A NULL ICECandidate is sent once the ICEGathering is done
- The data channel can be used to send strings - see here for an example
- The function PeerConnection.getStats was implemented - see here for an example
- The plugin can be set into verbose mode for debugging purposes - see How to use the plugin in "verbose" mode (logging)
- The auto update function will now give you a direct download link
- Stability improvements, mainly on Internet Explorer
23 May, 2014
- Authorisation to use the camera/mic is asked before starting it (in GUM)
- When lunched the plugin sends a request asking for the latest version number and prompts a message if a newer version is available
12 May, 2014
- w3c webRTC specs
- IETF RTCWEB specs
- Overview: Real Time Protocols for Browser-based Applications (draft-ietf-rtcweb-overview-11)
- Application Layer Protocol Negotiation for Web Real-Time Communications (WebRTC) (draft-ietf-rtcweb-alpn-00)
- IANA Registry for RTCWeb Constrainable Properties (draft-ietf-rtcweb-constraints-registry-00)
- WebRTC Data Channels (draft-ietf-rtcweb-data-channel-11)
- WebRTC Data Channel Establishment Protocol (draft-ietf-rtcweb-data-protocol-07)
- Web Real-Time Communication (WebRTC): Media Transport and Use of RTP (draft-ietf-rtcweb-rtp-usage-17)
- Security Considerations for WebRTC (draft-ietf-rtcweb-security-07)
- WebRTC Security Architecture (draft-ietf-rtcweb-security-arch-10)
- STUN Usage for Consent Freshness (draft-ietf-rtcweb-stun-consent-freshness-06)
- Transports for WebRTC (draft-ietf-rtcweb-transports-06)
- WebRTC Video Processing and Codec Requirements (draft-ietf-rtcweb-video-00)
- IETF other specs
- Plugin Specifics
- Replaces an <audio>/<video> element and "renders" a stream.
- Re-attaching a stream
- Enabling/Disabling the capture from your camera
- Enabling/Disabling the capture from your microphone
- Click on a plugin instance (triggers element.onclick with the plugin element as arg.srcElement)
- Verbose/debug mode
- DataChannel for float arrayBuffers
- DataChannel for BLOBs
- Persistent permissions over HTTPS for GUM
- Drag and Drop of plugin elements
- Context Menu (Right Click)
- More <audio> and <video> support
- Displaying at size larger than stream resolution
Not ready or not planned for implementation yet, but of interest
- Media Recording - (here) (working draft only, no editor draft available yet, i.e. not stable enough yet)
- Image Capture - (here) (working draft only, no editor draft available yet, i.e. not stable enough yet)
- Screen Sharing - (here) (unofficial draft, should have content by Nov 2014).
- A rendering will sometimes go empty (white screen); Removing the element and injecting it again will solve the problem
- If you microphone was disabled and you enable/disable the video camera, then your mic will be turned back on