Je suis novice avec gstreamer et j'essaye de m'y habituer. Mon premier objectif est de créer un simple flux rtp de vidéo h264 entre deux appareils. J'utilise 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
Destinataire: gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink
Mais avec le premier (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'ai pas pu trouver le bon pipeline.
Quelques autres informations: Gstreamer version: 1.0.7 OS: Windows 7
Une idée/suggestion? THX,
filesrc
lira les données du fichier donné sous forme d'octets bruts; vous ne pouvez pas simplement coder 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 ça:
Expéditeur:
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 vérifier rapidement si cela fonctionne en utilisant une source de test vidéo:
gst-launch-1.0 -v \
videotestsrc
! x264enc \
! rtph264pay \
! udpsink Host=127.0.0.1 port=5000