mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 04:22:27 +00:00
rtph264pay: only update last_spspps time if all sps/pps got sent successfully
This fixes an issue with gst-rtsp-server where no sps and pps are sent for the first intra frame, because the payloader starts working already when receiving DESCRIBE but there is no transports so it tries to send sps and pps, but that fails with a FLUSHING flow. But the time for last sent sps and pps would still be set, so when PLAY arrives and the first intra frame is to be sent there is no sps and pps sent due to that time since last sps pps is less than spspps_interval. https://bugzilla.gnome.org/show_bug.cgi?id=724213
This commit is contained in:
parent
b9a953161f
commit
53ffd9e1ca
1 changed files with 8 additions and 3 deletions
|
@ -711,6 +711,7 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
|
|||
GstRtpH264Pay * rtph264pay, GstClockTime dts, GstClockTime pts)
|
||||
{
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
gboolean sent_all_sps_pps = TRUE;
|
||||
guint i;
|
||||
|
||||
for (i = 0; i < rtph264pay->sps->len; i++) {
|
||||
|
@ -722,8 +723,10 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
|
|||
ret = gst_rtp_h264_pay_payload_nal (basepayload, gst_buffer_ref (sps_buf),
|
||||
dts, pts, FALSE);
|
||||
/* Not critical here; but throw a warning */
|
||||
if (ret != GST_FLOW_OK)
|
||||
if (ret != GST_FLOW_OK) {
|
||||
sent_all_sps_pps = FALSE;
|
||||
GST_WARNING ("Problem pushing SPS");
|
||||
}
|
||||
}
|
||||
for (i = 0; i < rtph264pay->pps->len; i++) {
|
||||
GstBuffer *pps_buf =
|
||||
|
@ -734,11 +737,13 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
|
|||
ret = gst_rtp_h264_pay_payload_nal (basepayload, gst_buffer_ref (pps_buf),
|
||||
dts, pts, FALSE);
|
||||
/* Not critical here; but throw a warning */
|
||||
if (ret != GST_FLOW_OK)
|
||||
if (ret != GST_FLOW_OK) {
|
||||
sent_all_sps_pps = FALSE;
|
||||
GST_WARNING ("Problem pushing PPS");
|
||||
}
|
||||
}
|
||||
|
||||
if (pts != -1)
|
||||
if (pts != -1 && sent_all_sps_pps)
|
||||
rtph264pay->last_spspps = pts;
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue