Vous êtes sur la page 1sur 7

Résultats des tests de bande-passante

Ce rapport présente les différentes manières de contrôler le débit du flux vidéo d’une caméra IP,
lorsqu’on streame celui-ci d’un ordinateur à un autre en utilisant Gstreamer. Ce contrôle se fait via
les paramètres affectés à la ligne de commande lançant l’émetteur de flux vidéo. Cette commande
est la suivante :

gst-launch -v rtspsrc location=rtsp:// x.x .x .x:554/mpeg4/media.amp ! queue ! decodebin !


capsfilter caps="video/x-raw-yuv" ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession
name=session .send_rtp_src ! udpsink port=5000 host= X.X.X.X session.send_rtcp_src ! udpsink
port=5001 host= X.X.X.X

où x.x.x.x est à remplacer par l’adresse IP de la caméra IP, et X.X.X.X par l’adresse IP de
l’ordinateur où se trouve le récepteur vers lequel on veut streamer le flux vidéo de la caméra.

Les paramètres influant sur le débit du flux vidéo sont les suivants :

- Le framerate (paramètre du capsfilter)


- La hauteur et la largeur de la vidéo (paramètres du capsfilter, toujours)
- Le bitrate (paramètre de l’encodeur Theora)
- Le paramètre quality (paramètre de l’encodeur Theora)

Remarque : toutes les données présentes dans les graphes sont des données approximatives. En
effet, la taille du flux vidéo est soumise aux aléas du trafic sur la bande passante. Il se peut donc qu’il
y ait une variation d’à peu près 10 Kbps pour les petits débits, et une variation montant jusqu’à 40
Kbps pour les débits plus importants.

Le framerate
Le framerate détermine le nombre d’images à la seconde. Donc plus celui-ci est petit, plus la part
de bande passante consommée par le flux vidéo sera petite. C’est le paramètre qui a le plus
d’influence sur le débit final. Sa plage de valeurs dépend de l’encodeur vidéo utilisé. Dans le cas de
l’encodeur Theora ici utilisé, il peut aller de 0 image par seconde à 2147483647 images à la seconde.
Le système d’exploitation du récepteur n’influe pas sur le débit du flux vidéo, comme le démontre le
graphe ci-dessous :
Fig. 1.1. : Evolution du débit en fonction du
framerate
1400
1200
1000
Débit (en Kbps)

800
600 De Linux à Windows
400 De Linux à Linux
200
0
(1/3) 1 5 15
Nombre d'images par seconde

Les modifications à apporter à la commande afin de fixer le framerate sont ici représentées en
vert :

gst-launch -v rtspsrc location=rtsp://x.x .x .x:554/mpeg4/media.amp ! queue ! decodebin ! queue


! videorate ! capsfilter caps="video/x-raw-yuv,framerate=(fraction)1/3" ! theoraenc ! rtptheorapay !
.send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=X.X.X.X
session.send_rtcp_src ! udpsink port=5001 host=X.X.X.X

Le bitrate
Le bitrate impose, en théorie, le débit du flux vidéo. Il est compris entre 0 et 3000, et se
compte en kilo bits par seconde (Kbps). Cependant, il arrive souvent que la valeur réelle du bitrate ne
corresponde pas à la valeur imposée en théorie. Par exemple, lorsque le framerate est très bas, peu
importe la valeur qu’on a assignée au bitrate, il vaudra toujours entre 25 et 35 Kbps. En effet, vous
pouvez voir sur les graphes ci-dessous que, bien que le bitrate imposé ait une influence sur le débit
effectif, ce dernier reste essentiellement dominé par la valeur du framerate. Ainsi, pour un framerate
élevé, le débit restera élevé, et pour un framerate bas, il restera bas. De plus, vous pouvez également
voir que le bitrate effectif ne dépend pas du système d’exploitation du récepteur, puisque les valeurs
sont très similaires entre Linux et Windows.
Fig. 2.1. : Correspondance entre bitrate
théorique et effectif lors d'une transmission
de Linux à Windows
900
Valeur du bitrate réel (en Kbps)

