Vidéo à la demande et multicast

Objectifs de ce document :

* Extraire et retoucher un fichier vidéo ou audio à partir d’un DVD (découpage, encodage…). La piste vidéo obtenue nous servira de base pour le reste du document.
* Déployer une infrastructure de vidéo à la demande.
* Diffuser une vidéo en multicast.

De quoi à t’on besoin ?
* D’une adresse IP publique.
* D’ouvrir quelques ports TCP ou UDP sur votre pare feu.
* Des logiciels suivants (gratuits ou open source) :
* DVD Shrink 3.2 (http://www.clubic.com/…/dvdshrink.html)
* Virtual Dub (http://www.virtualdub.org/download)
* VLC (http://www.videolan.org/vlc/)
* Darwin Streaming Server(http://developer.apple.com/…/index.html)
* MP4Creator (http://www.gromkov.com/faq/faq2004-0060.html)
* TCP View (http://www.zdnet.fr/…/11011228s,00.htm)
* Ethereal/Wireshake (http://www.wireshark.org/download.html

Remarque :
Ce document est téléchargeable au format PDF à l’adresse suivante :
http://msreport.free.fr/articles/multimedia/VOD_MulticastV.1.0.pdf

1. Extraire et retoucher un fichier vidéo ou audio :

1.1 Vérifier la version de DirectX :
Lancer l’utilitaire dxdiag.

dxdiag

1.2 Extraire une minute de vidéo :
Pour cela on va utiliser DVD Shrink 3.2.
Dans DVD Shrink 3.2 et cliquer sur « Ouvrir DVD ».
Cliquer sur le bouton « Remaniement ».

DVD Shrink

Dans la fenêtre « Explorateur DVD », faire un glisser/déposer vers la fenêtre « Structure DVD » et cliquer sur « Déterminer image de début et de fin ».

DVD Shrink

DVD Shrink

Cliquer ensuite sur « Sauver » pour sauvegarder la vidéo.

1.3 Editer d’un fichier .vob :
On va utiliser le fichier VobEdit.
Pour connaître les spécifications de la vidéo, il faut éditer une « image I ».
Pour connaître les spécifications audio, il faut éditer une piste audio.

Comme vous pouvez le contater, une vidéo est une suite d'images et de pistes audio.

Caractéristiques du fichier vob :
Résolution spatiale :
Video width : 720
Video height : 576
Aspect Ratio : 16/9
Résolution temporelle (frame rate) : 25 images/seconde
Résolution chromatique (Chroma Format) : 4 :2 :0
La taille d’un pack vidéo : 2028 bits
Structure GOB : IBBPBBPBBPBBI
Débit binaire vidéo : 392000 bit/s
Format codage audio : AC3
Nombre de canaux audio : 5
Débit binaire audio (nominal bitrate) : 192 kbit/s
Fréquence d’échantillonnage audio : 32khz

1.4 Convertir un fichier vob en fichier avi :
Un fichier vob est un fichier MPEG chiffré (format protégé).
Pour faire cela, on va utiliser « DVD2AVI » et « VFAPI ».
Sous DVD2AVI, enregistrer le projet au format d2v.
Sous VFAPI, ouvrir le fichier d2v créé avec DVD2AVI et l’enregistrer au format avi.
Remarque :
On procède ainsi car si on exporte un fichier vob au format avi avec DVD2AVI, le fichier est décompressé.
Retoucher un fichier avi :
Le but est de découper le fichier avi en deux fichiers.
Pour cela, on va utiliser Virtual Dub.

Pour ne pas changer la compression du fichier :
Dans Virtual Dub, aller dans le menu Vidéo et sélectionner Direct Stream Copy.

1.4.1 Découper le fichier avi :

Positionner le curseur au début de la séquence à conserver puis cliquer sur la flèche de gauche (avant dernier bouton en dessous de l’image). Déplacer ensuite le curseur à la fin de la séquence à conserver et cliquer sur la flèche de droite Sauvegarder ensuite le fichier.

VirtualDub

1.4.2 Utiliser la fonction CROP :

Le but est de supprimer la bande noire autour de la vidéo. Cela va permettre de diminuer la taille de la vidéo (moins de chose à compresser).

Pour faire cela aller dans le menu Vidéo et cliquer sur Filters. Sélectionner le filtre null transform (ce filtre n’applique aucune modification). Pour appliquer la fonction de CROP, il faut en effet sélectionner au moins un filtre.

Fonction NULL TRANSFORM.

Pour cela, on fait varier les paramètres X1, X2, Y1, Y2 jusqu’à suppression des bordures.
Encodage/compression :
Pour activer les fonctions de compression de Virtual Dub, aller dans le menu Vidéo et sélectionner Full Processing Mode.
Avec un bitrate de 400 kbit/s, on constate clairement une dégradation de la qualité de l’image.
Utilisation du programme Aspect :
Aspect permet de déterminer le vidéo bitrate et le ratio bit/pixel à partir :
de la résolution spatiale
du bitrate audio
de la taille du fichier de sortie
du la durée de la vidéo à encoder.
Dans notre cas il va nous permettre de déterminer la résolution à utiliser sachant que nous devons avoir un rapport bit/pixel supérieur à 0,15 et un bitrate vidéo proche de 400 Kbits/s.

Remarque :
Pour que la qualité d’une vidéo demeure de bonne qualité, le ratio bit/pixel ne doit pas être inférieur à 0,15.

Attention le bouton jaune à côté de Bits/pixel indique que la video va être de qualité moyenne.

Dans notre cas nous allons choisir une résolution spatiale de 448*252.
1.5 Modifier la résolution spatiale d’une vidéo :

Nous allons utiliser le filtre «Resize » de Virtual Dub. Il faudra alors sauvegarder la nouvelle vidéo.

Filtre Resize pour changer la résolution d'une vidéo.

1.6 Changer le format de compression vidéo :
Dans Virtual Dub, cliquer sur le menu Vidéo puis sélectionner « Full Processing Mode ».
Aller ensuite dans le menu « Vidéo » et cliquer sur « Compression ».

Choix du format de compression. VLC gère de très nombreux formats en natif. 

Paramètres du codec. Remettre ce qui a été calculé à partir de l'application Aspect

1.7 Exportation d’une image depuis une vidéo :
Nous allons utiliser Virtual Dub pour cela.
Le principe est le même que pour découper un film en prenant uniquement deux images.
Il faut ensuite aller dans le menu fichier et cliquer sur Save Image Sequence.

Définition du nombre et du format des images à capturer.

1.8 Mesurer la qualité d’une vidéo à l’aide du PSNR :
Le PSNR est la mesure du rapport signal sur bruit. Pour cela on va comparer le fichier vidéo d’origine avec le fichier vidéo que l’on vient de compresser.
On va utiliser l’application psnr4avi.exe.

Pour calculer le PSNR de l’image :
PSNR4AVI [Nframes] [StartFrame1] [StartFrame2]
Avec :
avifile1 – premier fichier AVI de référence [OBLIGATOIRE];
avifile2 – second fichier AVI à comparer [OBLIGATOIRE];
Nframes – numbre d’images à comparer [OBLIGATOIRE];
StartFrame1 – numéro de l’image de départ dans le premier fichier AVI [OBLIGATOIRE];
StartFrame2 – numéro de l’image de départ dans le second fichier AVI [OPTIONEL];

Le résultat

Pour que le calcul du PSNR moyen soit plus fiable nous allons prendre sur les 500 premières images.
La vidéo source (l’extrait du DVD au format avi) ne doit pas être compressée.
Pour cela dans Virtual DUB, on va sélectionner l’option « Uncompressed » comme format de compression vidéo.

Attention une séquence vidéo non compressée de 30 minutes peut prendre plusieurs dizaines de gigoctets sur votre disque

Remarques :
Dans notre cas la vidéo aura une résolution spatiale de 384*288.
La vidéo en mode décompressé prend beaucoup de place. Pour 1 minute de vidéo, 473 mégaoctets occupés sur le disque.

2. Communication vidéo sur IP en mode vidéo à la demande :

2.1 Convertir une vidéo dans un format de compression compatible temps réel :

Conversion du fichier vidéo AVI du TP1 en Mp4
Conversion du fichier audio du Wave au Mp3 avec DVD2avi
Multiplexage de la vidéo et de l’audio (en Mp3) avec mp4creator.

Commande utilisée : mp4creator -hint -c=monaudio.mp3 mavideo.mp4

2.2 Installation et configuration du serveur de streaming Darwin Streaming Server (DSS) :
Pour l’installation du serveur il nous faut installer le logiciel Pearl (module Pearl).
Pour lancer le serveur, il faut exécuter la commande :
C:\DarwinStreamingServer\DarwinStreamingServer.exe -d

Installation du serveur 

Configuration du service

2.3 Liste des ports :
Les ports ouverts par Darwin Streaming Server sont :
TCP 1031
TCP 554
TCP 7070
TCP 8000
TCP 8001
UDP 6970
UDP 6971

Capture avec TCP View

Le port standard est le TCP 554.
Les autres ports sont des ports propriétaires que différents éditeurs utilisent.
Donc pour être sur de pouvoir répondre à l’ensemble des requêtes client, D.S.S. écoute sur tous les ports.
Test de communication en mode en « Vidéo on Demand » :
Nous avons lancé la séquence en .AVI et nous avons constaté une erreur de lecture.
En fait le format de fichier avi ne supporte pas la diffusion en temps réelle.
En effet, il stocke l’ensemble des paramètres de la vidéo à la fin du fichier.
C’est pourquoi le serveur D.S.S n’arrive pas à identifier le flux binaire, faute d’informations sur le dimensionnement, le nombre d’images par seconde, et les codecs audio et vidéo utilisés.
C’est pour cela que l’on doit convertir un fichier AVI en Mp4.
En MP4 on met en en tête l’ensemble des infos permettant au client de pouvoir savoir quel type de flux il va devoir gérer.

En ce qui concerne la séquence en .MP4, la séquence ce lance correctement sur le client distant avec le port destination TCP 554 qui est défini en ESTABLISHED sur le serveur et un port source dynamique supérieur à 1024 dans notre cas 1915.
Nous avons contacté quelque perte de fluidité sur la séquence mais cela reste tout à fait acceptable.

Connexion établie, on peut voir que le statut passe à ESTABLISHED.

2.4 Les protocoles :

2.4.1 RTP :
RTP est un protocole de transport de flux temps réel.
Dans un flux multimédia, le son est transporté dans une session RTP distincte de la session RTP pour la vidéo.
Pour cette raison, dans notre cas on a deux sessions RTP :
Source UDP 6970 (serveur) vers destination UDP 1918 (poste client).
Source UDP 6970 (serveur) vers destination UDP 1916 (poste client).

2.4.2 RTCP :
RTCP permet d’envoyer des informations comme notre nom, des rapports sur la qualité du flux RTP(le plus important), échange des données d’indentification.
Il y a une session RTCP pour une session RTP.
Source UDP 6971 (serveur) vers destination UDP 1917 (poste client).
Source UDP 6971 (serveur) vers destination UDP 1919 (poste client).
Il y a un port de contrôle part flux donc un pour l’image et un pour le son. Ce flux est bidirectionnel entre le serveur et le client.

2.4.3 RTSP :
RTSP permet de sélectionner le mode de transport (multicast…) et de simuler les fonctions d’un magnétoscope (marche, arrêt, pause…).
Il n’y a qu’une session RTSP.
Remarque :
Le protocole RTSP s’exécute avant RTP. Il écoute les requêtes clientes. Après c’est des échanges RTP et RTCP (RTCP est un protocole de contrôle).
On utilise des ports TCP pour des échanges de commande mais pas pour les flux audio et vidéo (protocole RTP = UDP).

2.5 Nombre de flux et de rapports RTCP :

Il y a 5 flux :
* Un RTSP
* Deux RTP
* Deux RTCP
Le pourcentage de flux RTCP et proportionnel au volume du protocole RTP à niveau de 4 ou 5 % du flux RTP.

3. Streaming vidéo en mode diffusion multicast sur IPv4 :

Une application intéressante (mais totalement illégale) pour les personnes chez free peut être de récupérer le flux télévision et de le réexpédier en temps réel vers un tiers sur Internet. Cette personne doit au moins avoir un débit en téléchargement de 1024 Kbits/s afin de conserver une qualité d’image correcte. Il faudra aussi compresser en temps réel le flux télévision en H264. En effet, ce codec permet de conserver une qualité suffisante tout en ne dépassant par un débit de 1024 Kbits/s (maximum en upload chez Free). Cela n’est possible que pour une machine équipée d’un processeur puissant (PIV 1,8 GHz minimum).

3.1 Sur le serveur :

Avec VLC, cliquer sur « Ouvrir un fichier avancé ».

VLC

Cliquer ensuite sur Paramètres.

Sélectionner Jouer en local si vous voulez voir le flux sur le serveur. 

3.2 Sur le poste client :

Cliquer sur Ouvrir un flux

Utiliser l'adresse IP multicast configuré sur le serveur. 

Capture du trafic avec Ethereal :

Capture sur Ethereal

Laisser un commentaire