web-dev-qa-db-fra.com

Diffusez de la vidéo H.264 sur rtp à l'aide de gstreamer

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,

15
abir

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
10
umläute