[FFmpeg-devel] [PATCH] avformat/hlsenc: add support for microseconds since epoch based sequence number

Steven Liu lq at chinaffmpeg.org
Thu Apr 30 04:21:52 EEST 2020



> 2020年4月30日 上午12:29,Marton Balint <cus at passwd.hu> 写道:
> 
> 
> 
> On Sat, 18 Apr 2020, Marton Balint wrote:
> 
>> Sequence numbers of segments should be unique, if an encoder is using shorter
>> than 1 second segments and it is restarted, then future segments will be using
>> already used sequence numbers if initial sequence number is based on the number
>> of seconds since epoch and not microseconds.
> 
> Ping.
Sorry response so late.
LGTM
> 
> Thanks,
> Marton
> 
>> 
>> Signed-off-by: Marton Balint <cus at passwd.hu>
>> ---
>> doc/muxers.texi       |  3 +++
>> libavformat/hlsenc.c  | 13 ++++++++++---
>> libavformat/version.h |  2 +-
>> 3 files changed, 14 insertions(+), 4 deletions(-)
>> 
>> diff --git a/doc/muxers.texi b/doc/muxers.texi
>> index e5b8debcb3..cf1c9a8622 100644
>> --- a/doc/muxers.texi
>> +++ b/doc/muxers.texi
>> @@ -640,6 +640,9 @@ Set the starting sequence numbers according to @var{start_number} option value.
>> @item epoch
>> The start number will be the seconds since epoch (1970-01-01 00:00:00)
>> + at item epoch_us
>> +The start number will be the microseconds since epoch (1970-01-01 00:00:00)
>> +
>> @item datetime
>> The start number will be based on the current date/time as YYYYmmddHHMMSS. e.g. 20161231235759.
>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>> index d75684741f..008a3f3947 100644
>> --- a/libavformat/hlsenc.c
>> +++ b/libavformat/hlsenc.c
>> @@ -41,6 +41,7 @@
>> #include "libavutil/random_seed.h"
>> #include "libavutil/opt.h"
>> #include "libavutil/log.h"
>> +#include "libavutil/time.h"
>> #include "libavutil/time_internal.h"
>> #include "avformat.h"
>> @@ -56,6 +57,8 @@ typedef enum {
>>    HLS_START_SEQUENCE_AS_START_NUMBER = 0,
>>    HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH = 1,
>>    HLS_START_SEQUENCE_AS_FORMATTED_DATETIME = 2,  // YYYYMMDDhhmmss
>> +    HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH = 3,
>> +    HLS_START_SEQUENCE_LAST, // unused
>> } StartSequenceSourceType;
>> typedef enum {
>> @@ -2788,9 +2791,12 @@ static int hls_init(AVFormatContext *s)
>>        pattern = "%d.m4s";
>>    }
>>    if ((hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) ||
>> +        (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH) ||
>>        (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME)) {
>> -        time_t t = time(NULL); // we will need it in either case
>> -        if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) {
>> +        time_t t = time(NULL);
>> +        if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH) {
>> +            hls->start_sequence = av_gettime();
>> +        } else if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) {
>>            hls->start_sequence = (int64_t)t;
>>        } else if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME) {
>>            char b[15];
>> @@ -3083,9 +3089,10 @@ static const AVOption options[] = {
>>    {"event", "EVENT playlist", 0, AV_OPT_TYPE_CONST, {.i64 = PLAYLIST_TYPE_EVENT }, INT_MIN, INT_MAX, E, "pl_type" },
>>    {"vod", "VOD playlist", 0, AV_OPT_TYPE_CONST, {.i64 = PLAYLIST_TYPE_VOD }, INT_MIN, INT_MAX, E, "pl_type" },
>>    {"method", "set the HTTP method(default: PUT)", OFFSET(method), AV_OPT_TYPE_STRING, {.str = NULL},  0, 0,    E},
>> -    {"hls_start_number_source", "set source of first number in sequence", OFFSET(start_sequence_source_type), AV_OPT_TYPE_INT, {.i64 = HLS_START_SEQUENCE_AS_START_NUMBER }, 0, HLS_START_SEQUENCE_AS_FORMATTED_DATETIME, E, "start_sequence_source_type" },
>> +    {"hls_start_number_source", "set source of first number in sequence", OFFSET(start_sequence_source_type), AV_OPT_TYPE_INT, {.i64 = HLS_START_SEQUENCE_AS_START_NUMBER }, 0, HLS_START_SEQUENCE_LAST-1, E, "start_sequence_source_type" },
>>    {"generic", "start_number value (default)", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_START_SEQUENCE_AS_START_NUMBER }, INT_MIN, INT_MAX, E, "start_sequence_source_type" },
>>    {"epoch", "seconds since epoch", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH }, INT_MIN, INT_MAX, E, "start_sequence_source_type" },
>> +    {"epoch_us", "microseconds since epoch", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH }, INT_MIN, INT_MAX, E, "start_sequence_source_type" },
>>    {"datetime", "current datetime as YYYYMMDDhhmmss", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_START_SEQUENCE_AS_FORMATTED_DATETIME }, INT_MIN, INT_MAX, E, "start_sequence_source_type" },
>>    {"http_user_agent", "override User-Agent field in HTTP header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = NULL},  0, 0,    E},
>>    {"var_stream_map", "Variant stream map string", OFFSET(var_stream_map), AV_OPT_TYPE_STRING, {.str = NULL},  0, 0,    E},
>> diff --git a/libavformat/version.h b/libavformat/version.h
>> index 18c2f5fec2..719cda6b98 100644
>> --- a/libavformat/version.h
>> +++ b/libavformat/version.h
>> @@ -33,7 +33,7 @@
>> // Also please add any ticket numbers that you believe might be affected here
>> #define LIBAVFORMAT_VERSION_MAJOR  58
>> #define LIBAVFORMAT_VERSION_MINOR  42
>> -#define LIBAVFORMAT_VERSION_MICRO 100
>> +#define LIBAVFORMAT_VERSION_MICRO 101
>> #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
>>                                               LIBAVFORMAT_VERSION_MINOR, \
>> -- 
>> 2.16.4
>> 
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".

Thanks

Steven Liu





More information about the ffmpeg-devel mailing list