Flux H. 264 vidéo sur rtp en utilisant gstreamer
Je suis novice avec gstreamer et je suis en train d'être utilisé. Mon premier objectif est de créer une simple flux rtp de la vidéo h264 entre les deux appareils. Je suis à l'aide de ces deux pipelines:
Expéditeur: 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 la première (l'expéditeur) j'ai eu 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 n'arrivais pas à trouver le bon pipeline.
Quelques autres informations:
Gstreamer version: 1.0.7
Système d'exploitation: Windows 7
Toute idée/suggestion?
Thx,
OriginalL'auteur abir | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
filesrc
va lire les données à partir du fichier donné que les matières premières d'octets; vous ne pouvez pas simplement encoder ces octets brutes avecx264enc
, vous aurez besoin de vidéo-les données de ce travail. essayez d'ajouter un demuxer/décodeur avant de le ré-encodage du flux), par exemple, quelque chose comme ceci:Expéditeur:
Vous devez faire une vérification rapide de savoir si cela fonctionne en utilisant un test vidéo de soure:
gst-launch-1.0 -v videotestsrc ! udpsink host=192.128.52.128 port=9001
j'ai le sentiment que la udpsink n'est pas envoyer quoi que ce soit! PS: n'est pas un problème de pare-feu, j'ai désactiver tousEn essayant avec:
ffmpeg -i C:\tmp\sample_h264.mov -f mpegts udp://192.168.52.128:9001
... et le flux est reçu dans l'autre côté. Mais je veux le faire avec gstreamervideotestsrc ! udpsink
est pas un flux RTP. vous devez ajouter un payloadergst-launch-1.0 -v videotestsrc ! udpsink host=192.128.52.128 port=9001
de sortie:Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1 /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock
Enfin, je pense que le problème était lié à Windows. Les deux pipelines suivants fonctionnent très bien entre les deux Ubuntu en Vm, mais pas sur Windows: Expéditeur:
gst-launch-1.0 -v filesrc location=/home/ … /sample_h264.mov ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.168.52.129 port=9001
Récepteur:gst-launch-1.0 -v udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! decodebin ! videoconvert ! autovideosink
OriginalL'auteur