[FFmpeg-devel] [PATCH v3] avformat/hlsenc: Respect `append_list` flag in subtitle

Jonathan Baecker jonbae77 at gmail.com
Sun Oct 13 20:18:21 EEST 2024


Am 04.10.24 um 12:06 schrieb Steven Liu:
> Jonathan Baecker <jonbae77 at gmail.com> 于2024年10月1日周二 03:51写道:
>> Apply Stevens suggestion.
>>
>> Original description:
>> Ensure that when the `-hls_flags append_list` option is set,
>> that *.vtt files in stream_vtt.m3u8 are correctly updated.
>> This fixes https://trac.ffmpeg.org/ticket/11208
>> ---
>>   libavformat/hlsenc.c | 30 ++++++++++++++++++++++++++++++
>>   1 file changed, 30 insertions(+)
>>
>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>> index 571d6b2752..8d4322796d 100644
>> --- a/libavformat/hlsenc.c
>> +++ b/libavformat/hlsenc.c
>> @@ -1202,6 +1202,22 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls,
>>       return 0;
>>   }
>>
>> +static int extract_segment_number(const char *filename) {
>> +    const char *dot = strrchr(filename, '.');
>> +    const char *num_start = dot - 1;
>> +
>> +    while (num_start > filename && *num_start >= '0' && *num_start <= '9') {
>> +        num_start--;
>> +    }
>> +
>> +    num_start++;
>> +
>> +    if (num_start == dot)
>> +        return -1;
>> +
>> +    return atoi(num_start);
>> +}
>> +
>>   static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs)
>>   {
>>       HLSContext *hls = s->priv_data;
>> @@ -1295,6 +1311,20 @@ static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs
>>                       goto fail;
>>                   }
>>                   ff_format_set_url(vs->avf, new_file);
>> +
>> +                if (vs->has_subtitle) {
>> +                    int vtt_index = extract_segment_number(line);
>> +                    const char *vtt_basename = av_basename(vs->vtt_basename);
>> +                    int len = strlen(vtt_basename) + 11;
>> +                    char *vtt_file = av_mallocz(len);
>> +                    if (!vtt_file) {
>> +                        ret = AVERROR(ENOMEM);
>> +                        goto fail;
>> +                    }
>> +                    snprintf(vtt_file, len, vtt_basename, vtt_index);
>> +                    ff_format_set_url(vs->vtt_avf, vtt_file);
>> +                }
>> +
>>                   is_segment = 0;
>>                   new_start_pos = avio_tell(vs->avf->pb);
>>                   vs->size = new_start_pos - vs->start_pos;
>> --
>> 2.46.2
>>
>> _______________________________________________
>> 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".
> LGTM
> Will apply after 48 hours if no more comments.
>
>
> Thanks
> Steven

And the last one :-).

Thanks Steven and have a good week!




More information about the ffmpeg-devel mailing list