[FFmpeg-devel] [PATCH 06/11] avformat/dashenc: addition of @availabilityTimeOffset in MPD

Dixit, Vishwanath vdixit at akamai.com
Wed Apr 4 12:07:37 EEST 2018



On 4/2/18 9:36 AM, Jeyapal, Karthick wrote:
>
>
> On 3/23/18 10:57 AM, vdixit at akamai.com wrote:
>> From: Vishwanath Dixit <vdixit at akamai.com>
>>
>> availability time of Nth segment = availabilityStartTime + (N*segment duration) - availabilityTimeOffset.
>> This field helps to reduce the latency by about a segment duration in streaming mode.
>> ---
>>  libavformat/dashenc.c | 11 ++++++++++-
>>  1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
>> index b62cb3e..d20bdba 100644
>> --- a/libavformat/dashenc.c
>> +++ b/libavformat/dashenc.c
>> @@ -85,6 +85,7 @@ typedef struct OutputStream {
>>      char filename[1024];
>>      char full_path[1024];
>>      char temp_path[1024];
>> +    int64_t chunk_duration;
> Remove this variable chunk_duration, and instead create a variable directly for availabilityTimeOffset.
Thanks for the review. I have submitted the revised patch https://patchwork.ffmpeg.org/patch/8312/

>>  } OutputStream;
>>  
>>  typedef struct DASHContext {
>> @@ -343,8 +344,12 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, AVFormatCont
>>      if (c->use_template) {
>>          int timescale = c->use_timeline ? os->ctx->streams[0]->time_base.den : AV_TIME_BASE;
>>          avio_printf(out, "\t\t\t\t<SegmentTemplate timescale=\"%d\" ", timescale);
>> -        if (!c->use_timeline)
>> +        if (!c->use_timeline) {
>>              avio_printf(out, "duration=\"%d\" ", c->seg_duration);
>> +            if (c->streaming && os->chunk_duration)
>> +                avio_printf(out, "availabilityTimeOffset=\"%.3f\" ",
>> +                            ((double) c->seg_duration - os->chunk_duration) / AV_TIME_BASE);
>> +        }
>>          avio_printf(out, "initialization=\"%s\" media=\"%s\" startNumber=\"%d\">\n", c->init_seg_name, c->media_seg_name, c->use_timeline ? start_number : 1);
>>          if (c->use_timeline) {
>>              int64_t cur_time = 0;
>> @@ -1283,6 +1288,10 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt)
>>          format_date_now(c->availability_start_time,
>>                          sizeof(c->availability_start_time));
>>  
>> +    if (!os->chunk_duration && pkt->duration)
>> +        os->chunk_duration = av_rescale_q(pkt->duration, st->time_base,
>> +                                          AV_TIME_BASE_Q);
> Don’t use the term ‘chunk_duration’ here, as it is not clearly conceptualized in this file. 
> Instead use the term ‘frame_duration’(local variable) to avoid confusion.
Thanks for the review. I have submitted the revised patch https://patchwork.ffmpeg.org/patch/8312/ 
>> +
>>      if (c->use_template && !c->use_timeline) {
>>          elapsed_duration = pkt->pts - os->first_pts;
>>          seg_end_duration = (int64_t) os->segment_index * c->seg_duration;
>
>
>





More information about the ffmpeg-devel mailing list