Releases



2.10.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.10.0 NPM
JS file 2.10.0 GitHub
openvidu-server JAR 2.10.0 GitHub
Docker container 2.10.0 DockerHub
Docker container (+KMS) 2.10.0 DockerHub
openvidu-java-client MVN package 2.10.0 MVN Repository
openvidu-node-client NPM package 2.10.0 NPM
openvidu-webcomponent ZIP 2.10.0 GitHub
openvidu-angular NPM package 2.10.0 NPM
openvidu-react NPM package 2.10.0 NPM
Kurento Media Server Ubuntu package 6.10.0 Kurento Docs

Release Notes

NEW FEATURES

This release brings support to more and more clients, so you can expand your OpenVidu client-side range. Of course, they are all compatible with each other and with every other platform already supported.


Electron support

OpenVidu has supported most popular browsers since its inception, and past releases brought official support to Android and iOS through Ionic. But there was still a gap regarding desktop applications. With 2.10.0 we are happy to announce that you are now able to implement your Windows, OSX and Linux native app with OpenVidu through Electron.

What is Electron? It is great framework for building native desktop applications with classic web technologies (simple, good old HTML, CSS and JS).

Electron is to desktop operating systems what Ionic is to mobile operating systems. Some examples of great applications built with Electron are Slack, Skype, Atom or Visual Studio Code Using Electron means that the same codebase you are already using for your web and mobile application can be used to build a desktop app that will work on Windows, OSX and Linux. Take a look to our brand new openvidu-electron tutorial, and you will have a desktop OpenVidu app working in minutes. It even brings screen-sharing!


React Native support

You’re not convinced by Ionic? Now you can choose React Native framework for developing your OpenVidu mobile app. React Native is rather similar to Ionic from the developers perspective, but at the same time its nature is very different. Essentially, it really uses native Android and iOS UI components under the hood while Ionic is based on WebView (in a nutshell, it runs on the browser).

React Native support is not part of the open source stack of OpenVidu platform. Please, contact us through Commercial page to ask for React Native support. You can then use openvidu-react-native tutorial to quickly get started


Internet Explorer support

Yes, it’s 2019. But there’s still a lot of companies out there that provide/require IE support and need videoconferencing systems to work in this browser relic. So that’s why we have brought OpenVidu support to IE through Temasys plugin. Only IE 11 is supported (going further back was too much of a pain).

Internet Explorer support is not part of the open source stack of OpenVidu platform. Please, contact us through Commercial page to ask for React Native support. You can then use openvidu-internet-explorer tutorial to quickly get started


BUG FIXES

  • openvidu-angular and openvidu-webcomponent were failing when screen sharing. Now they don’t.
  • openvidu-browser: screen-sharing streams are not mirrored in the local videos now by default.
  • openvidu-browser: event streamPlaying was being triggered anormally when calling StreamManager.addVideoElement method. Now it doesn’t.
  • openvidu-node-client and openvidu-java-client: removed static methods and properties from OpenVidu object. Now it is possible to keep a collection of OpenVidu objects from same Node or Java app by using SDK clients, which allows to manage multiple OpenVidu Servers from the same application.
  • openvidu-browser now checks version compatibility with openvidu-server. If version numbers are not equal, an error will be printed in the browser’s console when calling Session.connect method, so developers know they must use same version number on both sides. This gives devs very useful information about a very common mistake that usually leads to bugs that can be very difficult to trace but have a really simple solution, which is simply upgrading openvidu-browser library version. This new verification is not really a bug fix, but for sure will help avoiding future bugs.




2.9.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.9.0 NPM
JS file 2.9.0 GitHub
openvidu-server JAR 2.9.0 GitHub
Docker container 2.9.0 DockerHub
Docker container (+KMS) 2.9.0 DockerHub
openvidu-java-client MVN package 2.9.0 MVN Repository
openvidu-node-client NPM package 2.9.0 NPM
openvidu-webcomponent ZIP 2.9.0 GitHub
openvidu-angular NPM package 2.9.0 NPM
openvidu-react NPM package 2.9.0 NPM
Kurento Media Server Ubuntu package 6.10.0 Kurento Docs

Release Notes

NEW FEATURES


Ubuntu 18.04 bionic support

Our team has released Kurento 6.10.0, which can now be installed in Ubuntu 18.04 systems. This is a milestone we've been working on for quite some time, and we finally believe we're ready to launch official support for the newest Ubuntu LTS version. Deployment section in OpenVidu Docs is properly updated to inform about this.

We still consider Ubuntu Bionic to be in a preliminary support state, and some bugs may appear. In fact, we know for sure there's one limitation: no OpenCV filters will work in Ubuntu 18.04 at this moment. OpenVidu has supported audio and video filters for a long time now, and it is a cool feature that allows developers to implement some advanced audio and video real-time processing in the server side. But unfortunately Kurento has not been updated yet to support it in Bionic, so no FaceOverlayFilter or ChromaFilter will work in new Ubuntu version. But you can still use GStreamer filters!


OpenVidu Server boot process greatly improved

