Test De Bande Passante Streaming Gstreamer

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Test De Bande Passante Streaming Gstreamer as PDF for free.

More details

  • Words: 1,760
  • Pages: 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

Débit (en Kbps)

1200 1000

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.

Valeur du bitrate réel (en Kbps)

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

(1/3) image par seconde 1 image par seconde 5 images par seconde 32

128

256

768

Valeur du bitrate imposé (en Kbps)

Valeur du bitrate réel (en Kbps)

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

1/3 image pas seconde 1 image par seconde 5 images par seconde 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

Débit (en Kbps)

120 100 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 Débit effectif (en Kbps)

400 350 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é Débit effectif (en Kbps)

250

200 150

bitrate de 32 Kbps bitrate de 128 Kbps

100

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 Débit effectif (en Kbps)

350 300 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 :

Débit effectif (en Kbps)

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

1 image toutes les 3 secondes 1 image à la seconde 5 images par seconde

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

Related Documents