Skip to end of metadata
Go to start of metadata

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 do however provide support for iOS and Android native apps. Visit Skylink.io for more information.

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, a helper file originally provided by Google and Mozilla to help interaction between browsers.

Safari 10 support

If you are have an issue with the plugin not starting on Safari 10, please upgrade your dependencies on

  • AdapterJS, to 0.13.4+
  • SkylinkJS, to 0.6.15+

Downloads (v0.8.876)

You can download the plugin installers here:

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.

https://plugin.temasys.io/demo/ – 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 customer support portal : http://support.temasys.io or discussion forums http://support.temasys.io/support/discussions/12000000012

Our plugin discussion group (discontinued) also has a wealth of information: 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 to sales@temasys.io

Like it or not, IE still matters

Like it or not, IE still matters Forrester says workplace browser diversity is robust: IE at 40%, Chrome at 28%, Firefox at 25% share.
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 screen-sharing, or non-spec codecs. Get priority access to support and integration assistance. 

Feature Comparison 

FeatureFree PluginCommercial Plugin
Full WebRTC specifications support for Internet Explorer & SafariYESYES
Regularly scheduled updatesYESYES
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
Screen Sharing YES
Code Escrow (3rd party charges apply) YES
Embed plugin binary in custom installer / user flow YES
HTTP Proxy YES
H.264 (3rd party charges apply) YES
Support for integration & ongoing issue resolutionEmailSLA

Compatibility Matrix

 Win7 IE9Win7 IE10Win 7 IE 11Win 8.1 IE 11Win 10 IE 11OS X 10.9 or above
Safari 7.0 or above
Components
GetUserMediaOKOKOKOKOKOK
MediaStreamOKOKOKOKOKOK
PeerConnectionOKOKOKOKOKOK
IceServersOKOKOKOKOKOK
SessionDescriptionOKOKOKOKOKOK
DTMFSenderOKOKOKOKOKOK
Stream RenderingOKOKOKOKOKOK
DataChannelStrings onlyStrings, Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array 
Options
Multi-TabOne camera can only be used by ONE track at the time OK
Verbose modeOKOKOKOKOKOK
Applications
AppRTCOKOKOKOKOKOK
Temasys SkylinkOKOKOKOKOKOK

 

Features introduced by the version 0.8.876 —  

  • [ENH] The free plugin is now code-signed with a Temasys certificate
    On Mac, we use a Dev Id Cert Installer to prevent the gate keeper from blocking the install.
  • [ENH] MediaStreamTracks now have human readable label. 
    They reflect the camera, microphone or screen captured.
  • [ENH] Screensharing now supports 'max-width' and 'max-height' from video constraints.
    Frames will be resized to fit in the max value constraints, respecting ratio.
  • [BugFix] Fixed a crash when a shared window was closed

 

 Features introduced by the version 0.8.874

June 27, 2016

  • [BUGFIX] Fixed crash when sending getUserMediaConstraints with value 'null' or 'undefined'
  • [BUGFIX] Fixed crash regression when closing a of PeerConnection sending a screensharing stream
  • [BUGFIX] Fixed problem of AudioTrack failing to mute when track is 'disabled'
  • [BUGFIX] Fixed crash when sending credentials with value 'null' or 'undefined' to PeerConnection
  • [BUGFIX] Fixed frames being dropped forever when doing screensharing with a screen that doesn't move (cursor non included, Windows only)

  • [ENH] MacOS now uses a pkg installer

 Features introduced by the version 0.8.870

Apr 27, 2016

  • [BUGFIX] plugin.setStreamId used to re-enable the stream's audio track
  • [BUGFIX] Fixed connection issue with Chrome M50 due to bad sip answer from the plugin
  • [ENH] hasCredentials is no longer required in the iceServer definition
  • [ENH] gUM supports new fashion constraints (old fashion constraints are still supported) 
    New constraints look like 

    {
    	"audio": true,
    	"video": {
    		"width":  { "min": "300", "max": "640" },
    		"height": { "min": "200", "max": "480" }
    	}
    }
 Features introduced by the version 0.8.869