OpenVidu Server now checks all requiered conditions at boot time, which helps solving missconfiguration problems when deploying on Ubuntu. This includes every requirement related to permissions and installed software. If something is missing, wrong or there are not enough permissions in certain path, the OpenVidu Server process immediately exits with a clear description about what happened and a possible solution to fix it.

In our experience, this makes the process of installing OpenVidu Server directly in Ubuntu so much easier and manageable.


OpenVidu reconnection to Kurento Media Server

If OpenVidu Server loses its connection to Kurento Media Server, now it will try to reconnect automatically. When it does so, if it is a new instance of Kurento, every stream of every previously active session will be destroyed with reason mediaServerDisconnect and every active recording will be stopped with same reason, but your users will not be disconnected from your sessions. This way you can directly re-publish and re-subscribe any desired stream right away.

This may help in case Kurento crashes: your users will have lost their media connections, but they will still be connected to their OpenVidu sessions and will only have to re-establish streams once OpenVidu Server is connected to a new Kurento instance.


OpenVidu upgrade process

Do you want to upgrade your OpenVidu deployment? Now you have a section entirely dedicated to it in the documentation. If you have deployed OpenVidu in AWS, it's as easy as launching a single command. If you have chosen Ubuntu deployment, then you will have to manually run some commands. Either way, you have available proper instructions now.


Native screen-sharing for Chrome

OpenVidu has supported native screen-sharing for Firefox since its inception, but Google decided to have Chrome require an extension to allow screen-sharing. Finally they changed their mind and brought Chrome up to the standard, supporting getDisplayMedia API.

So, our client library openvidu-browser now supports native screen-sharing for Chrome≥72. No extension needed for these browsers!


OpenVidu Call improvements

Our best demo application has been updated with some exciting new features:

  • Users can now share their webcam and their screen at the same time.
  • The chat is better integrated now.
  • You can enlarge as many videos as you want, not just one. Available space will be automatically managed by the application for best fit.
  • Preview window for camera and mic selection has undergone many necessary fixes. Now it works fine in every OS and client supported by OpenVidu. openvidu-call-ionic (Ionic version of OpenVidu Call for mobile devices) now supports Ionic 4 and works fine in iOS.ready to


BUG FIXES

  • For COMPOSED recording with video, when multiple screen sharing streams were being published it crashed. Now it doesn't.
  • For COMPOSED recordings with video, when stopping them immediatley after started, sometimes the generated video file would not be playable. Now in this cases failed status is set to this recordings, so you can take care of them properly.
  • After manually stopping ALWAYS recordings (sessions that are automatically recorded once first publisher starts) in an ongoing session, now publishing a stream when no publishers are active in the session won't start automatically a new recording.
  • Active sessions retrieval now returns sessions created with REST API or server SDKs that have not received any client connection (before this fix they would not be returned until some user had connected to it)
  • Call Detail Record: recordingStopped event for INDIVIDUAL recordings wasn't updating their duration and size values (both properties had value 0)
  • streamPropertyChanged event was firing an exception in the browser for streams for which a user wasn't subscribed to.
  • Avoid 500 error when sending no body on POST operations of the REST API, such as POST /api/sessions
  • Minor bug fixes in openvidu-java-client.


OPENVIDU PRO

We are excited to announce OpenVidu Pro: a commercial tier for OpenVidu platform. Check it out here.



2.8.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.8.0 NPM
JS file 2.8.0 GitHub
openvidu-server JAR 2.8.0 GitHub
Docker container 2.8.0 DockerHub
Docker container (+KMS) 2.8.0 DockerHub
openvidu-java-client MVN package 2.8.1 MVN Repository
openvidu-node-client NPM package 2.8.0 NPM
openvidu-webcomponent ZIP 2.8.0 GitHub
openvidu-angular NPM package 2.8.0 NPM
openvidu-react NPM package 2.8.0 NPM
Kurento Media Server Ubuntu package 6.9.0 Kurento Docs

Release Notes

NEW FEATURES


Individual stream recording

Finally individual stream recording is available in OpenVidu. When recording a session you can now configure it to store each published stream in its own file.

This, on the one hand, gives developers lots of freedom to compose any kind of layout and achieve any kind of result once the recording has stopped, by using some post-processing video tool. On the other hand, this type of recording has proven to be 4x more efficient in comparison with previous grid recording in our first tests, allowing a better quality and a higher number of streams per recording, and more simultaneous recordings.

We have entirely rewritten Recording documentation explaining all these new features. Take a look at it!


Audio-only and video-only recording

Configure your recordings to be audio-only or video-only. This is available for both COMPOSED and INDIVIDUAL recordings. It is worth mentioning that audio-only COMPOSED recordings takes advantage of the new recording capabilities introduced in this release to make it an extremley efficient process. Check out the full documentation on this subject.