800
700
600
500
400 (1/3) image par seconde
300 1 image par seconde
200
100 5 images par seconde
0
32 128 256 768
Valeur du bitrate imposé (en Kbps)

Fig. 2.2. : Correspondance entre bitrate


théorique et effectif lors d'une transmission
de Linux à Linux
900
Valeur du bitrate réel (en Kbps)

800
700
600
500
400 1/3 image pas seconde
300 1 image par seconde
200
100 5 images par seconde
0
32 128 256 768
Valeur du bitrate imposé (en Kbps)

Les paramètres à modifier afin d’imposer le bitrate sont ici représentés en vert :

gst-launch -v rtspsrc location=rtsp:// x.x .x .x:554/mpeg4/media.amp ! queue ! decodebin !


capsfilter caps="video/x-raw-yuv" ! theoraenc bitrate=128 ! rtptheorapay ! .send_rtp_sink
gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host= X.X.X.X session.send_rtcp_src !
udpsink port=5001 host= X.X.X.X
La taille de l’image
Curieusement, modifier les paramètres « width » et « height » du caps influe
considérablement sur le débit du flux vidéo, bien qu’en théorie il ne devrait pas y avoir moins
d’informations circulant dans le cas d’une image plus petite. En effet, comme vous pouvez le voir sur
le graphe ci-dessous, dans le cas d’un framerate d’une image à la seconde, augmenter la taille de
l’image affichée augmente considérablement le débit du flux vidéo.

Fig. 3.1. : Evolution du débit en fonction de la


taille de l'image
140
120
100
Débit (en Kbps)

80
60 De Linux à Windows
40 De Linux à Linux
20
0
240x180 320x240 600x450 800x600
Taille de l'image affichée (en pixels)

Les paramètres width et height peuvent prendre des valeurs comprises entre 1 et
2147483647 pixels dans le cas de l’encodeur Theora. Cependant, il est intéressant de souligner que la
valeur du bitrate l’emporte sur le format de l’image, c’est-à-dire que si l’on impose un bitrate ainsi
qu’un format d’image, c’est la valeur du bitrate qui va se révéler être déterminant pour la valeur du
débit réel. Par exemple, toujours avec un framerate d’une image par seconde, si l’on impose une
taille d’image de 800x600, ou de 600x450, et un bitrate de 32 Kbps, on finit par obtenir un débit
effectif de 45/50Kbps, ce qui correspond bien, comme on peut le voir sur la figure 2.1., à la valeur
que l’on aurait obtenu si l’on avait pas imposé de taille. Cependant, si le débit obtenu avec le format
d’image utilisé est inférieur à celui obtenu avec le bitrate utilisé, il se peut que le débit final soit
considérablement diminué par rapport à la valeur obtenue avec un tel bitrate. Par exemple, pour un
bitrate de 768 avec une image de 240x180, on obtient un débit de 145 Kbps. Ce qui est largement
inférieur au débit de 350 Kbps qu’on obtiendrait normalement avec un tel bitrate, mais cela reste
supérieur au débit de 20 Kbps imposé par une image de 240x180. Le débit final est donc influencé
par cette petite taille, sans qu’elle ne le détermine entièrement pour autant.
Fig. 3.2. : Evolution du débit en fonction du
bitrate et du format de l'image
400
350
Débit effectif (en Kbps)

300
250 Taille par défaut
200 240x180
150 320x240
100
600x450
50
800x600
0
32 128 256 768
Valeur du bitrate imposé (en Kbps)

Sur le graphe ci-dessus, on peut clairement voir qu’une petite taille de fenêtre entraîne une
diminution du débit par rapport au débit imposé. Cependant, plus on agrandit la fenêtre, plus le
débit effectif se rapproche de la valeur qu’il aurait prise avec le bitrate imposé.

