OpenVidu 2.16.0: Network Quality API, S3 recording and much more

9 min readNov 13, 2020


New features

Network quality API (OpenVidu Pro)

One of the most important elements in real-time WebRTC connections is the network. It can have a huge impact in the quality of the media streams being transmitted. Usually we have control over the quality of the server-side network, but we don’t have any guarantee about the network of the clients. For that reason, it is especially important to monitor and to be able to warn about network problems to our end users.

This is why OpenVidu Pro now offers the Network Quality API. Now you can listen for network quality change events in your application’s client. Use it to display a network indicator to inform your users about the quality of their connections, as well as those of other users. This can help reduce customer frustration to a great extent when having a bad experience, as they have a reasonable explanation about their own and others’ network conditions.

S3 recording storage (OpenVidu Pro)

OpenVidu Pro can be configured to upload recordings to an Amazon Web Services S3 bucket instead of storing them in local storage.

This brings multiple advantages:

  • You can terminate clusters without worrying losing your recordings, as long as they are properly uploaded to the bucket.
  • Launching an OpenVidu Pro cluster configured to use an already populated S3 bucket will make the existing recordings accessible and manageable from the new cluster.
  • You can upload to the same S3 bucket from different OpenVidu Pro clusters.

Take a look to the official documentation: Uploading recordings to S3

Improved REST API for managing participant roles

Token API has been replaced with Connection API. This helps harmonizing and unifying the server entities of OpenVidu, as you can see in the renovated REST API documentation. This change also brings many new functionalities

  • Now you can invalidate non-used tokens. With the new REST API, you can delete a Connection object before it has been taken by a final user.
  • In OpenVidu Pro you can also modify the properties of an existing Connection object. This means that you can change on the fly the role of a participant (from SUBSCRIBER to PUBLISHER, for example) and you can also manage fine-grained INDIVIDUAL recording (see next point).
  • Now OpenVidu Java Client and OpenVidu Node Client can also be used to publish IP cameras.

Manual allocation of sessions in your Media Nodes (OpenVidu Pro)

For some particular use cases, the automatic session distribution algorithm based on CPU load of Media Nodes may not be enough. Now you can force the specific Media Node where a session must be allocated. This gives you much more control. Check it out here.

Selecting streams to be recorded (OpenVidu Pro)

Let’s assume the following scenario: your application offers webinar-type video meetings, where a main speaker addresses an audience that can intervene from time to time. And you are recording these sessions. So far, any video stream published into the session would be recorded, so you couldn’t specify to record only the main speaker. Now in OpenVidu Pro you can choose which specific participants must be recorded. See how here. Not only that, with this new feature you can also start and stop the recording of one stream as many times as you want, for the very same session recording process! In our example, the main speaker could be the only participant recorded, and also only at certain specific times.

This applies only to INDIVIDUAL recording, as in COMPOSED recording with custom layouts there is total freedom to record as you wish.

Health check (OpenVidu Pro)

OpenVidu Pro offers a new health check REST API endpoint. Check it out in the documentation: GET openvidu/api/health

New monitoring dashboards (OpenVidu Pro)

We have substantially improved the collection of information from OpenVidu Pro clusters, and there are available new Kibana dashboards to help you monitor and analyse your deployments:

New Monitoring OpenVidu Server Pro Node dahsboard. With it you can check in detail the status of your master node

Support for external Elastic stacks (OpenVidu Pro)

Now you can tell OpenVidu Pro to send all of the monitoring information to your own Elasticsearch service. This is in fact the recommended option for a production OpenVidu Pro deployment. If you combine it with S3 recording (in case your product uses the recording feature), you can turn your cluster on and off at will, without worrying about data persistence. See how here: Configuring an external stack.

Kibana security integration (OpenVidu Pro)

We have improved the Kibana access, which is now secured with the Elastic user management system. This is the most natural and logical way of dealing with Kibana users, of course. Learn how to add new users to your Elastic stack here: Create a fine-grained user.

Kibana access in OpenVidu Pro is now using the actual user management system of the platform, instead of the ugly, less secure Basic Auth proxy protection.

Automatic deletion of Elastic documents (OpenVidu Pro)

Some users have reported unexpected failures and strange behaviors in OpenVidu Pro clusters that eventually turned out to be caused by nearly full hard drives. OpenVidu Pro clusters are constantly generating data, and after some weeks disks can be filled up to dangerous points. Now by default any data older than 15 days will be automatically cleaned up, so these problems never arise. You can of course change this property in your .env configuration file to any number of days to accommodate it to your specific use case (OPENVIDU_PRO_ELASTICSEARCH_MAX_DAYS_DELETE=15). And this is also compatible with the new external Elastic stack option!

New configuration parameter for IP cameras

IP cameras can now be further configured with parameter networkCache. This allows changing the default buffer size that will be used when receiving from remote RTSP streams. The default 2000 ms can be to restrictive for certain use cases, and latency can be greatly improved if the conditions allow it. Check this new parameter here.

Change environment variables of Media Nodes (OpenVidu Pro)

Now you can update any environment variable of your Media Nodes directly from the .envconfiguration file of your OpenVidu Server Pro Node. This configuration will be broadcasted to all Media Nodes on startup. For example, changing the log level of Kurento in your Media Nodes is now as easy as this.

OpenVidu iOS native application

