\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usetheme{Warsaw}
\usecolortheme{crane}

\title{La télévision au Cr@ns}
\author{Stéphane Glondu}
\institute{Séminaire Technique du Cr@ns}
\date{17 janvier 2006}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}
  \frametitle{Plan}
  \tableofcontents[hideallsubsections]
\end{frame}

\section{Les standards de la télévision numérique}

\begin{frame}
  \frametitle{Les standards de la télévision numérique}
  \tableofcontents[currentsection]
\end{frame}

\subsection{Présentation}
\begin{frame}
  \frametitle{Présentation des standards}
 
  \begin{itemize}
  \item<1-> \emph{DVB (Digital Video Broadcasting)}: standards ouverts reconnus
    mondialement pour la diffusion de télévision numérique
  \item<2-> Ils définissent aussi bien la couche matérielle que la
    couche de données.
  \end{itemize}
\end{frame}

\subsection{Les standards matériels}
\begin{frame}
  \frametitle{Les standards matériels}
 
  \begin{itemize}
  \item<1-> Plusieurs supports matériels:
    \begin{itemize}
    \item<2-> satellite (DVB-S et DVB-S2)
    \item<2-> TNT (DVB-T)
    \item<2-> TNT pour ordinateurs de poche (DVB-H)
    \item<2-> câble (DVB-C)
    \end{itemize}
    \uncover<3->{Le Cr@ns récupère la TV par les deux premiers moyens.}
  \item<4-> Principale différence entre les différents supports:
    type de modulation (phase/amplitude/fréquence),
    fréquences (SHF/VHF/UHF).
  \end{itemize}
\end{frame}

