mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Merge commit '3041183677bda0a431b36e96a2c76617abaa8183'
* commit '3041183677bda0a431b36e96a2c76617abaa8183': dashenc: Heuristically fill in the duration of packets that need it Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
09585e377c
@ -69,6 +69,7 @@ typedef struct OutputStream {
|
||||
int nb_segments, segments_size, segment_index;
|
||||
Segment **segments;
|
||||
int64_t first_pts, start_pts, max_pts;
|
||||
int64_t last_dts;
|
||||
int bit_rate;
|
||||
char bandwidth_str[64];
|
||||
|
||||
@ -654,6 +655,7 @@ static int dash_write_header(AVFormatContext *s)
|
||||
set_codec_str(s, st->codec, os->codec_str, sizeof(os->codec_str));
|
||||
os->first_pts = AV_NOPTS_VALUE;
|
||||
os->max_pts = AV_NOPTS_VALUE;
|
||||
os->last_dts = AV_NOPTS_VALUE;
|
||||
os->segment_index = 1;
|
||||
}
|
||||
|
||||
@ -866,6 +868,16 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
// Fill in a heuristic guess of the packet duration, if none is available.
|
||||
// The mp4 muxer will do something similar (for the last packet in a fragment)
|
||||
// if nothing is set (setting it for the other packets doesn't hurt).
|
||||
// By setting a nonzero duration here, we can be sure that the mp4 muxer won't
|
||||
// invoke its heuristic (this doesn't have to be identical to that algorithm),
|
||||
// so that we know the exact timestamps of fragments.
|
||||
if (!pkt->duration && os->last_dts != AV_NOPTS_VALUE)
|
||||
pkt->duration = pkt->dts - os->last_dts;
|
||||
os->last_dts = pkt->dts;
|
||||
|
||||
// If forcing the stream to start at 0, the mp4 muxer will set the start
|
||||
// timestamps to 0. Do the same here, to avoid mismatches in duration/timestamps.
|
||||
if (os->first_pts == AV_NOPTS_VALUE &&
|
||||
|
Loading…
Reference in New Issue
Block a user