使用ffmpeg将Mp4转换为HLS

时间:2015-06-18 10:13:55

标签: ios video ffmpeg m3u8 hls

我正在尝试在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);
    }];

还有其他方法吗?

2 个答案:

答案 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);