J'essaie de convertir une vidéo .mp4 locale en HLS en utilisant ffmpeg dans une application iOS. J'ai intégré l'encapsuleur ffmpeg à l'aide de pods et généré tous les fichiers .ts segmentés et le fichier m3u8, mais certains segments de fichier .ts ne sont pas répertoriés dans le fichier de liste de lecture .m3u8 comme indiqué ci-dessous. Il répertorie toujours les 5 derniers segments vidéo.
#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
J'ai utilisé les codes suivants pour générer le 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);
}];
Existe-t-il d'autres méthodes pour ce faire?
Enfin, j'ai résolu ce problème en définissant la taille hls dans le FFOutputFile.m
en utilisant le code suivant.
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);
La taille de liste par défaut lors de la conversion en HLS est 5 . Vous obtenez donc les 5 derniers fichiers .ts. Vous devez définir -hls_list_size 0
pour inclure tous les fichiers .ts générés.
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
Plus ici