March 28, 2016

  • [ENH] Added support for plugin.getFrame (see Drawing into a Canvas - drawImage() for help)
  • [ENH] Added support for MediaStreamTrack.remote
  • [ENH] MediaStream.onended can now be set with addEventHandler/attachEvent
  • [ENH] RTCPeerConnection now support the current spec's constructor
    The previous constructor is still supported to ensure retro-compatibility.
  • [ENH] Added support for RTCOfferOptions for PC::createOffer (https://www.w3.org/TR/webrtc/#widl-RTCPeerConnection-createOffer-Promise-RTCSessionDescription--RTCOfferOptions-options).
    When the contraints have either any mandatory/optional members, the old scheme is used. When they are not, the new scheme is used. 
  • [ENH] Important DataChannel refactor
    • Better Management of ArrayBuffer
    • Removed multiple deadlocks
    • More descriptive event callback arguments for onopen, onclose, and onmessage
    • onopen, onclose, and onmessage can now be set with addEventHandler/attachEvent
    • Removed dependency on Javascript code injection
  • [ENH] Fixed memory leaks
  • [BUGFIX] Fixed connection failure with Chrome M50
  • [BUGFIX] Fixed crash on DTMF deletion
  • [BUGFIX] Fixed crash on MediaStream.stop()
  • [BUGFIX] Fixed freeze on MediaStream.stop() with screensharing streams
  • [BUGFIX] Fixed a bug preventing the camera/microphone from being released when sent via a PeerConnection 
  • [BUGFIX] Fixed seldom crash on PeerConnection.getStats();
 Features introduced by the version 0.8.866

Jan 28, 2016

  • [ENH] Improved the crash reporter
 Features introduced by the version 0.8.865

Jan 25, 2016

 Features introduced by the version 0.8.863

Dec 11, 2015

  • [BUGFIX] Fixed a bug preventing the plugin version 0.8.862 from starting.
 Features introduced by the version 0.8.862

Nov 19, 2015

  • [ENH] MediaStreamTrack.stop implemented
  • [ENH] MediaStream::enableSoundTrack is deprecated.
    It will now log a warning and have no effect.
  • [ENH] The log system now logs in a file. This significantly increases performances when logs are activated.
    See our documentation for information about how to use this new system. 
  • [BUGFIX] Fixed several crashes against Firefox 42. The crashes would happen on disconnection, and renegotiation, and getStats.
  • [BUGFIX] Fixed crashes when trying to access MediaStreamTrack information after MediaStream.stop() was called.
 Features introduced by the version 0.8.861

Oct 26, 2015

  • [BUGFIX] Fixed issue with plugin initialization on some Mac OS X 10.9 (Mavericks) configurations
  • [BUGFIX] Calling localStream.stop() and attachSteam(video, localStream2) would result in a disabled renderer.
 Features introduced by the version 0.8.859

 Oct 19, 2015

Plugin enhancements:

  • [ENH] <object>.clientWidth implemented

  • [ENH] <object>.clientHeight implemented

  • [ENH] <object>.onloadedmetadata implemented

  • [ENH] <object>.onplay called with an event-like argument (type, srcElement, target, currentTarget, timestamp)

  • [ENH] <object>.onplaying called with an event-like argument (type, srcElement, target, currentTarget, timestamp)

  • [ENH] Screensharing now captures the mouse pointer

  • [ENH] The plugin prevents the computer from going to sleep when a MediaStream is being rendered

  • [ENH] Memory leak fixed in GetUserMedia

  • [ENH] Memory leak fixed in DataChannel

Plugin bug fixes:

  • [BUGFIX] Fix connection failure with Chrome 46+ ("SessionDescription is NULL" on setRemoteStream)

  • [BUGFIX] <object>/hadAttribute is now available, letting Safari 9 display the plugin object properly in the JS console.

  • [BUGFIX] gUM with permission popup would result in a plugin crash when audio/video is required but no devices were available

  • [BUGFIX] Correction of a crash on RTCPeerConnection::addIceCandidate(null)

  • [BUGFIX][Windows only]The screensharing popup now uses UTF-16 to display the windows names (used to be UTF-8, leading to incorrect non-western characters)
    The plugin will now trigger the failure callback (if any provided) before even showing the popup.

  • [BUGFIX][Mac only] Fixed an important memory leak that would sometimes result in the plugin being terminated by the browser (or OS?)

  • [BUGFIX][Commercial only] The plugin renderers would not respond to their API (play, pause, etc)

This version works best with AdapterJS version 12.2:

    • [ENH] Automatic forwarding of all events to the plugin
    • [Bugfix] Corrected plugin renderer size (not always properly copied so far)
 Features introduced by the version 0.8.854

21 August, 2015

  • New version of AdapterJS (0.12.0)
    • [ENH] Added Edge support (only GUM is implemented)
    • [ENH] Replacing audio tags as well as video tags when using the plugin. This fixes issue with the sound not being rendered when playing in audio tags.
    • [ENH] Added a new param to the plugin tags indicating what kind of HTML tag was replaced (audio/video)
    • [BugFix] Fixed the onclick event passing from audio/video tags to plugin tag
    • [BugFix] Clearing the interval that check if the plugin is installed. The interval used to trigger install callback every 1/2 sec.
    • [BugFix] Added an escape to defineWebRTCInterface so that it cannot be called more than once. Prints an error in the JS console when called more than once.
  • [BugFix] The camera is now properly freed when streams stop and tabs are closed
  • [BugFix] Multiple bug fixes regarding the audio management
 Features introduced by the version 0.8.852

13 August, 2015

  • Implemented MediaStream::currentTime

  • Implemented MediaStream::remove(track)
  • Implemented plugin::currentTime (equivalent to <video>.currentTime)
  • GetUserMedia constraints are now more strictly respected:
    When a video/audio track is requested, the user cannot de-select them. The user can only chose the input and validate/cancel the popup
    When a video/audio device is requested through its ID, the device cannot be overridden. The user can only validate/cancel the popup
  • Added whitelist and screen-sharing support for meet.jit.si
  • [Commercial plugin] Fixed a crash on closing  a tab that was using screen-sharing – Windows only
  • [Commercial plugin] Fixed a bug preventing the HTTP/S proxy to be used on Windows when the "Use the same proxy server for all protocols" checkbox was checked
 Features introduced by the version 0.8.850

13 July , 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

8 July , 2015

Enhancements:

  • 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:
    • event.srcElement 
    • event.currentTarget
    • event.target
    • event.type
    • event.timeStamp

Screen-sharing support:

  • 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

Bug fixes: 

  • 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)