Other improvements
  • New property resolution when starting recordings. With it you can set the width and height in pixels of the recorded file. This is only available for COMPOSED recordings. INDIVIDUAL recordings will always record the video files with the native resolution of each video stream
  • Automatic stop of recordings is greatly improved. Check it out here
  • New property Stream.creationTime in OpenVidu Browser. This is the time when a stream was created in OpenVidu Server. Reflects the real starting time of the media stream transmission on the server side.
  • OpenVidu Server now destroys any stranded recording container left on the host on start up. This allows keeping the host machine clean when restarting the service
  • New REST method available in OpenVidu Server: GET /config. You can consult OpenVidu Server version and all active configuration properties with it. Check it out here.


BUG FIXES

  • Fixed a problem that was causing unexpected websocket disconnections from OpenVidu Server due to HttpSessions expiring after half an hour. It has been fixed by adding real reconnection capailities to websockets established from clients. This also fixes a problem with recordings longer than 30 minutes sometimes failing. Issue #146
  • Recording layout improved: default BEST_FIT layout used in COMPOSED recordings was including small black bars in the upper and left margins of the layout, that were visible in the final video file. This is now fixed.
  • openvidu-browser: property Connection.creationTime now has real value (brought from OpenVidu Server) instead of a local value. Now it reflects the real time some user connected to the Session. Issue #170
  • openvidu-call: now when setting a screen-share stream in full-screen mode, aspect ratio is preserved to avoid loss of information


BREAKING CHANGES

Even though this is not a major update with incompatibility changes according to semver, there are in fact a couple of changes that are worth mentioning:

  • Recorded files folder structure has changed: each recording is stored now in its own folder, named after the unique recording id. This doesn't affect the recordings management through REST API, openvidu-java-client or openvidu-node-client. But if you were locally managing the recordings, then a new folder structure is expected now.
  • openvidu-node-client: Recording properties Recording.hasAudio, Recording.hasVideo and Recording.name have been included into new Recording.properties attribute: Recording.properties.hasAudio, Recording.properties.hasVideo and Recording.properties.name




2.7.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.7.0 NPM
JS file 2.7.0 GitHub
openvidu-server JAR 2.7.0 GitHub
Docker container 2.7.0 DockerHub
Docker container (+KMS) 2.7.0 DockerHub
openvidu-java-client MVN package 2.5.0 MVN Repository
openvidu-node-client NPM package 2.5.0 NPM
openvidu-webcomponent ZIP 2.7.0 GitHub
openvidu-angular NPM package 2.7.1 NPM
openvidu-react NPM package 2.7.1 NPM
Kurento Media Server Ubuntu package 6.8.1 Kurento Docs

Release Notes

NEW FEATURES


Safari support

OpenVidu finally brings Safari to its collection of supported platforms. Two things to take into account when developing a Safari compatible application:

  • If there are gonna be other types of clients rather than Safari connecting to the same session, then transcoding will be necessary in OpenVidu Server. This will bring up CPU load significantly. This behavior is due to Safari not supporting any other codec than H264, when rest of platforms usually prefer VP8. Good news is this is a problem that will soon fix on its own: Safari will support VP8 in the near future (see Release 68 Notes)
  • A little hack is needed in your app if your Safari users are gonna have SUBSCRIBER role (only receiving video, without accessing their microphone or camera). Learn more here


Ionic support for iOS

Apple support is completed with Ionic platform for iOS. Now you can implement an Ionic app that will compile OK into an iOS native application. Our openvidu-ionic tutorial is now fully compatible with iPhones and iPads. We recommend to use it as a starting point for your Android/iOS application, but in openvidu-ionic tutorial you also have everything you need to integrate OpenVidu in any Ionic app. Take a look at it!


New event streamAudioVolumeChange

You can now listen to volume changes in any Publisher or Subscriber object. You can, for example, add a real-time audio wave or perform some action when certain level of noise or silence is reached. More details here.

BUG FIXES


  • Recording layout now internally hides cursor (no need of styling the layout with cursor:none). Issue #138
  • Recording stopping process reinforced to terminate and gracefully generate video files for failed recording containers (those that do not receive any video from the session caused by a misconfiguration or a wrong custom recording layout). This will help getting rid off dead containers and keeping OpenVidu Server clean. Issue #148
  • Mirroring local video fix: when changing to screen-share, local video is now un-mirrored, and viceversa. Issue #13
  • Sessions configured with Recording.MANUAL now automatically stop their recording if last participant left the session and no user published to the same session in 2 minutes. Issue #149
  • Publisher.publishAudio and Publisher.publishVideo may be called without having initialized a Session or having called Session.publish(Publisher)




2.6.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.6.0 NPM
JS file 2.6.0 GitHub
openvidu-server JAR 2.6.0 GitHub
Docker container 2.6.0 DockerHub
Docker container (+KMS) 2.6.0 DockerHub
openvidu-java-client MVN package 2.5.0 MVN Repository
openvidu-node-client NPM package 2.5.0 NPM
openvidu-webcomponent ZIP 2.6.0 GitHub
openvidu-angular NPM package 2.6.0 NPM
openvidu-react NPM package 2.6.0 NPM
Kurento Media Server Ubuntu package 6.8.1 Kurento Docs

Release Notes

NEW FEATURES


Ionic support

