2013-06-26 6 views
12

Je suis novice avec gstreamer et j'essaye d'être utilisé avec elle. Mon premier objectif est de créer un flux rtp simple de vidéo h264 entre deux appareils. J'utilise ces deux pipelines:Flux vidéo H.264 sur rtp en utilisant gstreamer

Auteur: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000

Récepteur: gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

Mais avec le premier (l'expéditeur) Je suis l'erreur suivante:

Setting pipeline to PAUSED ... 
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n 
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed 
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2812): gst_base_src_loop(): /GstPipeline:pipeline0/GstFileSrc:filesrc0: 
streaming task paused, reason not-negotiated (-4) 
ERROR: pipeline doesn't want to preroll. 
Setting pipeline to NULL ... 
Freeing pipeline ... 

J'ai essayé beaucoup d'autres configurations, mais je ne pouvais pas trouver le bon pipeline.

d'autres informations: Version Gstreamer: 1.0.7 OS: Windows 7

Toute idée/suggestion? Thx,

Répondre

8

filesrc lira les données du fichier donné sous forme d'octets bruts; vous ne pouvez pas simplement encoder ces octets bruts avec x264enc, vous aurez besoin de données vidéo pour que cela fonctionne. essayez d'ajouter un démultiplexeur /décodeur avant de réencoder le flux), par ex. quelque chose comme ceci:

Auteur:

gst-launch-1.0 -v \ 
    filesrc location=/tmp/sample_h264.mov 
    ! qtdemux \ 
    ! h264parse \ 
    ! ffdec_h264 \ 
    ! ffmpegcolorspace \ 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 

Vous devriez faire une vérification rapide si cela fonctionne en utilisant une soure vidéo de test:

gst-launch-1.0 -v \ 
    videotestsrc 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 
+0

Merci pour les données soupçon brutes/vidéo, mais je pense que cela résout juste une partie du problème. J'ai essayé le pipeline classique avec videotestsrc mais rien ne va à l'autre côté. Même avec le pipeline suivant, je ne peux rien recevoir de l'autre côté: 'gst-launch-1.0 -v videotestsrc! udpsink host = 192.128.52.128 port = 9001' J'ai le sentiment que l'udpsink n'envoie rien! PS: n'est pas un problème de pare-feu, je les désactiver tous – abir

+0

Essayer avec: 'ffmpeg -i C: \ tmp \ sample_h264.mov -f mpegts udp: //192.168.52.128: 9001' ... et le flux est reçu de l'autre côté. Mais je veux le faire avec gstreamer – abir

+0

'videotestsrc! udpsink' n'est * pas * un flux RTP. vous devez ajouter un payloader –

Questions connexes