Mp4 - HLS с использованием ffmpeg

Я пытаюсь преобразовать локальное видео .mp4 в HLS, используя ffmpeg в приложении iOS. Я объединил ffmpeg-оболочку с помощью pods и сгенерировал все сегментированные файлы .ts и файл m3u8, но некоторые из сегментов файла .ts не указаны в файле списка воспроизведения .m3u8, как показано ниже. Он всегда перечисляет последние 5 сегментов видео.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:13
#EXTINF:2,
out13.ts
#EXTINF:1,
out14.ts
#EXTINF:2,
out15.ts
#EXTINF:2,
out16.ts
#EXTINF:1,
out17.ts
#EXT-X-ENDLIST

Я использовал следующие коды для генерации HLS.

    FFmpegWrapper *wrapper = [[FFmpegWrapper alloc] init];
    [wrapper convertInputPath:inputFilePath outputPath:outputFilePath options:nil progressBlock:^(NSUInteger bytesRead, uint64_t totalBytesRead, uint64_t totalBytesExpectedToRead) {

    } completionBlock:^(BOOL success, NSError *error) {
        success?NSLog(@"Success...."):NSLog(@"Error : %@",error.localizedDescription);
    }];

Есть ли другие методы для этого?

Ответ 1

Наконец, я исправил эту проблему, установив размер hls в FFOutputFile.m, используя следующий код.

av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);

Ответ 2

Размер списка по умолчанию при преобразовании в HLS равен 5. Итак, вы получаете последние 5 файлов .ts. Вы должны установить -hls_list_size 0, чтобы включить все сгенерированные файлы .ts.

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8 Подробнее здесь