\subsection{Les standards logiciels}
\begin{frame}
  \frametitle{Les standards logiciels}
 
  \begin{itemize}
  \item<1-> Pour la vidéo et le son, c'est essentiellement du MPEG-2.
  \item<2-> Les bandes sonores multiples sont supportées.
  \item<3-> Possibilité de chiffrement et de gestion de droits, pour les
    chaînes payantes.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Méta-données}
 
  \begin{itemize}
  \item<1-> Mais les standards prévoient aussi une multitude de protocoles
    annexes. Par exemple:
    \begin{itemize}
    \item<2-> des canaux de retour de données (DVB-RC)
    \item<2-> informations de service (DVB-SI)
    \item<2-> sous-titres (DVB-SUB)
    \item<2-> données arbitraires (DVB-DATA)
    \end{itemize}
    \uncover<3->{Aucun de ces protocoles n'est actuellement exploité au Cr@ns.}
    \uncover<4->{(message subliminal)}
  \end{itemize}
\end{frame}

\subsection{Un peu plus en détail}
\begin{frame}
  \frametitle{Concrètement, ça se présente comment?}
 
  \begin{itemize}
  \item<1-> Il faut brancher une antenne (rateau ou parabole) correctement
    installée à une carte DVB adéquate.
  \item<2-> En accordant la carte à une certaine fréquence, on obtient un
    \emph{transpondeur} (encore appelé \emph{multiplex}), qui peut encapsuler
    plusieurs flux.
  \item<3-> Le transpondeur est géré par le driver de la carte DVB, c'est
    le logiciel de diffusion qui décide quoi en faire par la suite.
  \end{itemize}
\end{frame}

\section{La télévision par le réseau}

\begin{frame}
  \frametitle{La télévision par le réseau}
  \tableofcontents[currentsection]
\end{frame}

\subsection{Quelques rappels}

\begin{frame}
  \frametitle{Le modèle DoD}
 
  Il se décompose en quatre couches:
  \begin{itemize}
  \item<2-> couche 1 (physique)
  \item<2-> couche 2 (IP)
  \item<2-> couche 3 (transport)
  \item<2-> couche 4 (application)
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Connecté ou pas connecté?}
 
  Au niveau transport, on distingue deux principaux protocoles:
  \begin{itemize}
  \item<2-> le plus évolué, \emph{TCP}, intègre la gestion des erreurs. Par
    exemple, quand un paquet est perdu ou corrompu, le client le
    redemande au serveur.
  \item<3-> le plus basique, \emph{UDP}, qui n'intègre aucune gestion des
    erreurs. En particulier, il n'y a aucune garantie qu'un paquet
    émis soit reçu.
  \end{itemize}
  \uncover<4->{Pour les applications en temps réel comme la télévision,
  on préfère l'UDP.}
\end{frame}

\subsection{La diffusion à travers le réseau}

\begin{frame}
  \frametitle{Unicast/Broadcast/Multicast}

  \begin{itemize}
  \item<2-> En général, un paquet émis a soit un seul destinataire (\emph{unicast}), soit
    tous les ordinateurs connectés au même réseau physique (\emph{broadcast}). Pour
    envoyer des données à plusieurs destinataires, le serveur doit
    dupliquer lui-même les paquets.
  \item<3-> Le protocole IP prévoit aussi le \emph{multicast}, où un paquet peut
    avoir plusieurs destinataires sans pour autant toucher tout le
    réseau local. Les applications du multicast sont généralement
    faites à petite échelle (au Cr@ns, par exemple).
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Multicast IP}
  \begin{itemize}
  \item<1-> En multicast, le serveur n'a qu'un paquet à envoyer, ce sont
    les équipements intermédiaires du réseau (comme les switchs) qui font
    la duplication.
  \item<2-> Il existe plusieurs protocoles, on s'intéressera par la suite
    à l'\emph{IGMP} (couche IP).
  \item<3-> Au niveau transport, on privilégiera UDP.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{IGMP (Internet Group Management Protocol)}
  \begin{itemize}
  \item<1-> En IPv4, une plage d'adresses (224.0.0.0--239.255.255.255) est
    réservée au multicast.
  \item<2-> Le serveur envoie les paquets à une de ces adresses. Dans la
    terminologie IGMP, chacune de ces adresses constitue un \emph{groupe}.
  \item<3-> Chaque client peut demander à s'\emph{abonner} à un groupe en
    indiquant à qui veut l'entendre (un switch, par exemple) qu'il
    veut recevoir les paquets de telle adresse.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Ça se passe comment au niveau en-dessous?}
  \begin{itemize}
  \item<1-> On considère ici le cas où le multicast est entièrement géré par des switches.
  \item<2-> Les switches supportant le multicast doivent élire un
    \emph{querier} unique par sous-réseau.
  \item<3-> Le querier est l'interlocuteur privilégié pour la gestion du
    multicast.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{La démocratie chez les machines}
  \begin{enumerate}
  \item<2-> Par défaut, un switch se déclare lui-même querier et rentre
    donc dans l'\emph{état de querier}: il envoie alors
    des paquets \emph{IGMP Membership Query} sur le réseau à
    intervalles réguliers. Ces paquets ont un TTL de 1, ils ne
    passeront donc jamais au travers d'un routeur standard.
  \item<3-> Dès qu'il reçoit un paquet IGMP Membership Query d'un autre
    switch d'adresse IP plus petite, il choisit ce switch comme
    querier et sort donc de l'état de querier.
  \item<4-> Au bout d'une durée paramétrable, il se remet dans l'état de querier.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Et le client?}
  \begin{itemize}
  \item<1-> Dès qu'un client veut s'abonner à un groupe ou confirmer son
    abonnement, il envoie un paquet \emph{IGMP Membership Report} à l'adresse
    du groupe dont il veut être membre.
  \item<2-> Les switches se débrouillent alors eux-mêmes pour lui faire
    parvenir le flux.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{À quel groupe s'abonner?}
  \begin{itemize}
  \item<1-> Le protocole \emph{SAP (Session Annoucement
    Protocol)} est utilisé pour déterminer quels sont les groupes
    disponibles. Pour la télévision, par exemple, la liste des chaînes.
  \item<2-> Ce sont des paquets UDP envoyés en multicast.
    En IPv4, ces annonces sont faites à l'adresse 224.2.127.254, port 9875.
  \end{itemize}
\end{frame}

\section{Au Cr@ns}

\begin{frame}
  \frametitle{Au Cr@ns}
  \tableofcontents[currentsection]
\end{frame}

\subsection{Solutions envisagées et adoptées}

\begin{frame}
  \frametitle{Différentes possibilités}

  Différentes possibilités ont été envisagées, notamment:
  \begin{itemize}
  \item<2-> vlc, qui permet la diffusion d'une chaîne en particulier après
    un traitement éventuel (consomme beaucoup de processeur)
  \item<3-> dvbstream, qui renvoie directement tout un transpondeur sur le
    réseau (consomme beaucoup de bande passante)
  \end{itemize}
  \uncover<4->{Aucune de ces deux solutions ne nous convenait, nous (principalement
  Brice Dubost) avons donc développé mumudvb en se basant sur dvbstream.}
\end{frame}

\begin{frame}
  \frametitle{mumudvb}

  \begin{itemize}
  \item<1-> mumudvb:
    \begin{enumerate}
    \item<2-> récupère un transpondeur
    \item<2-> sépare les différents flux
    \item<2-> les envoie sur des adresses IP distinctes
    \item<2-> génère des informations potables pour le serveur SAP
    \end{enumerate}
  \item<3-> Avantages:
    \begin{enumerate}
    \item<4-> utilisation relativement faible du processeur
    \item<4-> optimisation de la bande passante
    \end{enumerate}
  \end{itemize}
  \uncover<5->{mumudvb a été développé en C, mais des scripts Python
    sont aussi utilisés pour gérer la configuration.}
\end{frame}

\subsection{La ferme}

\begin{frame}
  \frametitle{La ferme}
  \begin{itemize}
  \item<1-> La \emph{ferme}: serveurs de diffusion de la télé au Cr@ns
  \item<2-> Localisée virtuellement dans le domaine ferme.crans.org
  \item<3-> Localisée physiquement au 4J, avec le joujou de François
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{La fierté de la ferme}
  La diffusion est répartie actuellement sur trois serveurs:
  \begin{itemize}
  \item<2-> canard: 1 carte TNT, 4 cartes satellite, 21 chaînes diffusées
  \item<2-> oie: 5 cartes satellite, 29 chaînes diffusées
  \item<2-> lapin: 4 cartes TNT, 2 cartes satellite, 29 chaînes diffusées
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Diffusion}
  \begin{itemize}
  \item<1-> On ne capte et ne diffuse pour l'instant que des chaînes gratuites
  du satellite Hotbird (13.0°E) et la TNT.
  Cela inclut des stations radio.
  \item<2-> Chaque machine qui diffuse exécute son propre
    serveur SAP
    (minisapserver, du projet VideoLAN)
    qui se charge des annonces la concernant.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{La honte de la ferme}
  Il y a aussi d'autres serveurs dans le même local:
  \begin{itemize}
  \item<2-> mouton: il consacre tout son temps et ses ressources à générer
    en boucle des vignettes pour le site web
    tv.crans.org. Attention: extrêmement lent, mise à
    jour cfengine laborieuse, prévoir un bouquin pour voir la fin d'un boot!
  \item<2-> epave: utilisé jadis pour faire des tests.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Hors de la ferme}
  \begin{itemize}
  \item<1-> Les switches D-Link (DES) utilisés partout dans le passé ne
    supportent pas le multicast. Les adhérents connectés derrière ces
    switches ne pouvaient donc pas profiter de la télé.
  \item<2-> Ces dernières années, on a progressivement remplacé les switches
    D-Link par des switches HP (Procurve 26xx) qui, eux, le gèrent. Il ne reste plus
    maintenant que le Pavillon des Jardins à équiper.
  \end{itemize}
