So speichern Sie einen RTSP-video-stream in MP4-Datei über gstreamer?
Ich brauche, um ein video-stream von meiner Kamera über RTSP und in eine Datei speichern. All dies getan werden muss, um über gstreamer.
Nach einigen google-suchen habe ich versucht, die folgenden:
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! avdec_h264 ! mp4mux ! filesink location=result3.mp4
aber es gibt die Fehlermeldung:
"Fehlerhafte pipeline: konnte keine Verbindung avdec_h264-0 auf mp4mux0"
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! h264parse ! mp4mux ! filesink location=result3.mp4
Es beginnt die Arbeit, aber die Ergebnis-Datei ist nicht abspielbar über VLC.
Was ist der richtige Befehl zu tun?
Und wenn Sie die Wahl zwischen h264parse und avdec_h264, könnten Sie bitte erklären warum?
- Ich sehe nichts falsch mit dieser Frage, außer einem Titel. @Juster: 1) Sie könnten versuchen, es ohne
h264parse
überhaupt. 2) funktioniert der stream bei allen spielen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie hinzufügen -e-flag (end of stream), so dass mp4mux kann nämlich-Datei, sonst werden Sie beschädigt, nicht abspielbare Datei.
Der zweite Befehl korrekt aussieht. Raw-h264 video-Daten ist ein bisschen schwierig, weil es zwei Eigenschaften - "Ausrichtung" und "stream-format", die variieren kann. h264parse verwandeln können, die h264-Daten in der benötigten form für verschiedene h264-bezogene GStreamer-Elemente.
avdec_h264 ist ein decoder-element. Sie wollen nicht die Daten zu entschlüsseln, da Sie anscheinend nicht die Anzeige. Sie setzen kodierte h264-Daten von einem RTSP-stream in einen mp4-container-Datei.
Wenn die Datei nicht wiedergeben, sollten Sie überprüfen, ob der stream gut ist oder versuchen Sie, andere Medien-Player und sehen, ob Sie funktionieren (mplayer, Media Player, Quicktime, was auch immer).
Könnte man auch versuchen, muxen in matroska-container-Datei mit der "matroskamux" element.
Wenn Ihr rtspsrc stream ist bereits codiert in H264, schreiben Sie einfach in mp4-container direkt, anstatt das zu tun-codec verarbeiten.
Hier ist mein gst-launch-1.0-Befehl für die Aufzeichnung von rtsp zu mp4:
Wenn Sie wollen, etwas zu tun, wie das ändern der Breite, Höhe (mit videoscale), Farbraum (mit videoconvert), framerate (mit capsfilter), etc., die tun sollten, basierte auf Fähigkeit, video/x-raw-Typ, Sie sollte decodieren von video/x-h264 video/x-raw.
Und nach dem ändern, sollten Sie codieren wieder vor der Verlinkung auf mux-element (wie mp4mux, mpegtsmux, matroskamux, ...).
Es scheint, wie Sie nicht sicher sind, wenn für die Nutzung des video-Decoders. Hier einfach teilen einige Erfahrung mit dem Einsatz von video-codec:
Wenn die Quelle kodiert wurde, und ich möchte zu schreiben, um die Behälter mit der gleichen Kodieren, dann wird die pipeline werden wie:
src ! ... ! mux ! filesink
Wenn die Quelle kodiert wurde, und ich möchte zu schreiben, um die container mit verschiedenen codieren, oder will ich spielen, mit videosink, dann die pipeline werden wie:
src ! decode ! ... ! encode ! mux ! filesink
src ! decode ! ... ! videosink
Wenn die Quelle nicht codierte (wie videotestsrc), und ich möchte zu schreiben, um die container, dann die pipeline werden wie:
src ! encode ! mux ! filesink
Hinweis: die It-Kosten hohe cpu-Ressourcen, wenn dabei codec ! Also, wenn Sie nicht brauchen, zu tun-codec arbeiten, tun das nicht.
Können Sie aus src, Waschbecken, mux, demux, enc, dec, konvertieren, ..., etc. Elemente mit den praktischen tool gst-inspect-1.0. Zum Beispiel:
zeigen alle verfügbaren mux-Elemente.