There's a complete tutorial in OpenVidu Docs to get a native Android app working with OpenVidu in just a few steps. You can just clone and use our sample application as a starting point or maybe you want to add OpenVidu to your existing Ionic app. Here you have the necessary configuration steps to do so (basically Android permissions stuff).

We are currently working on making OpenVidu work on iOS with Ionic.


New types of filters supported

OpenVidu 2.5.0 brought a fantastic and a differentiating element: real time audio and video filters. Now we have extended this capability to support new GStreamer based filters such as textoverlay, timeoverlay or clockoverlay.

You can embed any text, the timestamp of the video or the current time, easily customizing its position and format. Check these filters in GStreamer section of filters documentation.


Recording service now generates a thumbnail when stopping the recording

Whenever you stop the recording of a session, OpenVidu will automatically generate a thumbnail for the video, getting it from the middle of the video timeline. You can access it from https://OPENVIDU_SERVER_IP:4443/recordings/RECORDING_NAME.jpg

Do not worry about their lifecycle: they are linked to the video file itself. If you decide to delete the recording, thumbnail will also be deleted.

BUG FIXES


Important fix for increasing success rate in establishing media connections

Time ago we ran into a pretty ugly bug that was causing some problems during WebRTC negotiation, resulting in some clients located in complex networks (like a company's WiFi network) not being able to connect to OpenVidu Server. What developers perceived was that in certain scenarios some users simply couldn't receive or send any media connection.

This bug has been completely solved in OpenVidu 2.6.0. Now media connections will work fine in almost every client network configuration.




2.5.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.5.0 NPM
JS file 2.5.0 GitHub
openvidu-server JAR 2.5.0 GitHub
Docker container 2.5.0 DockerHub
Docker container (+KMS) 2.5.0 DockerHub
openvidu-java-client MVN package 2.5.0 MVN Repository
openvidu-node-client NPM package 2.5.0 NPM
openvidu-webcomponent ZIP 2.5.0 GitHub
openvidu-angular NPM package 2.5.0 NPM
openvidu-react NPM package 2.5.0 NPM

Release Notes

NEW FEATURES


Kurento filters support

OpenVidu API offers a simple way of applying filters to video and audio streams in the server side by making use of Kurento Media Server capabilities. See Voice and video filters section to learn more.


Individual user configuration for maximum/minimum bandwidth

In version 2.3.0 we introduced 4 new configuration parameters for OpenVidu Server that allow the limitation of the video bandwidth both sent and received to/from OpenVidu Server, affecting all video streams in a global manner. Now it is possible to specifically configure certain input and output bandwidth for every user connected to a session. This way you can customize the bandwidth for each Publisher and Subscriber object of each Connection object. Users with no specific configuration will use the global values.

You can set custom bandwidths by using REST API, openvidu-java-client or openvidu-node-client:

  • REST API: in POST /api/tokens append a property in the json body like this

    "kurentoOptions": {
      "videoMaxRecvBandwidth": 1000,
      "videoMinRecvBandwidth": 1000,
      "videoMaxSendBandwidth": 1000,
      "videoMinSendBandwidth": 1000
    }
    
  • openvidu-java-client: build your tokens like this

    KurentoOptions kurentoOptions = new KurentoOptions.Builder()
      .videoMaxRecvBandwidth(1000)
      .videoMinRecvBandwidth(1000)
      .videoMaxSendBandwidth(1000)
      .videoMinSendBandwidth(1000)
      .build();
    TokenOptions tokenOptions = new TokenOptions.Builder()
      .data("User data")
      .role(OpenViduRole.PUBLISHER)
      .kurentoOptions(kurentoOptions)
      .build();
    String myToken = mySession.generateToken(tokenOptions);
    
  • openvidu-node-client: build your tokens like this

    var tokenOptions = {
        data: "User data",
        role: OpenViduRole.PUBLISHER,
        kurentoOptions: {
          videoMaxRecvBandwidth: 1000,
          videoMinRecvBandwidth: 1000,
          videoMaxSendBandwidth: 1000,
          videoMinSendBandwidth: 1000
        }
    };
    mySession.generateToken(tokenOptions).then(token => { ... } );
    


REST API and Server SDKs improvements
  • Connection objects have a brand new property very useful for session analysis: platform. It carries a complete description of the platform used by the client to connect to your session. For example: "Chrome 69.0.3497.81 on OS X 10.13.6 64-bit" or "Firefox Mobile 62.0 on Mobile (Android 8.1.0)"

    You can get this information by retrieving session information with the REST api (GET /api/sessions or GET /api/sessions/SESSION_ID) or inspecting openvidu-java-client and openvidu-node-client Session objects: calling Session.fetch() or OpenVidu.fetch() will update the status of their activeConnections property. Then you can check it out in openvidu-node-client (property Session.activeConnections) or openvidu-java-client (method Session.getActiveConnections())

  • Session, Connection and Publisher objects now have createdAt property, indicating when these objects where initialized in OpenVidu Server. This property has been integrated to maintain consistency with OpenVidu Server Call Detail Record, which has already been storing it in previous versions (check "timestamp" property of every CDR entry).


OpenVidu Browser improvements
  • New method OpenVidu.checkScreenSharingCapabilities(). It allows developers to know if the client platform supports screen sharing (see its declaration in OpenVidu Documentation)


New OpenVidu Angular and OpenVidu React libraries

We introduced OpenVidu Web Component in release 2.3.0. Now we offer native libraries for both Angular and React (latest versions) to insert the same powerful component in your applications by making use of each framework capabilities. You can check a tutorial for OpenVidu Angular (openvidu-library-angular) and for OpenVidu React (openvidu-library-react) right now.

Of course you can keep using OpenVidu Browser library instead of these components in any frontend framework. These tutorials show a basic use of OpenVidu Browser in an Angular app (openvidu-insecure-angular) and in a React app (openvidu-insecure-react).

BUG FIXES

  • Local tracks now are not stopped on stream disposal if property PublisherProperties.videoSource was of type MediaStreamTrack (custom stream got with OpenVidu.getUserMedia()). Issue #107, PR #108
  • Deprecated RTCPeerConnection.getRemoteStreams and RTCPeerConnection.getLocalStreams to RTCPeerConnection.getReceivers and RTCPeerConnection.getSenders. Issue #54
  • Allow full screen sharing in Firefox. Issue #103, PR #105
  • Fixed duplicated camera permissions in Firefox if PublisherProperties.videoSource/audioSource are provided as MediaStreamTracks. PR #109
  • openvidu-node-client now rejects with Error object upon OpenVidu Server unreachable. Issue #116, PR #117




2.4.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.4.0 NPM
JS file 2.4.0 GitHub
openvidu-server JAR 2.4.0 GitHub
Docker container 2.4.0 DockerHub
Docker container (+KMS) 2.4.0 DockerHub
openvidu-java-client MVN package 2.4.0 MVN Repository
openvidu-node-client NPM package 2.4.0 NPM
openvidu-webcomponent ZIP 2.4.0 GitHub

Release Notes

NEW FEATURES


OpenVidu Java Client and OpenVidu Node Client REST API support for v2.3.0

Backend clients are now compatible with REST API 2.3.0, adding methods:

  • Session.close(): close a Session from your backend
  • Session.forceDisconnect(): force some user to leave a Session
  • Session.forceUnpublish(): force some user to unpublish a Publisher from a Session
  • Session.fetch(): bring Session information from OpenVidu Server
  • OpenVidu.fetch(): bring information from every active Session from OpenVidu Server

You can call methods Session.fetch() and OpenVidu.fetch() to bring the current status of sessions from OpenVidu Server. You can consult now directly from OpenVidu Java Client / OpenVidu Node Client all the active sessions with OpenVidu.getActiveSessions() / OpenVidu.activeSessions and the active connections of a session with Session.getActiveConnections() / Session.activeConnections.


OpenVidu CDR extended

Event recordingStopped event now has reason property. Can be:

  • "recordingStoppedByServer": the recording was stopped by the application (using REST API, OpenVidu Java Client or OpenVidu Node Client)
  • "lastParticipantLeft": if the Session was configured for automatic recording (RecordingMode.ALWAYS, check OpenVidu Node Client docs for more info), then it stopped because the last participant left the session
  • "sessionClosedByServer": the recording stopped because the session was forcibly closed by the application (using REST API, OpenVidu Java Client or OpenVidu Node Client)
  • "openviduServerStopped": the recording stopped because OpenVidu Server process unexpectedly stopped (cannot be guaranteed)


OpenVidu WebComponent improvements
  • Added a generic fullscreen button which will set as fullscreen element the entire component
  • Local video toolbar shown on fullscreen
  • User's nickname update process is now less intrusive (pop-up removed, simple text input instead)
  • Updated every dialog: now they appear inside of the component (center position), instead of appended to DOM body
  • The chat component is integrated in the layout for a better experience
  • New close chat button (top right corner)
  • New send button (bottom right corner)
  • New avatar user in each message. A new snapshot image will be displayed with each new message

BUG FIXES

  • OpenVidu Server dashboard test could sometimes fail because of a misuse of TURN server
  • OpenVidu Java Client: pending requests bug fixed
  • Remote Stream status properties are now properly updated when calling Session.publish, Session.unpublish and Session.publish for the same Publisher object (having unpublished audio or video in between the calls)




2.3.0

Artifacts

medium
Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.3.0 NPM
JS file 2.3.0 GitHub
openvidu-server JAR 2.3.0 GitHub
Docker container 2.3.0 DockerHub
Docker container (+KMS) 2.3.0 DockerHub
openvidu-java-client MVN package 2.2.0 MVN Repository
openvidu-node-client NPM package 2.2.0 NPM
openvidu-webcomponent ZIP 2.3.0 GitHub

Release Notes

OPENVIDU WEB COMPONENT

OpenVidu platform now offers an easier way to get started: just include our new Web Component into your web and start enjoying video call capabilities with just 3 new lines of code:

Add to your index.html OpenVidu Web Component files:

<link rel="stylesheet" href="openvidu-webcomponent.css" />
<script src="openvidu-webcomponent.js"></script>

And add your video-call element wherever you want in your application:

<openvidu-webcomponent session-config='{"user":"NICKNAME", "token":"TOKEN"}' theme="dark"></openvidu-webcomponent>

Being NICKNAME the user's name during the call and TOKEN one token generated in OpenVidu Server. Of course, if you want to connect users to the same session, the tokens should be generated for the same session. Attribute theme can be dark or light. Use the one that better fits your application.

OpenVidu Web Component supports a reasonable amount of different dimensions, and every video displayed inside of it will be automatically relocated and resized for its optimal position upon window resizing. You can set the position, width and height of the component by styling it like this:

  1. Setting its property position to absolute or fixed, depending on your web layout and the desired behavior you want the component to have.
  2. Playing with values:
    • width
    • height
    • top or bottom
    • right or left

For example, the following CSS rule would position the upper OpenVidu Web Component in the bottom-right corner of your web, taking up half of the height of the page and a third of its width.

openvidu-webcomponent {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 33vw;
  height: 50vh;
}

If you give enough width to the component (at least 700px), users can communicate through an integrated chat.

To see some images of OpenVidu Web Component in action, check this post on Medium. If you want to learn more about OpenVidu Web Component, visit Tutorials section


NEW FEATURES


StreamPropertyChangedEvent (See here)

OpenVidu Browser now lets users connected to a Session know when any Stream they are subscribed to undergoes any possible change in its properties. Every Session object will dispatch this new event (you can subscribe to it to every Publisher or Subscriber object too). This event can refer to the following Stream properties:

  • Stream.audioActive: this property may change if the user publishing the Stream calls Publisher.pusblishAudio(bool).
  • Stream.videoActive: this property may change if the user publishing the Stream calls Publisher.publishVideo(bool).
  • Stream.videoDimensions: this property may change if...
    • ...the user publishing the stream is screen-sharing and the shared window changes its dimensions.
    • ...the user is publishing from a mobile device and it is rotated (every camera from a phone will invert the resolution in the output video when rotated).

So, for example, now you can do:

var OV = new OpenVidu();
var session = OV.initSession();
session.on('streamPropertyChanged', event => {
    if (event.changedProperty === 'audioActive') {
        console.log('The state of the audio of the publisher has changed. Is enabled? -> ' + event.newValue);
    } else if (event.changedProperty === 'videoActive') {
        console.log('The state of the video of the publisher has changed. Is enabled? -> ' + event.newValue);
    } else if (event.changedProperty === 'videoDimensions') {
        console.log('The video dimensions of the publisher has changed. New dimensions: ' + event.newValue);
    }
});

This way you can react more easily upon this variations in the published streams and update your application's layout accordingly.


Session.capabilities (See here)

You can check capabilities property of Session object to know which methods are able to invoke each one of your clients, depending on their role. Also, if a client tries to call a method for which he has no permissions, now an OpenViduError is thrown with property name being OPENVIDU_PERMISSION_DENIED.


New MODERATOR role

At last developers have available the new role that has been in our roadmap for a long time. Users connecting to a session with a token configured with MODERATOR role can call every method granted for SUBSCRIBER and PUBLISHER roles, but also:

  • Session.forceDisconnect: you can evict any user from the Session (force the method Session.disconnect)
  • Session.forceUnpublish: you can stop the Publisher of any user publishing in the Session (force the method Session.unpublish)


REST API extended

5 new methods join the REST API of OpenVidu Server:

Future iterations will add this capabilities to openvidu-java-client and openvidu-node-client libraries


Configure global bandwidth for your WebRTC connections

We have included a first way to set the maximum and minimum bandwidths for the media connections established between browsers and OpenVidu Server. You can configure it with the following system properties, as stated in OpenVidu Server configuration sections:

  • openvidu.streams.video.max-recv-bandwidth: Maximum video bandwidth sent from clients to OpenVidu Server, in kbps. 0 means unconstrained (default 1000)
  • openvidu.streams.video.min-recv-bandwidth: Minimum video bandwidth sent from clients to OpenVidu Server, in kbps. 0 means unconstrained (default 300)
  • openvidu.streams.video.max-send-bandwidth: Maximum video bandwidth sent from OpenVidu Server to clients, in kbps. 0 means unconstrained (default 1000)
  • openvidu.streams.video.min-send-bandwidth: Minimum video bandwidth sent from OpenVidu Server to clients, in kbps. 0 means unconstrained (default 300)

Future iterations will study the possibility of configuring this same parameters for each session individually or even for each incoming or outgoing WebRTC connection (maybe as part of PublisherProperties or SubscriberProperties)




2.2.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.2.0 NPM
JS file 2.2.0 GitHub
openvidu-server JAR 2.2.0 GitHub
Docker container 2.2.0 DockerHub
Docker container (+KMS) 2.2.0 DockerHub
openvidu-java-client MVN package 2.2.0 MVN Repository
openvidu-node-client NPM package 2.2.0 NPM

Release Notes


OpenVidu now offers integrated and automated support for TURN server. We encourage developers to check out our post on Medium to learn more about it.

The platform now integrates by default a COTURN server as part of its ecosystem. This means that media connections will work OK even when clients are located on restricted networks. When deploying OpenVidu Server in Amazon Web Services with our Cloud Formation template no changes are required at all. If you are deploying OpenVidu Server on your own in an Ubuntu machine, installation instructions have changed a little bit. You have them properly updated here.




2.1.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.1.0 NPM
JS file 2.1.0 GitHub
openvidu-server JAR 2.1.0 GitHub
Docker container 2.1.0 DockerHub
Docker container (+KMS) 2.1.0 DockerHub
openvidu-java-client MVN package 2.0.0 MVN Repository
openvidu-node-client NPM package 2.0.0 NPM

Release Notes


NEW FEATURES

OpenVidu Browser support for video management

We have implemented a new class in OpenVidu Browser aimed to better support declarative frontend frameworks such as Angular, React or Vue.js.

Now Publisher and Subscriber objects both inherit from StreamManager, which provides 2 different methods to tell OpenVidu what DOM video players should display each specific stream (addVideoElement and createVideoElement). This allows us to let OpenVidu take control of the video elements (even if our framework dynamically creates them) and do not worry about its internals. This is all explained in detail in Manage video players section.

If you want to check out a real example of this behavior, explore our renovated OpenVidu Angular tutorial.




2.0.0

Artifacts

Artifact Type Compatible Version Link Info
openvidu-browser NPM package 2.0.0 NPM
JS file 2.0.0 GitHub
openvidu-server JAR 2.0.0 GitHub
Docker container 2.0.0 DockerHub
Docker container (+KMS) 2.0.0 DockerHub
openvidu-java-client MVN package 2.0.0 MVN Repository
openvidu-node-client NPM package 2.0.0 NPM

Release Notes


This is the first breaking change update for OpenVidu, which brings in lots of new features and internal improvements.

NEW FEATURES

  • OpenVidu Browser new methods

    • Session.publish(): now returns a Promise so you can tell if the method was successful or not.
    • Session.signal(): now returns a Promise so you can tell if the method was successful or not.
    • Subcriber.subscribeToAudio() and Subscriber.subscribeToVideo(): new methods that allows you to mute the audio or video tracks of a remote stream.
    • OpenVidu.initPublisher(): now expects properties as interface PublisherProperties. They include:

      {
          audioSource: undefined, // The source of audio. If undefined default audio input
          videoSource: undefined, // The source of video. If undefined default video input
          publishAudio: true,     // Whether you want to start publishing with your audio unmuted or muted
          publishVideo: true,     // Whether you want to start publishing with your video enabled or not
          resolution: '640x480',  // The resolution of your video
          frameRate: 30,          // The frame rate of your video
          insertMode: 'APPEND',   // How the video will be inserted in the target element
          mirror: false           // Whether to mirror your local video or not
      }
      
    • Session.subscribe(): now expects properties as interface SubscriberProperties. They include:

      {
          insertMode: 'APPEND',   // How the video will be inserted in the target element
          subscribeToAudio: true, // Whether to initially subscribe to the stream's audio track or not
          subscribeToVideo: true  // Whether to initially subscribe to the stream's video track or not
      }
      
    • OpenVidu.getDevices(): now you can use certain video or audio input device when calling OpenVidu.initPublisher(), thanks to properties audioSource or videoSource of PublisherProperties object. Just set these variables to the property deviceId of any of the devices returned by this method.

    • OpenVidu.getUserMedia(): method improved. Now devs can customize a MediaStream object before calling OpenVidu.initPublisher() method, setting property audioSource or videoSource to a MediaStreamTrack object (see docs for further information)

  • OpenVidu Browser new properties

    • Stream.frameRate: new property defining the frame rate of video streams. This property will only have value if the Publisher owning the stream has set property frameRate of PublisherProperties when calling OpenVidu.initPublisher()

  • OpenVidu Browser events

    • New events accessDialogOpened and accessDialogClosed: dispatched by Publisher objects when the browser asks the user to grant permissions to camera or michrophone by opening a pop-up. You can use them to warn your users about it.
    • New events recordingStarted and recordingStopped: dispatched by Session object when the recording of a Session starts and stops. You can customize which clients will receive this event thanks to new property openvidu.recording.notification (see OpenVidu Server configuration)
    • Events publisherStartSpeaking and publisherStopSpeaking improved: more customizable thanks to OpenVidu.setAdvancedConfiguration() and better overall performance.
    • Events streamDestroyed, connectionDestroyed and sessionDisconnected have new property reason. This gives more information about why the events have been dispatched so you can take specific actions depending on the context: maybe a stream has been destroyed because the user publishing has deliberately diposed it or maybe the network connection has unexpectedly closed (see docs for StreamEvent, ConnectionEvent and SessionDisconnectedEvent)

  • Other improvements in OpenVidu Browser

  • OpenVidu Server new features

BUG FIXES

  • Now when any participant unexpectedly disconnects from a session (for example, due to a network failure), connectionDestroyed event is sent to the rest of participants with property reason set to networkDisconnect.
  • When OpenVidu Server is stopped, it will try to gracefully finish every in progress session and recording. This way no recording file will end corrupted upon OpenVidu Server termination (this cannot be granted if the process crashes or is forcibly terminated)
  • Now both STUN and TURN OpenVidu Server configuration parameters can be set up at the same time with no overwritings.
  • Tons of small fixes and code refactoring that makes OpenVidu more stable and easy to test and develop

BREAKING CHANGES LIST

  • OpenVidu Browser

    • OpenVidu.initSession now doesn't receive any input parameter.
    • OpenVidu.initPublisher input parameters have changed. Now properties parameter must match PublisherProperties interface.
    • Session.connect method has been promisified. Change the last mandatory callback parameter for a Promise implementation: session.connect(token, (error) => { ... }) to session.connect(token).then(() => {...}).catch(error => {...});

  • OpenVidu Java Client

    • All Archive entities are now called Recording. This includes: class Archive to Recording, class ArchiveMode to RecordingMode, class ArchiveLayout to RecordingLayout, method SessionProperties.archiveLayout() to SessionProperties.recordingLayout(), method SessionProperties.archiveMode() to SessionProperties.recordingMode(), method SessionProperties.Builder.archiveLayout() to SessionProperties.Builder.recordingLayout(), method SessionProperties.Builder.archiveMode() to SessionProperties.Builder.recordingMode()
    • RecordingLayout property in SessionProperties.Builder is now configured calling method defaultRecordingLayout() instead of recordingLayout(). This means that if one Session is gonna be recorded more than once, each recording layout may be customize with RecordingProperties.Builder.recordingLayout(), which will overwrite the default one globally configured in SessionProperties object.

  • OpenVidu Node Client

    • We have removed the builder pattern in all openvidu-node-client classes. Now objects are used instead, which includes classes TokenOptions, SessionProperties and RecordingProperties. For example, instead of getting a TokenOptions object like this: var tokenOptions = new TokenOptions.Builder().data(serverData).role(role).build() now it must be like this: var tokenOptions = {data: serverData, role: role}
    • There has been a simple change in certain asynchronous call. Method Session.getSessionId() is now synchronous, but method OpenVidu.createSession() is now asynchronous (the reason is pretty simple: now method createSession implements the behavior that getSessionId was providing the first time it was called for certain Session object).
    • All callback methods have been promisified. This includes method Session.generateToken(tokenOptions?, callback): void (now Session.generateToken(tokenOptions?): Promise<string>) and method Session.getSessionId(callback): void (now OpenVidu.createSession(): Promise<Session>, take also into account that the async call has changed from one method to the other as stated in the previous point).
    • All Archive entities are now called Recording. This includes: object Archive to Recording, object ArchiveMode to RecordingMode, object ArchiveLayout to RecordingLayout, method SessionProperties.archiveLayout() to SessionProperties.recordingLayout(), method SessionProperties.archiveMode() to SessionProperties.recordingMode(), method SessionProperties.Builder.archiveLayout() to SessionProperties.Builder.recordingLayout(), method SessionProperties.Builder.archiveMode() to SessionProperties.Builder.recordingMode()
    • recordingLayout property in SessionProperties has changed to defaultRecordingLayout. This means that if one Session is gonna be recorded more than once, each recording layout may be customize with recordingLayout property (of RecordingProperties interface, which will overwrite the default one globally configured in SessionProperties object.

  • REST API

    • All Archive entities are now called Recording in API REST. For example: {"archiveMode": "ARCHIVE_MODE", "archiveLayout": "ARCHIVE_LAYOUT", "mediaMode": "MEDIA_MODE"} now is {"recordingMode": "RECORDING_MODE", "recordingLayout": "RECORDING_LAYOUT", "mediaMode": "MEDIA_MODE"}.
    • Field recordingLayout is now called defaultRecordingLayout in operation POST /api/sessions. This means that if one Session is gonna be recorded more than once, each recording layout may be customize adding a new field recordingLayout in the call to POST /api/recordings/start of the API REST, which will overwrite the default one globally configured during POST /api/sessions

  • Other breaking changes

    • OpenVidu Server default port from 8443 to 4443
    • OpenVidu Server configuration property openvidu.recording.free-access is now openvidu.recording.public-access




1.9.0-beta-1

Artifacts

Artifact Type Compatible version Link Info
openvidu-browser NPM package 1.9.0-beta-1 NPM
JS file 1.9.0-beta-1 GitHub
openvidu-server JAR 1.9.0-beta-1 GitHub
Docker container 1.9.0-beta-1 DockerHub
Docker container (+KMS) 1.9.0-beta-1 DockerHub
openvidu-java-client MVN package 1.8.0 MVN Repository
openvidu-node-client NPM package 1.8.0 NPM

Release Notes


# In first command: xenial for Ubuntu 16.04, trusty for Ubuntu 14.04
sudo echo "deb http://ubuntu.openvidu.io/6.7.0 xenial kms6" | sudo tee /etc/apt/sources.list.d/kurento.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y install kurento-media-server
sudo apt-get -y install openh264-gst-plugins-bad-1.5

To start and stop KMS 6.7.0:

sudo service kurento-media-server start
sudo service kurento-media-server stop