web-dev-qa-db-fra.com

Utilisation de Gstreamer pour servir le flux RTSP, exemple de travail recherché

Nous essayons de faire fonctionner Gstreamer sur un DM368 Leopardboard *. Nous avons réussi à le persuader de créer une vidéo de test (videotestsrc), de la coder et de la transférer dans un fichier.

Le tuyau qui a fonctionné est:

gst-launch -v videotestsrc num-buffers=100 ! queue ! ffenc_mpeg4 bitrate=800000 ! ffmux_mp4 ! filesink location=video_test.mp4

La prochaine étape consiste à modifier le tuyau afin de diffuser la carte de test sur le réseau, pour pouvoir être visualisé sur un PC avec VLC en utilisant quelque chose comme rtsp: // ip_addr: port/nom de flux , mais la documentation sur la façon de procéder semble assez sur le terrain (et souvent obsolète), et les exemples semblent brouiller le code source et les moyens de le faire en ligne de commande.

J'admets volontiers que plus de 50% du problème provient de notre manque de connaissance de Gstreamer et de ses différentes parties. J'ai toujours constaté que, si j'ai un exemple concret pour commencer, je peux le cogner avec des bâtons et régler le reste. De là.

J'ai jusqu'ici:

gst-launch -v videotestsrc ! queue ! ffenc_mpeg4 bitrate=800000 ! rtpmp4vpay ! tcpserversink Host=<PC_ip> port=5000

Ce qui semble faire quelque chose se produire dans VLC (avec tcp: // board_ip: port ) - il semble penser qu'il se passe quelque chose (ne génère pas d'erreur) mais ne joue pas/ne montre pas n'importe quoi. Lorsque je romps (^ C) le premier processus, VLC le remarque.

Donc, fondamentalement, toute orientation/rétroaction serait géniale, une seule ligne de travail serait fantastique.

Modifié pour ajouter: Oui, je vois l'exemple test_video.c, mais il s'agit de la compilation d'un programme spécial pour effectuer quelque chose qui ressemble à la possibilité d'appeler simplement à partir de la ligne de commande pour prouver le concept.

* = Linux version 2.6.32-17-ridgerun /CPU: ARM926EJ-S
13
John U

Enfin trouvé un exemple de travail ici:

GStreamer rtp stream to vlc

Mais cela nécessite de créer un fichier .SDP pour VLC et de spécifier des adresses IP, ce qui n’est pas vraiment ce que nous voulons faire. Mais c’est un début!

1
John U

Source : Contrairement à RTP, un serveur RTSP négocie la connexion entre un serveur RTP et un client à la demande ( Link ). Le gst-rtsp-server n'est pas un plugin gstreamer, mais une bibliothèque qui peut être utilisée pour implémenter votre propre application RTSP. Le scénario de test suivant a été appliqué sur une machine Ubuntu 12.04.5:

  • Préliminaires
    • Installez gstreamer-1.0 avec les plugins base/good/laid/bad
    • Installez autoconf automake autopoint libtool et les autres outils de construction essentiels manquants
  • Construisez le serveur gst-rtsp
    • git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server && cd gst-rtsp-server
    • Nous utilisons gstreamer 1.2: git checkout remotes/Origin/1.2
    • Build: ./autogen.sh --noconfigure && GST_PLUGINS_GOOD_DIR=$(pkg-config --variable=pluginsdir gstreamer-plugins-bad-1.0) ./configure && make (Pour une raison quelconque, GST_PLUGINS_GOOD_DIR n'est pas défini par pkg-config, nous l'avons donc explicitement défini)
  • Essai
    • Lancer l'application de test: cd examples && ./test-launch "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"
    • On peut maintenant accéder au flux (par exemple en utilisant VLC) à distance par l’adresse: rtsp://Host_IP:8554/test
15
Tik0

J'ai eu un problème à la fin du processus, quelque chose comme:

  • configure: Aucun paquet 'gstreamer-1.0' trouvé
  • configure: erreur: pas de gstreamer-1.0> = 1.2.3 (GStreamer) trouvé

J'ai trouvé la solution dans ce post:

https://askubuntu.com/questions/384059/error-compiling-a-package-configure-error-no-gstreamer-1-0-1-0-0

Et cela a fonctionné parfaitement !!!

0
fgfernandez0321