Comment faire pour enregistrer un RTSP flux vidéo en fichiers MP4 via gstreamer?
J'ai besoin d'obtenir un flux vidéo à partir de mon appareil photo via RTSP et l'enregistrer dans un fichier. Tout cela doit être fait par gstreamer.
Après quelques recherche sur google, j'ai essayé le suivant:
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! avdec_h264 ! mp4mux ! filesink location=result3.mp4
mais il donne l'erreur:
Erroné "pipeline: impossible de lien avdec_h264-de 0 à mp4mux0"
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! h264parse ! mp4mux ! filesink location=result3.mp4
Il commence à faire le travail, mais le résultat de fichier n'est pas jouable via VLC.
Quel est la commande pour le faire?
Et si vous choisissez entre h264parse et avdec_h264, pouvez-vous expliquer pourquoi?
Je ne vois rien de mal avec cette question, sauf pour un titre. @Juster: 1) vous pouvez l'essayer sans
h264parse
à tous. 2) le flux de jouer?OriginalL'auteur Juster | 2014-09-15
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter-e drapeau (la fin du flux), de sorte que mp4mux peut finaliser fichier, sinon vous allez obtenir endommagé non jouable fichier.
Semble que c'est un bug dans vlc.
OriginalL'auteur Haris Kovacevic
La deuxième commande est correct. Raw vidéo h264 données est un peu délicate car il a deux caractéristiques--"alignement" et "flux " format", qui peut varier. h264parse peut transformer h264 données dans le formulaire nécessaire pour les différents h264 liés à GStreamer éléments.
avdec_h264 est un décodeur élément. Vous ne voulez pas de décoder les données, puisque vous êtes apparemment pas de l'afficher. Vous êtes à la mise encodé en h264 données à partir d'un flux RTSP dans un conteneur mp4 fichier.
Si le fichier n'est pas jouer, vous devez vérifier que le flux est bonne, ou d'essayer d'autres acteurs des médias, et voir si elles fonctionnent (mplayer, Media Player, Quicktime, peu importe).
Vous pouvez également essayer de multiplexage dans un conteneur matroska fichier à l'aide de la "matroskamux" élément.
OriginalL'auteur mpr
Si votre rtspsrc flux est déjà encodé en H264, il suffit d'écrire à conteneur mp4 directement, au lieu de faire codec processus.
Voici mon gst-launch-1.0 commande pour l'enregistrement rtsp pour mp4:
Si vous voulez faire quelque chose comme la modification de la largeur, de la hauteur (à l'aide de videoscale), palette (à l'aide de videoconvert), fréquence (à l'aide de capsfilter), etc., ce qui devrait faire en fonction de la capacité de video/x-raw type, vous devez décoder de la vidéo/x-h264 pour la vidéo/x-raw.
Et, après la modification, vous devez encoder à nouveau avant de les lier à mux élément (comme mp4mux, mpegtsmux, matroskamux, ...).
Il semble que vous n'êtes pas sûr de quand utiliser le décodeur vidéo. Ici, il suffit de partager une certaine expérience de l'utilisation de la vidéo codec:
Si la source a été codé, et je veux écrire dans le récipient avec le même encodage, puis le pipe comme:
src ! ... ! mux ! filesink
Si la source a été codé, et je veux écrire le récipient avec différents coder, ou je veux jouer avec videosink, puis le pipe comme:
src ! decode ! ... ! encode ! mux ! filesink
src ! decode ! ... ! videosink
Si la source n'a pas été codée (comme videotestsrc), et je veux écrire pour le conteneur, puis le pipe comme:
src ! encode ! mux ! filesink
Remarque: Il en coûte plus de ressources cpu lors de codec ! Donc, si vous n'avez pas besoin de codec de travail, ne faites pas cela.
Vous pouvez consulter la src, lavabo, mux, demux, enc, dec, convertir, ..., etc. éléments à l'aide de outil pratique tps-inspecter-1.0. Par exemple:
pour afficher tous disponibles mux éléments.
OriginalL'auteur eric_hsu