Upload
nicolargo
View
1.288
Download
2
Embed Size (px)
DESCRIPTION
Rapport de Marléne Hildebrand sur la consommation de bande passante (en streaming) avec plusieurs paramètres de GStreamer.
Citation preview
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 :
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.
0
200
400
600
800
1000
1200
1400
(1/3) 1 5 15
Dé
bit
(en
Kb
ps)
Nombre d'images par seconde
Fig. 1.1. : Evolution du débit en fonction du framerate
De Linux à Windows
De Linux à Linux
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
0100200300400500600700800900
32 128 256 768Val
eu
r d
u b
itra
te r
éel
(en
Kb
ps)
Valeur du bitrate imposé (en Kbps)
Fig. 2.1. : Correspondance entre bitrate théorique et effectif lors d'une transmission
de Linux à Windows
(1/3) image par seconde
1 image par seconde
5 images par seconde
0100200300400500600700800900
32 128 256 768Val
eur
du
bit
rate
ré
el (
en K
bp
s)
Valeur du bitrate imposé (en Kbps)
Fig. 2.2. : Correspondance entre bitrate théorique et effectif lors d'une transmission
de Linux à Linux
1/3 image pas seconde
1 image par seconde
5 images par seconde
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.
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.
0
20
40
60
80
100
120
140
240x180 320x240 600x450 800x600
Dé
bit
(en
Kb
ps)
Taille de l'image affichée (en pixels)
Fig. 3.1. : Evolution du débit en fonction de la taille de l'image
De Linux à Windows
De Linux à Linux
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.
0
50
100
150
200
250
300
350
400
32 128 256 768
Dé
bit
eff
ect
if (
en K
bp
s)
Valeur du bitrate imposé (en Kbps)
Fig. 3.2. : Evolution du débit en fonction du bitrate et du format de l'image
Taille par défaut
240x180
320x240
600x450
800x600
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 :
(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,
0
50
100
150
200
250
2 32 63
Dé
bit
eff
ect
if (
en K
bp
s)
Qualité de l'image sur une échelle de 0 à 63
Fig. 4.1. : Evolution du débit en fonction de la qualité et du bitrate imposé
bitrate de 32 Kbps
bitrate de 128 Kbps
bitrate de 256 Kbps
bitrate de 768 Kbps
0
50
100
150
200
250
300
350
2 16 32 46 63
Déb
it e
ffec
tif
(en
Kb
ps)
Qualité de l'image sur une échelle de 0 à 63
Fig. 4.2. : Evolution du débit en fonction de la qualité et du format de l'image
240x180
320x240
600x450
800x600
comme le montre le graphe suivant, où les valeurs ont été calculées pour une image de format
320x240 pixels :
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
0
100
200
300
400
500
600
700
800
900
2 16 32 46 63
Dé
bit
eff
ect
if (
en K
bp
s)
Qualité de l'image sur une échelle de 0 à 63
Fig. 4.3. : Evolution du débit en fonction de la qualité d'image et du framerate
1 image toutes les 3 secondes
1 image à la seconde
5 images par seconde