使用ffmpeg将Mp4转换为HLS

21

我正在尝试在iOS应用程序中使用ffmpeg将本地的.mp4视频转换为HLS。我已经使用pods集成了ffmpeg包装器,并生成了所有分段的.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);
    }];

还有其他方法可以做到这一点吗?


我正在考虑让用户的设备对他们拍摄的视频进行编码,而不是在服务器上进行。我很好奇编码是否会在用户端花费太长时间。您能否谈谈您的经验? - Gazihan Alankus
有没有@GaziAlankus问题的任何信息?我也很好奇需要多长时间。 - Julio
我已经尝试了长度长达15分钟的视频,一切都很正常,而且不需要太多时间。HLS模块在几秒钟内就完成了。可能会根据视频质量和长度需要一些时间。 - Vishnu Kumar. S
2个回答

34

转换为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 更多信息请参见这里


谢谢您的回复,但我应该在代码中的哪里设置这个大小呢?我正在一个iPhone应用程序中使用它。 - Vishnu Kumar. S
2
我不知道你的iPhone应用程序。你可以在Apple上寻找媒体文件分段器。 [链接](https://dev59.com/4Ww15IYBdhLWcg3wd7lj) - budthapa

7

最后我通过在FFOutputFile.m中使用以下代码设置hls大小来解决了这个问题。

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

你是在哪里添加的?我也遇到了同样的问题。你能帮忙吗? - Bhumit Mehta
@Bhumit:在FFOutputFile.m文件中,您可以看到一个init方法 - (id) initWithPath:(NSString *)path options:(NSDictionary *)options。请设置此函数内的代码。 - Vishnu Kumar. S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接