Am 04.10.24 um 12:06 schrieb Steven Liu:
Jonathan Baecker <jonba...@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@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@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!


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to