Ответ 1
Наконец, я исправил эту проблему, установив размер hls в FFOutputFile.m
, используя следующий код.
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);
Я пытаюсь преобразовать локальное видео .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);
}];
Есть ли другие методы для этого?
Наконец, я исправил эту проблему, установив размер hls в FFOutputFile.m
, используя следующий код.
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);
Размер списка по умолчанию при преобразовании в 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
Подробнее здесь