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, lorsquon streame celui-ci dun 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 lordinateur 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. Cest le paramètre qui a le plus dinfluence 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 800 600 400 200 0 (1/3) 1 5 15 Débit (en Kbps)
1400
1200
1000
800
600
400
200
0
(1/3)
1
5
15
Débit (en Kbps)

Nombre d'images par seconde

De Linux à Windows1200 1000 800 600 400 200 0 (1/3) 1 5 15 Débit (en Kbps) Nombre d'images

De Linux à Linux1200 1000 800 600 400 200 0 (1/3) 1 5 15 Débit (en Kbps) Nombre d'images

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.

Valeur du bitrate réel (en Kbps)

Valeur du bitrate réel (en Kbps)

du bitrate réel (en Kbps) Valeur du bitrate réel (en Kbps) Fig. 2.1. : Correspondance entre

Fig. 2.1. : Correspondance entre bitrate théorique et effectif lors d'une transmission de Linux à Windows

900

800

700

600

500

400

300

200

100

0

de Linux à Windows 900 800 700 600 500 400 300 200 100 0 32 128

32

128

256

768

Valeur du bitrate imposé (en Kbps)

(1/3) image par seconde200 100 0 32 128 256 768 Valeur du bitrate imposé (en Kbps) image par seconde

image par secondeValeur du bitrate imposé (en Kbps) (1/3) image par seconde 1 images par seconde 5 Fig.

1

images par seconde(en Kbps) (1/3) image par seconde image par seconde 1 5 Fig. 2.2. : Correspondance entre

5

image par seconde image par seconde 1 images par seconde 5 Fig. 2.2. : Correspondance entre

Fig. 2.2. : Correspondance entre bitrate

théorique et effectif lors d'une transmission de Linux à Linux

900

800

700

600

500

400

300

200

100

0

de Linux à Linux 900 800 700 600 500 400 300 200 100 0 32 128

32

128

256

768

Valeur du bitrate imposé (en Kbps)

1/3 image pas seconde200 100 0 32 128 256 768 Valeur du bitrate imposé (en Kbps) image par seconde

image par secondeValeur du bitrate imposé (en Kbps) 1/3 image pas seconde 1 images par seconde 5 Les

1

images par secondeimposé (en Kbps) 1/3 image pas seconde image par seconde 1 5 Les paramètres à modifier

5

Les paramètres à modifier afin dimposer 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 quen théorie il ne devrait pas y avoir moins dinformations circulant dans le cas dune 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 80 60 40 20 0 240x180 320x240 600x450 800x600 Débit (en Kbps)
140
120
100
80
60
40
20
0
240x180
320x240
600x450
800x600
Débit (en Kbps)

Taille de l'image affichée (en pixels)

De Linux à Windows20 0 240x180 320x240 600x450 800x600 Débit (en Kbps) Taille de l'image affichée (en pixels) De

De Linux à Linux0 240x180 320x240 600x450 800x600 Débit (en Kbps) Taille de l'image affichée (en pixels) De Linux

Les paramètres width et height peuvent prendre des valeurs comprises entre 1 et 2147483647 pixels dans le cas de lencodeur 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 quun 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 quelle 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 300 250 200 150 100 50 0 32 128 256 768 Débit effectif
400
350
300
250
200
150
100
50
0
32
128
256
768
Débit effectif (en Kbps)

Valeur du bitrate imposé (en Kbps)

Taille par défaut50 0 32 128 256 768 Débit effectif (en Kbps) Valeur du bitrate imposé (en Kbps)

240x180128 256 768 Débit effectif (en Kbps) Valeur du bitrate imposé (en Kbps) Taille par défaut

320x240128 256 768 Débit effectif (en Kbps) Valeur du bitrate imposé (en Kbps) Taille par défaut

600x450128 256 768 Débit effectif (en Kbps) Valeur du bitrate imposé (en Kbps) Taille par défaut

800x600128 256 768 Débit effectif (en Kbps) Valeur du bitrate imposé (en Kbps) Taille par défaut

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 limage 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 à lencodeur, le bitrate n’a plus d’effet, c’est- à-dire que peu importe le bitrate que lon impose, ça ne changera rien au débit final à partir du moment quon a imposé une qualité dimage. 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 200 150 100 50 0 2 32 63 Débit effectif (en Kbps)
250
200
150
100
50
0
2
32
63
Débit effectif (en Kbps)

Qualité de l'image sur une échelle de 0 à 63

bitrate de 32 Kbps(en Kbps) Qualité de l'image sur une échelle de 0 à 63 bitrate de 128 Kbps

bitrate de 128 Kbps(en Kbps) Qualité de l'image sur une échelle de 0 à 63 bitrate de 32 Kbps

bitrate de 256 Kbps(en Kbps) Qualité de l'image sur une échelle de 0 à 63 bitrate de 32 Kbps

bitrate de 768 Kbps(en Kbps) Qualité de l'image sur une échelle de 0 à 63 bitrate de 32 Kbps

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
Fig. 4.2. : Evolution du débit en fonction de la
qualité et du format de l'image
350
300
250
200
240x180
150
320x240
100
600x450
50
800x600
0
2
16
32
46
63
Débit effectif (en Kbps)

Qualité de l'image sur une échelle de 0 à 63

(Remarque : là encore, les valeurs de 46 et de 63 pour la qualité dimage sont trop élevées pour être compatibles avec un format dimage de 800x600, et entraînent des flux instables. Cest 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 700 600 500 400 300 200 100 0 2 16 32 46 63
900
800
700
600
500
400
300
200
100
0
2
16
32
46
63
Débit effectif (en Kbps)

Qualité de l'image sur une échelle de 0 à 63

image toutes les 3 secondesDébit effectif (en Kbps) Qualité de l'image sur une échelle de 0 à 63 image à

image à la seconde(en Kbps) Qualité de l'image sur une échelle de 0 à 63 image toutes les 3

1

1

images par seconde(en Kbps) Qualité de l'image sur une échelle de 0 à 63 image toutes les 3

5

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

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