OpenVidu has offered support for mobile platforms for a long time. First we focused on the most popular cross-platform frameworks, first with Ionic and then with React Native. Finally in Android we implemented a sample tutorial to be used as a template for your own custom Android app. Now we are happy to introduce the same concept for iOS: openvidu-ios. These are the features of this application:

  • Latest iOS versions (tested with iOS 14.0)
  • Implementing OpenVidu RPC protocol
  • Mute / Unmute video
  • Mute / Unmute audio
  • Toggle speaker / headset
  • Subscribe / unsubscribe stream
openvidu-ios app in action

OpenVidu Call improvements

Our flagship OpenVidu application keeps getting better. Here is the list of all improvements in 2.16.0:

  • OpenVidu call app has been updated to Angular 10.
  • Joining sessions with no input devices is now possible. Besides, if the video device is already in use, it will be disabled and the user will be able to connect to the session only by using the microphone.
  • Muted participants are now present. Users with video muted disappeared from the layout making it difficult to know who is in the room. Now they will show with small black video.
  • Automatic chat scroll when new messages are received.
  • Video icons have been replaced by a unique icon which it will show an action menu.
  • The chat notification did not appear in fullscreen mode. This is fixed now.
  • Removed jQuery with the aim of decreasing the bundle size (200KBs). The awesome animation layout is now a simple plain CSS effect.
  • Some capture avatar bugs have been fixed.
  • If you are using the WebComponent you can hide the footer with a new field of ovSettings object (see footer property).

New documented tutorials

Take a look to the documentation of our new tutorials:

  • openvidu-iframe: learn how to embed an OpenVidu web app inside another application using iframe technology.
  • openvidu-ipcameras: do you want to publish an IP camera into an OpenVidu session? Then check out this tutorial.

Kurento 6.15.0 release

OpenVidu 2.16.0 uses under the hood the brand new Kurento 6.15.0. This version of the media server brings lots of new features, improvements and bug and security fixes. You can read all of them in Kurento Release Notes.

Bug fixes


  • Bundled size cut almost in half! From 626 KB to 361 KB (488)
  • Fixed iPad Pro and Ionic devices support bug.


  • Fixed possible NullPointer exception when fetching Session information when IP cameras are present.


  • Updated internal react-native-webrtc to version 1.84.0.
  • Crash initializing an only audio publisher, fixed now.


  • Setting recording names with slashes and other special characters could result in unexpected errors. Now recording names must be alphanumeric strings or an error is returned.
  • Fixed rare exception when starting and stopping multiple recordings for the same session in a row.
  • Fixed exception when stopping COMPOSED_QUICK_START recordings in heavy loaded systems.
  • Fixed recordingStatusChanged event to started, that sometimes could be fired too soon, breaking the following rule of documentation: This means the associated video(s) already exists and its size is greater than 0. This is now fixed.

IP cameras

  • IP Cameras with user info IPs (those IPs with Basic Auth formatted in the URL as rtsp:// where being assigned an ID including the credentials. This is now fixed.

OpenVidu Server CE

  • OpenVidu Secret property (OPENVIDU_SECRET) could introduce critical failures in COMPOSED recording and in the internal RedisDB for TURN server if special characters were being used (such as #, ?, /, …). Now OPENVIDU_SECRET must comply with an alphanumeric format (plus characters- and _) that easily prevents these failures.
  • Some TURN connections were not being successfully established under some restrictive network conditions in CE deployments. Now they do.

OpenVidu Server Pro

  • Some threads were not being properly closed on programmatic restart, causing duplicated calls in certain processes such as session garbage collector. This is now fixed.

Breaking changes

Consider the following points when upgrading to OpenVidu 2.16.0:

  1. If your OPENVIDU_SECRET has any kind of special character: you must change it to a simple alphanumeric string (plus characters- and _). This helps preventing some important bugs caused by secrets with special chars not working fine in some internal services.
  2. If you are publishing IP cameras: now in REST API method POST /api/sessions/<SESSION_ID>/connection, the default value of body request property type has changed from IPCAM to WEBRTC. If you were publishing an IP camera and not providing “type” property, now you must explicitly do so, with value “IPCAM”.
  3. For OpenVidu Pro, the Elastic stack credential parameters have been renamed from KIBANA_USER and KIBANA_PASSWORD to ELASTICSEARCH_USERNAME and ELASTICSEARCH_PASSWORD. You must transfer the values from the old .env configuration file to the new one, from the old parameters to the new ones. This is also noted in the official upgrading instructions.
  4. If you are using REST API to control openvidu-server (no Java or Node clients): REST API paths have been updated to unify all of them under the same parent path. Now every OpenVidu REST API operation will be located under path /openvidu/. For example, what before was: POST /api/sessions/<SESSION_ID>/connection now is POST /openvidu/api/sessions/<SESSION_ID>/connection . This is very good news: now OpenVidu has a single entrypoint from a single base path, greatly simplifying the configuration of API Gateways. New REST API is well documented in here.

Old API is considered now deprecated, but of course is still supported. When you are ready, you can make sure your migration has been done right by adding this property to your OpenVidu Server: SUPPORT_DEPRECATED_API=false

If that property is set to false (by default is true), old API will no longer by accepted by OpenVidu Server, so you can test everything still works smoothly after updating your app to use the new REST API.

Stay tuned for next iterations! You can follow us on Twitter and a Star in GitHub is always welcome :)