Discover the new easier way to develop Kurento video applications


<Short description>

To install Kurento Media Server: Installation Guide.


New generateOffer(offerToReceiveAudio, offerToReceiveVideo)

Albeit the way applications are typically written have the SDP Offer/Answer being started from the client (i.e. a client browser sends an SDP Offer to KMS), it has always been possible to do the opposite, and start the WebRTC negotiation from KMS, with the client method generateOffer() (i.e. KMS generates an SDP Offer that is sent to the client browser).

However, SDP Offers generated by KMS would always contain one audio and one video media-level sections (those lines starting with m= in the SDP). This would make it impossible to send an audio-only or video-only offer to the clients.

The WebRTC implementation in Kurento strives to be familiar to JavaScript developers who know about the `RTCPeerConnection <`__ browser API, and in this case we are introducing the offerToReceiveAudio / offerToReceiveVideo options that are well known from the `RTCPeerConnection.createOffer() <`__ method. These options can be used to change the SDP Offer generation in KMS, so it is now possible to control whether the offer inclused audio or video, separately.

Example Java code, for an audio-only offer:

import org.kurento.client.OfferOptions;

OfferOptions options = new OfferOptions();

String sdpOffer = webRtcEp.generateOffer(options);

New WebRTC settings: externalIPv4, externalIPv6

The externalAddress parameter, introduced in Kurento 6.13.0, offered a way to tell the media server about its own public IP, without the need to use an additional STUN server. This is a nice feature because then the WebRTC connectivity checks could save some time trying to find out about the public IP in the first place. However, externalAddress would replace all of IPv4 and IPv6 addresses in the ICE candidate gathering phase, which is problematic because the actual type of address wasn’t being taken into account for the substitution.

With the new parameters, externalIPv4 and externalIPv6, it is now possible to define either an static public IPv4 and/or IPv6 addresses. It is now possible to specify any of those, or both at the same time. As usual, this can be done upon installation, by editing the Kurento configuration files, or otherwise it can be set dynamically by the Client Application, via an API call offered by the Java or JavaScript client SDKs.

These parameters supersede the externalAddress, which now is deprecated and scheduled for removal in the next major release of Kurento.

Thanks to @prlanzarin (Paulo Lanzarin) for contributing these new parameters in Kurento/kms-elements#27 (Add externalIPv4/externalIPv6 configs and API methods for them).


  • Description.


  • externalAddress should be replaced by externalIPv4 and/or externalIPv6.


Fixed libnice DDoS

Some users reported a worrying bug that could end up used to force DDoS attacks to machines running Kurento Media Server. The summary of it is that simply sending any bit of data to one of the TCP-Passive ports where the WebRTC engine was listening for connections, would cause a thread to spin-lock and use 100% of a CPU core.

The issue was studied and located to be in libnice, a 3rd-party library that Kurento uses to implement the ICE protocol which is part of WebRTC. libnice developers had a great reaction time and this issue got fixed in a matter of days!

Kurento now brings the newest version of this library, meaning that our favorite media server is now safer and more robust.

Thanks to @darrenhp for reporting this issue in Kurento/bugtracker#486 (libnice cause cpu 100% and don’t restore after ‘attacked’ by a spider or security-scaner).

Big change

Full description, with images, code samples, external links, etc.

Some useful syntax examples:

Thanks for the change

Thank You

There were other changes and fixes contributed by users, who merit our sincere appreciation and thanks for sharing their work with the Kurento project: