Many thanks for the response, Ross.
You wrote
The only important thing to note here is that the "fPresentationTime"s
need to correspond to the times that you'd get by calling
"gettimeofday()" - i.e., you can't use your own clock with completely
different values to set the "fPresentationTime"s.
(The reason for this is that our code - when computing 'wall clock'
times for outgoing RTCP "SR" packets - uses "gettimeofday()".)
Just to clarify, by "needs to correspond", do you mean the format of the
time within fPresentationTime here? So as long as I call gettimeofday
once at the start of the stream and increment it as a struct timeval, as
shown below, am I ok?
You also wrote
_ Do I need to add logic to give SPS and PPS frames the same timestamp
as the corresponding video frames? _
I'm not sure how important this is; it depends on whether or not
decoders care about this.
On an i-frame my StreamSource::deliverFrame() function gets called 3
times, ie for the SPS frame, the PPS frame and for the video data. I
could advance the presentation time for the SPS frame and not for the
PPS and video, as long as I can count on the frames always being in this
order. On a p-frame, I just need to advance the presentation time.
This seems very complicated compared to just calling gettimeofday()
every frame, am I missing something here?
Regards
David
On 2021-07-29 9:57 am, DJM-Avalesta wrote:
Hi,
My video encoder/server takes a PAL TV input, h.264 encodes it, and
streams it out on an RTP multicast stream to a decoder.
I am finding that the decoder output is somewhat erratic and not
decoding smoothly when compared to the original input to the encoder.
The decoder (3rd party) is blaming the RTP presentation times it is
receiving in the encoded stream.
I am simply using gettimeofday() for every frame eg.
g_ettimeofday(&fPresentationTime, NULL);_
Other encoders and IP cameras seem to have perfectly sequenced
presentation times so, for a 25fps stream, each frame has a
presentation time of exactly 40ms later than the previous frame,
whereas my stream varies from 27ms to 42ms or worse.
I could replace gettimeofday with something like this, but is this
valid?
if (fPresentationTime.tv_sec == 0 && fPresentationTime.tv_usec == 0)
gettimeofday(&fPresentationTime, NULL);
else
{
// Increment by the sample time
unsigned uSeconds = fPresentationTime.tv_usec + 1000000/25; //25fps,
the frame rate
fPresentationTime.tv_sec += uSeconds/1000000;
fPresentationTime.tv_usec = uSeconds%1000000;
}
Also, other encoders seem to have the same timestamp for the SPS and
PPS frames as for the corresponding video frames, whereas my encoder
has individual timestamps on the SPS and PPS packets, which are
different from the video frames timestamps.
Do I need to add logic to give SPS and PPS frames the same timestamp as
the corresponding video frames?
Many thanks
David
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel