It was a long wait but it was worthy: today Kurento Media Server v 6.0 (KMS v6.0) has come to live. KMS v6.0 is the answer to the feedback we have received from the Kurento community during the last year. In this time, the community has growth significantly and now more than 300 companies are using Kurento with different objectives. As a result, more and more services involving Kurento are coming to production and the need of enhanced stability, efficiency and monitoring capabilities has become the main demand.
KMS v5.x was focused exposing a huge number of capabilities beyond the reach of the rest of media servers out there. In a natural step on the evolution of a large software project, KMS v6.0 has been focused on improving stability and efficiency Somehow, we consider KMS v6.0 as the first version of our media server suitable to be considered as “production ready” in the sense that it provides the appropriate characteristics for being integrated into production systems.
From this perspective KMS v5.x and v6.0 APIs are very similar. The only significant difference is that v6.0 WebRtcEndpoint negotiation scheme is based on Trickle ICE and does not support the (desperately) slow mechanism based on exchanging candidates as part of SDPs. This has a cost because v5.x WebRTC applications are not compatible with KMS v6.0, but that drawback is compensated with a relevant increase in connectivity speed. For example, v5.x average time for establishing a WebRTC stream between a browser and the media server was around 16 seconds (considering the need of generating STUN and TURN candidates). This same stream takes now an average of 3 seconds on most common network topologies, which clearly brings a significant improvement for QoE and end-user satisfaction.
This incompatibility on WebRTC APIs may be annoying for KMS v5.x developers wishing to migrate to v6.0. However, the good news is that modifications required by applications are minor and it should not be complex to adapt them with a relatively small time investment. As a guide, we have adapted all our tutorials to support Trickle ICE so that developers can figure out how to add support for it in a seamless way. Take a look to kurento-tutorial-js, kurento-tutorial-node and kurento-tutorial-java projects in our GitHub repo if you want to figure out how to make such migration.
Otherwise, KMS v 6.0 brings only advantages. The most remarkable ones are the following:
- Full migration to GStreamer 1.5 for enjoying latest improvements on the low level media capabilities KMS has been written on. Any new enhancement, fix or improvement in GStreamer 1.5 gets automatically incorporated in KMS.
- Full migration to OpenSSL, which enhances security and avoids the many instabilities KMS v5.x had in its DTLS implementation.
- Tons of bug fixes both in KMS and in GStreamer (hard word here in cooperation with the GStreamer community). This makes KMS v6.0 to me much more stable, which is significantly noticeable in case of high load conditions. This also avoids most of the concurrency problems KMS v5.x was suffering.
- Efficiency improvement in around 30% in most use cases, with the corresponding improvement on the scalability.
- Support for AES Hardware acceleration on Intel platforms, which makes possible to improve WebRTC performance in and additional 15%.
- Support for WebRTC monitoring capabilities through an implementation of the WebRTC W3C Stats recommendation for RTP streams. This makes possible to obtain statistics showing how WebRTC applications behave in real-time.
- Improved WebRTC congestion control algorithm providing much better QoE in presence of eventual packet loss. In addition, the algorithms has been parameterized and the corresponding parameters have been exposed as part of the WebRtcEndpoint API, so that it can be customized to behave appropriately under specific network conditions.
- Enhanced configuration mechanism for KMS enabling each module to be configured in a specific configuration file.
- Enhanced log management mechanism avoiding log files to become to large and implementing the appropriate log rotation mechanisms.
- Enhanced recording capability fixing the problems KMS v5.x had with time stamps and providing full support for MP4 format: one of the requests more demanded by Kurento developers.
- Enhanced and adapted documentation.
Besides KMS, we have also made public the Kurento Room API, making possible to create room-based application for group communications basing in Kurento. You can take a look to this API and to a room application based on this API in the kurento-room repository.
To conclude, the KMS team is currently working in further enhancements of the media server that shall be integrated soon in v6.0. These include:
- Support for DataChannels as part of WebRtcEndpoint capabilities (half the way here)
- Support for automatic quality adaptation of transcoding, so that developers don’t need to set transcoding quality at a fixed value any longer.
- Support for measuring end-to-end (pass-through) latency for media streams managed by the media server.
However, if you really want to appreciate the whole power of Kurento, follow carefully the evolutions of the NUBOMEDIA and FIWARE projects: the two research initiatives funded by the European Commission, which are pushing Kurento to the next level. The elastic cloud media server is coming … and this will change everything you know about media infrastructures.