Ich sende einen H.264 Bytestream über RTP mit gstreamer.Wie kann rtpjitterbuffer in einem Stream ohne Zeitstempel arbeiten?
# sender
gst-launch-1.0 filesrc location=my_stream.h264 ! h264parse disable-passthrough=true ! rtph264pay config-interval=10 pt=96 ! udpsink host=localhost port=5004
Dann empfange ich die Frames, Dekodierung und Anzeige in anderen Gstreamer-Instanz.
# receiver
gst-launch-1.0 udpsrc port=5004 ! application/x-rtp,payload=96,media="video",encoding-name="H264",clock-rate="90000" ! rtph264depay ! h264parse ! decodebin ! xvimagesink
Dies funktioniert wie es ist, aber ich möchte ein rtpjitterbuffer um die Wiedergabe zu perfekt glätten, um zu versuchen hinzufügen.
# receiver
gst-launch-1.0 udpsrc port=5004 ! application/x-rtp,payload=96,media="video",encoding-name="H264",clock-rate="90000" ! rtpjitterbuffer ! rtph264depay ! h264parse ! decodebin ! xvimagesink
Sobald ich das tue, zeigt der Empfänger nur ein einzelnes Bild an und friert ein.
Wenn ich die .h264-Datei durch eine MP4-Datei ersetzen, funktioniert die Wiedergabe großartig.
Ich nehme an, dass mein h264-Stream nicht die erforderlichen Zeitstempel hat, um den Jitter-Puffer zu aktivieren.
Ich machte leichte Fortschritte, indem ich identity datarate=1000000
hinzufüge. Dadurch kann der Jitterbuffer zwar abgespielt werden, allerdings wird dies mit meiner Framerate verschraubt, da P-Frames weniger Daten als I Frames haben. Natürlich fügt das identity
Element die richtigen Zeitstempel hinzu, aber nur mit den falschen Zahlen.
Ist es möglich, Zeitstempel auf dem Absender automatisch zu generieren, indem Sie die "framerate" Caps irgendwo richtig angeben? Bis jetzt haben meine Versuche nicht funktioniert.
mit dem Identity-Element an Ort und Stelle, haben Sie versucht, die "Latenz" auf dem Jitter-Puffer zu "tunen"? –