2013-02-18 3 views
0

J'essaye de diffuser la vidéo h264 sur le réseau en utilisant gstreamer (dans Windows) sur UDP. Tout d'abord si j'utilise un pipeline comme celui-ci, tout semble ok, et je vois le motif de test:Utilisation de udpsink pour streamer h264 avec gstreamer (C++)

videotestsrc, ffmpegcolorspace, x264enc, rtph264pay, rtph264depay, ffdec_h264, ffmpegcolorspace, autovideosink

Maintenant, j'ai décidé de divisez ce pipeline en parties client et serveur, en transmettant le flux sur udp en utilisant udpsink et udpsrc.

Server: videotestsrc, ffmpegcolorspace, x264enc, rtph264pay, udpsink 
Client: udpsrc, rtph264depay, ffdec_h264, ffmpegcolorspace, autovideosink 

Sur le serveur j'utiliser quelque chose comme ça:

source = gst_element_factory_make ("videotestsrc", "source"); 
ffmpegcolortoYUV = gst_element_factory_make ("ffmpegcolorspace", "ffmpegcolortoYUV"); 
encoder = gst_element_factory_make ("x264enc", "encoder"); 
rtppay = gst_element_factory_make ("rtph264pay", "rtppay"); 
udpsink = gst_element_factory_make ("udpsink", "sink"); 

g_object_set (source, "pattern", 0, NULL); 
g_object_set(udpsink, "host", "127.0.0.1", NULL); 
g_object_set(udpsink, "port", 5555, NULL); 

Puis-je ajouter les éléments à la canalisation et d'exécution, il n'y a pas d'erreurs partout. Maintenant, si je cherche le port UDP 5555, il n'écoute pas !!!!

La partie client s'exécute également mais s'il n'y a pas de port UDP à l'écoute côté serveur, cela ne fonctionnera pas.

EDIT: En fait j'étais très proche de la solution ... Si je démarre le client cela fonctionne, mais avec quelques problèmes sur la visualisation ... Je pense que le problème est la configuration de x264enc. Quelqu'un sait comment changer les paramètres x264enc comme la vitesse prédéfinie ou le réglage? J'ai essayé d'instancier GstX264EncPreset ou GstX264EncTune mais je n'ai pas les déclarations de ces strcutures. Quelqu'un sait-il un moyen de configurer x264enc d'une autre manière, comme analyser une chaîne ou quelque chose comme ça?

Répondre

0

Essayez de définir les majuscules sur l'élément udpsrc sur "application/x-rtp".

2

Je sais qu'il s'agit d'un post plus ancien, mais vous pouvez définir la valeur GstX264EncPreset à l'aide d'un entier simple correspondant à la valeur prédéfinie.

g_object_set(encoder, "speed-preset", 2, NULL); fonctionne pour moi. Les valeurs peuvent être trouvées en utilisant gst-inspect-1.0 x264enc et sont les suivantes:

speed-preset  : Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder) 
         flags: readable, writable 
         Enum "GstX264EncPreset" Default: 6, "medium" 
          (0): None    - No preset 
          (1): ultrafast  - ultrafast 
          (2): superfast  - superfast 
          (3): veryfast   - veryfast 
          (4): faster   - faster 
          (5): fast    - fast 
          (6): medium   - medium 
          (7): slow    - slow 
          (8): slower   - slower 
          (9): veryslow   - veryslow 
          (10): placebo   - placebo 
Questions connexes