10
votes

Jouer un flux RTP entrant avec Gstreamer

Je développe une application Gstreamer et un bit en difficulté avec la mise en œuvre d'un joueur pour les flux RTP entrants. J'essaie de construire un pipeline autour de l'élément gstrtpbin. J'essaie de modéliser le pipeline à l'aide d'une construction de lancement de la GST: xxx pré>

lorsque je lance le script gstreamer rapporte ces erreurs: p> xxx pré>

Je devrais mentionner que cela fonctionne avec un fichier Playbin et SDP. Par exemple, ce fichier: p> xxx pré>

peut être utilisé pour lire le flux comme celui-ci: p> xxx pré>

pour la complétude: je suis en utilisant VLC pour envoyer des données. Ceci est la commande: p> xxx pré>

quelqu'un m'aiderait-il comprendre pourquoi le script de lancement de la GST échoue? L'erreur "Raison non liée" me fait penser que le lien entre Gstrtpbin et les éléments RTPH264DEPAY est cassé. Mais je ne sais pas comment le réparer. P>

Modifier B>
Après les suggestions de RAOF, j'ai corrigé quelques erreurs dans ma commande. Cependant, j'utilise FFDec_H264 et Autovideosink car sur mon système Windows, je n'ai pas les plug-ins fluh264Dec et XVimage d'évier installé: p> xxx pré>

qui conduit à de nouvelles erreurs: p>

0:00:00.743000000   516   024070A8 ERROR                 ffmpeg .:0:: non-existing PPS referenced
0:00:00.744000000   516   024070A8 ERROR                 ffmpeg .:0:: non-existing PPS referenced
0:00:00.745000000   516   024070A8 ERROR                 ffmpeg .:0:: decode_slice_header error
0:00:00.745000000   516   024070A8 ERROR                 ffmpeg .:0:: no frame!
0:00:00.812000000   516   024070A8 ERROR                 ffmpeg .:0:: non-existing PPS referenced
0:00:00.813000000   516   024070A8 ERROR                 ffmpeg .:0:: non-existi
...
ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow
 error.
Additional debug info:
..\Source\gstreamer\libs\gst\base\gstbasesrc.c(2378): gst_base_src_loop (): /Gst
Pipeline:pipeline0/GstUDPSrc:udpsrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 4790000000 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...


0 commentaires

3 Réponses :


12
votes

Autant que je puisse dire, vous avez deux problèmes:

Premièrement, il semble que l'ordre de la spécification de l'évier est important: plutôt que ...! gstrtpbin .recv_rtp_sink_0! ... Vous devez avoir ...! .Recv_rtp_sink_0 gstrtpbin! ... .

Deuxièmement, VLC envoie un flux de transport MPEG2 - vous avez mux = ts dans le descripteur de sortie de streaming RTP - mais vous êtes essayer de dépendre un flux H264 brut. Vous devez dépendre du flux TS, puis Demux pour obtenir les données de flux H264.

Donc, enfin, le pipeline xxx

fonctionne pour Moi, en utilisant le décodeur TS Demuxer (MPEGTSDEMUX) et H264 (Fluh264Dec).


2 commentaires

J'ai maintenant installé Gstreamer-ffmpeg et l'a essayé avec FFDec_H264 et Autovideosink. Mon pipeline fonctionne pour moi avec ces éléments au lieu de Fluh264Dec et XVimagesink. Je ne suis pas sûr d'où réside votre problème, maintenant.


Je soupçonne que c'est un problème spécifique Windows, je vais tester avec ma boîte Linux. Si vous êtes intéressé, je mettrai à jour mes progrès dans cet article. Merci, vous avez été très utile.



1
votes
gst-launch-0.10 -vvvv rtspsrc location=rtsp://192.168.250.100:554 latency=100 ! \
application/x-rtp,media="video",payload=99,clock-rate=90000,encoding-name="H264"  ! \
rtph264depay !  ffdec_h264 ! ffmpegcolorspace ! xvimagesink
this worked for me with a "Grandtec Electronic MegaPixel WIFI CAM"

0 commentaires

0
votes

Vous pouvez également essayer celui-ci.

GST-Launch-0.10 -V RTTSPSRC Emplacement = "RTSP: //10.107.2.217/streamingSetting? Version = 1.0 & Action = getrtspstream & canalid = 1 & canalname = canal1" user-id = admin user-pw = admin123 CAPS = "Application / X-RTP, Media = (String) Vidéo, Taux d'horloge = (int) 90000, nom de codage = (chaîne) H264, charge utile = (int) 96, SSRC = (UINT) 237526004, horloge base = (uint) 1584170994, SEQNUM-BASE = (UINT) 42626 "Port = 554! RTPH264DEPAY File d'attente-Delay = 0! H264PARSE! Decodebin2! File d'attente Fuite = 1! Autovideosink

Il fonctionne également lorsque votre streaming sur réseau est sécurisé et que ses travaux sur

RTSP: //10.107.2.217

Port RTSP: 554

codec vidéo: H.264

espoir, c'est utile pour vous les gars.


0 commentaires