(Remarque : certaines valeurs sont manquantes pour une fenêtre de 800x600. En fait, les
valeurs de bitrate 256 et 768 sont trop élevées pour qu’on puisse les combiner à une fenêtre aussi
grande, et Gstreamer ne supporte pas cette combinaison. Cela provoque des pertes qui dégradent
l’image et ne permettent pas de stabiliser le débit.)

Les paramètres à ajouter afin de modifier la taille de l’image sont ici en vert :

gst-launch -v rtspsrc location=rtsp:// x.x .x .x:554/mpeg4/media.amp ! queue ! decodebin !


queue ! videoscale ! capsfilter caps="video/x-raw-yuv,width=320,height=240" ! theoraenc !
rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=
X.X.X.X session.send_rtcp_src ! udpsink port=5001 host= X.X.X.X

Le paramètre quality
Ce paramètre de l’encodeur Theora définit la qualité de l’image encodée, entre des valeurs
allant de 0 à 63. Bien évidemment, plus la qualité est bonne, plus le débit est important. Cependant,
il faut savoir que lorsqu’on impose une qualité d’image à l’encodeur, le bitrate n’a plus d’effet, c’est-
à-dire que peu importe le bitrate que l’on impose, ça ne changera rien au débit final à partir du
moment qu’on a imposé une qualité d’image. Le graphe ci-dessous illustre le phénomène. On a
imposé un format d’image de 320x240, un framerate d’une image à la seconde, et pour chaque
bitrate, on a fait varier la qualité d’image. On peut voir clairement que quelque soit le bitrate, le
débit final reste le même pour une qualité d’image donnée.
Fig. 4.1. : Evolution du débit en fonction de la
qualité et du bitrate imposé
250
Débit effectif (en Kbps)

200

150
bitrate de 32 Kbps
100 bitrate de 128 Kbps
bitrate de 256 Kbps
50
bitrate de 768 Kbps
0
2 32 63
Qualité de l'image sur une échelle de 0 à 63

Bien évidemment, pour une même valeur de qualité, plus la taille de l’image sera grande,
plus le débit final sera important. Le graphe ci-dessous donne quelques valeurs de débit obtenu en
fonction de la taille de l’image et de sa qualité, et ce pour un framerate d’une image à la seconde :

Fig. 4.2. : Evolution du débit en fonction de la


qualité et du format de l'image
350
300
Débit effectif (en Kbps)

250
200 240x180
150 320x240
100 600x450
50 800x600
0
2 16 32 46 63
Qualité de l'image sur une échelle de 0 à 63

(Remarque : là encore, les valeurs de 46 et de 63 pour la qualité d’image sont trop élevées
pour être compatibles avec un format d’image de 800x600, et entraînent des flux instables. C’est
pourquoi ces données sont absentes de ce graphe.)

De la même manière, le débit n’est pas le même pour une qualité donnée selon le framerate
que l’on applique au flux vidéo. Le débit effectif va alors diminuer avec la qualité et le framerate,
comme le montre le graphe suivant, où les valeurs ont été calculées pour une image de format
320x240 pixels :

Fig. 4.3. : Evolution du débit en fonction de la


qualité d'image et du framerate
900
800
Débit effectif (en Kbps)

700
600
1 image toutes les 3
500 secondes
400
1 image à la seconde
300
200
5 images par seconde
100
0
2 16 32 46 63
Qualité de l'image sur une échelle de 0 à 63

Vous pouvez voir ici, en vert, le paramètre à ajouter afin de fixer la qualité de l’image :

gst-launch -v rtspsrc location=rtsp://x.x .x .x:554/mpeg4/media.amp ! queue ! decodebin ! capsfilter


caps="video/x-raw-yuv" ! theoraenc quality=32 ! rtptheorapay ! .send_rtp_sink gstrtpsession
name=session .send_rtp_src ! udpsink port=5000 host=X.X.X.X session.send_rtcp_src ! udpsink
port=5001 host=X.X.X.X

Vous aimerez peut-être aussi