|
|
|
@@ -1531,6 +1531,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) |
|
|
|
MpegTSWrite *ts = s->priv_data; |
|
|
|
MpegTSWriteStream *ts_st = st->priv_data; |
|
|
|
const int64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) * 2; |
|
|
|
const int64_t max_audio_delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) / 2; |
|
|
|
int64_t dts = pkt->dts, pts = pkt->pts; |
|
|
|
int opus_samples = 0; |
|
|
|
int side_data_size; |
|
|
|
@@ -1729,25 +1730,9 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (pkt->dts != AV_NOPTS_VALUE) { |
|
|
|
int i; |
|
|
|
for(i=0; i<s->nb_streams; i++) { |
|
|
|
AVStream *st2 = s->streams[i]; |
|
|
|
MpegTSWriteStream *ts_st2 = st2->priv_data; |
|
|
|
if ( ts_st2->payload_size |
|
|
|
&& (ts_st2->payload_dts == AV_NOPTS_VALUE || dts - ts_st2->payload_dts > delay/2)) { |
|
|
|
mpegts_write_pes(s, st2, ts_st2->payload, ts_st2->payload_size, |
|
|
|
ts_st2->payload_pts, ts_st2->payload_dts, |
|
|
|
ts_st2->payload_flags & AV_PKT_FLAG_KEY, stream_id); |
|
|
|
ts_st2->payload_size = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (ts_st->payload_size && (ts_st->payload_size + size > ts->pes_payload_size || |
|
|
|
(dts != AV_NOPTS_VALUE && ts_st->payload_dts != AV_NOPTS_VALUE && |
|
|
|
av_compare_ts(dts - ts_st->payload_dts, st->time_base, |
|
|
|
s->max_delay, AV_TIME_BASE_Q) >= 0) || |
|
|
|
dts - ts_st->payload_dts >= max_audio_delay) || |
|
|
|
ts_st->opus_queued_samples + opus_samples >= 5760 /* 120ms */)) { |
|
|
|
mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size, |
|
|
|
ts_st->payload_pts, ts_st->payload_dts, |
|
|
|
|