我正在尝试在iOS应用中使用ffmpeg将本地.mp4视频转换为HLS。我已经使用pod集成了ffmpeg包装器并生成了所有分段的.ts文件和m3u8文件,但是.m3u8播放列表文件中没有列出一些.ts文件段,如下所示。它始终列出最后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);
}];
还有其他方法吗?
答案 0 :(得分:21)
转换为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
更多here
答案 1 :(得分:4)
最后,我通过使用以下代码在FFOutputFile.m
中设置hls大小来修复此问题。
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);