OpenVidu 2.18.0: improved recordings, client SDK, reconnection capabilites and much more

OpenVidu
5 min readJun 2, 2021

--

NEW FEATURES

Recording improvements

Recording API has been extended in this release. The two main new features are:

  • You can now set the desired frame rate of your COMPOSED recordings.
  • You can set default values for all recording properties when initializing a Session.

This second point is the result of a small but significant refactoring of the Session object. Before, Session objects had custom attributes for defining default values for its recordings:

{
"defaultOutputMode": "COMPOSED",
"defaultRecordingLayout": "CUSTOM",
"defaultCustomLayout": "mySimpleLayout"
}

Now it has a single attribute defaultRecordingProperties that is an actual RecordingProperties object, containing all of the available attributes to customize recordings:

{
"defaultRecordingProperties": {
"name": "MyRecording",
"hasAudio": true,
"hasVideo": true,
"outputMode": "COMPOSED",
"recordingLayout": "CUSTOM",
"customLayout": "mySimpleLayout",
"resolution": "1280x720",
"frameRate": 25,
"shmSize": 536870912,
"mediaNode": "media_i-po39jr3e10rkjsdfj"
}
}

In this way, for example, it is now possible to record Sessions set to recording mode ALWAYS with only audio or only video. Before the lack of custom default recording properties for in the Session object made this impossible.

This refactoring introduces small breaking changes that must be addressed if your application initializes Session objects with any default recording property ( defaultOutputMode, defaultRecordingLayout, defaultCustomLayout). This is all carefully detailed in the Breaking changes section of these release notes.

New openvidu-browser SDK features

openvidu-browser SDK has been improved in many ways. The most important points are listed below:

  • PublisherSpeakingEvents are now available also for Publisher objects. Before, they were restricted to Subscriber objects, so it wasn’t easy to know when the local user started or stopped speaking.
  • Methods Session.unpublish and Session.unsubscribe are now properly Promisified. You can subscribe to the Promise returned by them to know when the operation has successfully taken place or has failed. This allows avoiding inconvenient errors when trying to call publish/unpublish or subscribe/unsubscribe operations in a row.
  • New Stream.reconnect method. This method allows you to manually recreate the media connection with the server. openvidu-browser does this for you automatically whenever it detects some unrecoverable error, but now you can actively call this method to restore any media connection (for any Publisher or Subscriber) if your application encounters any kind of unforeseen error.
  • New ExceptionEvent event for the Session object: session.on('exception', exception => {}). This event alerts of different problems that may appear when establishing media connections. You can take a look to the different types of error on ExceptionEventName attribute.

New nodeCrashed WebHook event

There is a brand new CDR/WebHook event available in OpenVidu Pro. The new nodeCrashed event allows you to relocate any Session hosted at a Media Node that crashed into a different healthy Media Node. Take a look to its documentation here.

Client logs can now be sent to Elasticsearch

We keep improving the monitoring features of OpenVidu Pro. A very important aspect when analyzing wrong behaviors and possible bugs in your OpenVidu applications is the logging on the client side. Now with OpenVidu Pro you can enable configuration property OPENVIDU_BROWSER_LOGS (disabled by default) to make openvidu-browser automatically send its logs to Elasticsearch.

Only the openvidu-browser’s own logs are sent (your application’s own logs are not). You can inspect them from OpenVidu Inspector session history view.

Easily access client-side logs from OpenVidu Inspector

New analysis features for OpenVidu Inspector session history

In your OpenVidu Inspector session history view you will see now a new land page showing the percentage of successful and problematic sessions. Problematic sessions now show a new “Troubleshooting” section with the list of detected anomalies.

Summary of successfull and problematic sessions available in OpenVidu Inspector
Now your session history view lists all of the problems detected in past sessions

Improved reconnection capabilities under the hood

Previously the reconnection capabilities were based only on the health of the client-server signaling plane. But the media plane can break on its own, without affecting the signaling plane. And up to this point, the application was completely blind when facing these conditions: the media could simply freeze and nobody would be alerted. But now these situations are also taken into account and media connections will be restored automatically.

Take a look to the revamped section Automatic reconnection to learn more.

BUG FIXES

  • openvidu-browser : Network Quality API wasn’t enabled for Microsoft Edge Mobile. Now it is.
  • openvidu-browser : StreamPropertyChangedEvent had a wrong typed property when triggered by a Filter in the local Stream. The options attribute of the Filter (being set at newValue property of the event) was a string instead of an object. This only affected the local event (the user that triggered the event), remote events were not affected by this bug (those receiving the event from a different user).
  • openvidu-browser : method Publisher.replaceTrack misbehaved when applied to a muted audio or video track. In this case it was unmuting it, leaving the Publisher object in an inconsistent state. Related to 449. This is now fixed.
  • Recording : time response improved when managing a huge amount of recordings in S3. Before when tens of thousands of recordings were being stored in the S3 bucket, the response time when listing or starting recordings could be very high. This is now fixed and these operations have a fast response time, within the normal range.
  • OpenVidu Pro : improved the clean-up process of possible stranded threads when enabling configuration property OPENVIDU_PRO_STATS_WEBRTC_INTERVAL.
  • OpenVidu Inspector : sessions with the same customSessionId could be interchanged when retrieving their information. Now they don't.
  • Text encodings updated to UTF-8 in the server side. Previously special characters could result in wrong symbols depending on the encoder used to decode HTTP messages (such as the WebHook ones). Now using UTF-8 everywhere guarantees a better support for special chars.
  • WebHook is now more resilient. Upon connection failure, it will retry up to 5 times before throwing an error. This may help overcome transient networking issues.
  • Coturn server of OpenVidu stack has been updated to the latest release. This fixes some security issues that could potentially affect past versions.

BREAKING CHANGES

There is a breaking change for the Recording API. We have consolidated the RecordingProperties object so it can be equally used when configuring the default recording properties of a session or when manually starting the recording of a session. This affects the operation of initializing a Session. Visit 2.18.0 Release Notes in OpenVidu documentation to see the exact changes that you should made in case your application is affected.

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

--

--