Improvements:

  • 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
 Features introduced by the version 0.8.836

22 April , 2015

  • New version of the plugin: 0.8.836.
    • Enhancements:
      • MediaStream::addTrack is now available
    • Bugfixes
      • 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
 Features introduced by the version 0.8.810

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
 Features introduced by the version 0.8.810

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
 Features introduced by the version 0.8.801

09 Oct, 2014

  • Interim release of the plugin with a few optimisation and maintenance fixes
 Features introduced by the version 0.8.800

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
 Features introduced by the version 0.8.794

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 

    Temasys

    All plugin related code is located in 

    Temasys.WebRTCPlugin
  • 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.
    If the plugin is not ready, your javascript will either wait until the plugin it is or launch an interval when possible.

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.

Plugin

  • 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
    example: 

    Temasys.WebRTCPlugin.TemRTCPlugin = document.getElementById("MyPluginElement);

    If you're using the adapter, this is already taken care of.

  • This declaration no longer needs to be part of your code

    function plugin0() {
      return document.getElementById('_Tem_plugin0'); // with _Tem_plugin0 the id you gave to your plugin element
    }
    plugin = plugin0; 
  • Added functions play() and pause() to the rendering elements.
  • Added onplaying callback the the rendering elements.
  • Stability improvement, mainly on IE 9
 Features introduced by the version 0.8.780

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).

 

 Features introduced by the version 0.8.773

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.
 Features introduced by the version 0.8.770

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
  • Any javascript variable, function name and id starting by _Tem_ is now reserved for the plugin
  • This declaration MUST be part of your code (if you're using our extension of adapter.js, this is already taken care of)

    function plugin0() {
      return document.getElementById('_Tem_plugin0'); // with _Tem_plugin0 the id you gave to your plugin element
    }
    plugin = plugin0; 
  • The DataChannel can send the following types:
    • Int8Array

    • Uint8Array

    • Int16Array

    • Uint16Array

    • Int32Array

    • Uint32Array
      See WebRTC Plugins for more details

  • A new parameter is needed for the <object> plugin element:

    <param name="windowless" value="false" />  // set to false for the plugin elements you use to make you invoke plugin methods (ie GetUserMedia), 
    										   // true for the ones that you use to render streams
  • Adding the parameter

    <param name="forceGetAllCams" value="True" /> // The following strings are interpreted as true: 'true', 'True', 'TRUE'
    												// All other strings are considered as false

    to the plugin element will enable the listing of all devices referenced on your computer (including unplugged devices, virtual devices, and so on)
    See WebRTC Plugins for more details.

  • MediaStream.stop() now triggers MediaStream.onended

  • Stability improvements
 Features introduced by the version 0.8.725

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
 Features introduced by the version 0.8.703

06 June, 2014

 Features introduced by the version 0.8.624

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

Currently Implemented

  • Plugin Specifics
    • Replaces an <audio>/<video> element and "renders" a stream.
    • Enabling/Disabling the capture from your camera
    • Enabling/Disabling the capture from your microphone
    • Verbose/debug mode

Implementation In-Progress

  • Persistent permissions over HTTPS for GUM
  • Context Menu (Right Click)
  • More <audio> and <video> API support

Not ready or not planned for implementation yet, but of interest

  • W3C
    • 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)
    • Media Capture Depth Stream Extensions - Editor Draft - (here )
    • ORTC (here)