Frage

habe ich eine Verwirrung über die Zeitstempel von h264 RTP-Paket. Ich weiß, dass die Wandtaktrate von Video ist 90kHz, die ich in dem SIP-SDP definiert. Die Framerate meines Encoder ist nicht genau 30 FPS, es ist variabel. Es variiert von 15 FPS auf 30 FPS on the fly. Also, ich kann keinen festen Zeitstempel verwendet werden.

Kann jemand mir sagen, den Zeitstempel des folgenden codierten Pakets.
Nach 0 milisecond RTP-Zeitstempel kodiert = 0 (Wenn die Startzeitstempel 0)
Nach 50 milisecond codierten RTP-Zeitstempel =?
Nach 40 milisecond codierten RTP-Zeitstempel =?
Nach 33 milisecond codierten RTP-Zeitstempel =?

Was ist die Formel, wenn die codierte Framerate variabel ist?

Vielen Dank im Voraus.

Keine korrekte Lösung

Andere Tipps

Es spielt keine Rolle, ob Ihr Encoder kodiert Video bei 10fps oder 30fps, mit RTP-Zeitstempel Sie dem Empfänger sagen, wie lange die Pause zwischen den beiden Bildern. So Sie, dass im laufenden Betrieb für jeden Rahmen bestimmen. Auf diese Weise können Sie 10 Bilder in einer Sekunde (10 fps), und in anderen zweiten senden können Sie 30 Bilder (30 fps) senden. Sie müssen nur richtig den RTP-Zeitstempel setzen. Und wenn ich Ihre Frage bekommen, sind Sie im Zweifel, wie dies zu tun ...

Lassen Sie den Startzeitstempel 0 sein, können Sie die Wanduhr Zeit in Millisekunden um 100 auf dem letzten RTP-Zeitstempel multipliziert hinzufügen, oder Sie können eine beliebige Zeitskala Sie wollen. Um den Decoder zu machen dekodieren 10fps Video bei 30fps, fügen 333000 zu RTP-Zeitstempel für jedes Paket ... aber läßt Blick auf Ihrem Beispiel:

Frame #      RTP Time   Time between frames [ms]
[  1]               0   0
[  2]           50000   50
[  3]           90000   40
[  4]          420000   33  

Wenn Sie also gesetzt RTP-Zeitstempel wie dies (Time in ms * 100000) Sie den Decoder Last und dekodieren Frame 1, machen und dann laden und zu dekodieren Frame 2, aber es wird, bevor es für 50 ms (Zeitdifferenz zwischen Bild 1 und Bild 2) schlafen zeichnet den Rahmen 2, und so weiter ...

Und wie Sie sehen können, der Decoder verwendet RTP-Zeitstempel, wenn sie wissen, jeden anzuzeigen, und es tut Sinn, wenn das Video mit 30 oder 10 Bildern pro Sekunde codiert wurde.

Auch wenn das Video 30 fps ist, die mittlere tut, dass es für jede Sekunde 30 RTP-Pakete sein. Manchmal kann es mehr als 100, so dass Sie keine Formel haben können, die die korrekte RTP-Zeitstempel Berechnung gewährleistet.

Ich denke, dass das ist, was Sie brauchen ... hoffe, ich half bande -1 mich, wenn ich den Ball hielt ... =)

Es gibt keine einfache Formel dafür.

Der Zeitpunkt zum Abtasten des Rahmens vor der Codierung verwendet wird, die genannt PTS (Präsentationszeitstempel). Es ist aus dem Anwendungsbereich des Gebers, müssen Sie daran denken in Ihren Daten fließen, wenn Sie die Bilder erfassen.

Von dort haben Sie 2 Möglichkeiten:

  1. Die H264-Encoder nicht B-Frame erzeugen, sollte der RTP-Zeitstempel der PTS + zufällig versetzt (das gleiche für alle Streaming-Sitzung)
  2. Wenn der Encoder erzeugen B-Frames (oder B-Scheiben), dann wird der Decodierordnung muss geändert werden, da B-Frame des nächsten Rahmens decodiert werden, erfordert, so dass es vor gesendet werden muß.

Im letzteren Fall sind die RFC6184 besagt, dass Sie mehrere Art und Weise die codierten NAL-Einheiten zu streamen.

Die meisten der Streaming-Software wird den Modus namens „Non verschachtelt“, in dem Sie den RTP-Zeitstempel Offset auf den PTS + setzen müssen, sondern sie in der Decodierung senden, um so die Zeitmarke nicht monoton zunehmen wird. Dies bedeutet auch, die Kunden zu dekodieren haben werden in der Reihenfolge empfing und nicht Neuordnungs den Rahmen in der PTS Ordnung.

Ich verwende den Begriff DTS aus einem Grund hier, weil Sie nicht brauchen, die Decodierung Zeitstempel für diese Arbeit, nur die Reihenfolge.

Der letzte Modus in RFC6184 beschrieben ist die sogenannte verschachtelte Ordnung, wo Sie die NAL-Einheiten neu anordnen können. In diesem Fall haben Sie einige Anwendungslogik zu implementieren, um die Einheiten neu zu ordnen, siehe RFC6184 für Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top