Connecting a device to the Internet brings a lot of possibilities, but also a lot of challenges. For features such as video calling, file transfer and similar, being able to connect through both professional and home router firewalls in a transparent manner is critical. Collabora is the leading source of expertise in libnice, a NAT traversal library implementing RFC 5245 for Interactive Connectivity Establishment (ICE). ICE is a key part of any WebRTC connection as it allows peers to connect.
One of the main hurdles with the NAT infrastructures used widely on the Internet today is to establish direct connection between two users. This is essential for tasks like VoIP, file transfers and collaborative applications. Libnice solves this problem by implementing the ICE protocol in a small and efficient C library. Libnice is used by a number of WebRTC implementatioins such as OpenWebRTC, Kurento and Janus. Libnice also provides a GStreamer plugin enabling easy integration into GStreamer based applications.
Our engineering team can help you integrate and test libnice for your device or application. The biggest challenge with technologies such as NAT traversal is dealing with the huge amount of applications out there. Different applications have different needs, and although libnice is flexible, the right expertise is often needed to get the most out of it. Collabora have been deploying libnice into real world applications for a long while and can help you ensure that your applications work smoothly in real world scenarios.
Collabora started the libnice project in 2006 to create the first open source library implementing the ICE specification. With the help of the community, libnice quickly evolved into a multi-standard-compatible library not only implementing the standards, but also offering modes capable of replacing Google's libjingle library.
Software developers at Collabora later refactored the library to provide both STUN and ICE APIs. In addition to supporting the RFC 5245 standard, Collabora made the library compatible with libjingle's ICE old specification, as well Microsoft Lync (ex Office Communicator). Collabora also enhanced libnice to support proxies and TURN relays. More recently, Collabora improved TCP-like connections over libnice to support encryption with TLS, contributing new features to the underlying GLib utility library in order to achieve this. Collabora also implemented new methods for integrating libnice with poll loops in programs.
As part of our work on libnice, Collabora added Internet Gateway Device (IGD) support to the GUPnP project, which is the leading implementation of the UPnP specification for Linux and Unix systems.
To read API documentation, download releases, or read the Libnice mailing list, refer to the project wiki. The source tree includes a TODO file, in case you want to get involved in the development of this library, or learn more about its future.