\end{frame}


\subsection{Regarder la télé}

\begin{frame}
  \frametitle{Bon, concrètement, on fait comment pour regarder la
    télé?}

  \begin{itemize}
  \item<2-> Pour les geeks: on connaît par c\oe{}ur l'adresse IP de la chaîne
    qu'on veut regarder. On peut utiliser à peu près n'importe quel
    logiciel capable de lire à partir d'un flux réseau, par exemple:
    xine udp://239.200.200.202:1234.
  \item<3-> Pour les linuxiens moins geeks: on peut utiliser le script
    CransTV (développé à l'origine par Malo Denielou), qui récupère
    les vignettes générées par mouton et utilise xine.
  \item<4-> Pour tout le monde: on peut utiliser VLC, qui sait lire les
    annonces SAP et donc lister la liste des chaînes disponibles.
  \end{itemize}
\end{frame}

\section*{}

\begin{frame}
  \frametitle{En cours}
  \begin{itemize}
  \item Modification de mumudvb et des scripts annexes pour qu'ils
    soient logiques au niveau des noms de fichier utilisés
  \item Traduction en anglais, pour une plus grande portée
  \item Écriture d'un vrai démon?
  \item Constitution d'un paquet Debian non spécifique au Cr@ns
  \item Gestion des fichiers spécifiques au Cr@ns par cfengine
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Questions?}
\end{frame}

\end{document}
