VLC - live555 - RTSP - ipv6

Introduction

Ci-dessous une adaptation de la librairie live555 afin qu'il soit possible d'utiliser vlc pour joindre un serveur RTSP supportant IPV6. Les modifications n'ont été testées qu'avec VLC, le but premier étant de faire fonctionner ce dernier avec un serveur RTSP compatible IPV6.

Modifications effectuées dans live555

Autant dire qu'il y avait du travail : live555 avait bien une classe NetAddress. Malheureusement, cette dernière était assez pauvre et assez peu utilisée dans le code.

En effet, le code était parsemé d'uint32, de struct sockaddr_in ou encore de struct in_addr, scellant de cette sorte le code à l'implémentation ipv4.

J'ai réécrit la classe NetAddress afin qu'elle encapsule les différences de structure d'adresses entre ipv4 et ipv6. J'ai donc changé tous les prototypes lorsque c'était nécessaire afin qu'ils utilisent cette classe NetAddress. Cette nouvelle version surcouche directement les struct sockaddr_in d'ipv4 et struct sockaddr_in6 d'ipv6. Cela change la signification que NetAddress avait au départ (elle ne stockait que l'adresse, mais pas le port ni la famille) mais cela améliore l'encapsulation et ça m'a surtout simplifié le travail. J'ai par contre conservé la classe Port, même s'il aurait été sans doute plus opportun de fusionner cette dernière avec NetAddress dans certains cas, au prix d'un peu plus de travail.

J'ai aussi modififié les setsockopt() et autres relatifs à IPV6 (ADD_MEMBERSHIP etc ...)

Par ailleurs, j'ai modifié le parsing d'uri de RTSPClient.cpp afin qu'il supporte la saisie d'ipv6 (format avec des crochets de la forme rtsp://[2001::1234:5678:0910]/toto/test.ts) ainsi que le parsing des SDP.

Il reste encore du travail autour de la classe TunnelEncapsulationTrailer ainsi que de tout ce qui ne concerne pas le RTSP. Ceux qui sont intéressés par ces parties ne devraient malgré tout pas avoir trop de travail.

Et bien sûr, il faut faire des tests et encore des tests. Les changements dans le code de live555 étant très impactants, il se peut que des coquilles se soient glissées ici et là.

Compilation

Pour compiler live555 en 64 bits, j'ai du modifier la ligne COMPILE_OPTS en ajoutant l'option -fPIC. Sinon, rien de bien compliqué :

./genMakefiles linux
make

Pour VLC, se référer à http://www.videolan.org/developers/vlc.html pour de plus amples information. (J'ai fait le test avec la version 1.1.9 de vlc)

Au minimum, il faut donner le chemin de live555 au moment du configure de vlc :

./configure --with-live555-tree=/path/to/live
make

Sources

Plutôt qu'un patch, je fournis ici l'ensemble des sources. J'ai fait le travail avec la version du 2011.03.14. Il est fort regrettable qu'il y ait pas de svn/git pour la librairie, cela n'encourage pas les contributions (Mais est-ce que l'auteur de live555 cherche à les encourager - je ne le pense pas)

Liens

Valid XHTML 1.0!