使用 ffmpeg 将 Mp4 转为 HLS
Mp4 to HLS using ffmpeg
我正在尝试在 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);
}];
还有其他方法吗?
转换为 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
最后我通过使用以下代码在 FFOutputFile.m
中设置 hls 大小解决了这个问题。
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);
我正在尝试在 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);
}];
还有其他方法吗?
转换为 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
最后我通过使用以下代码在 FFOutputFile.m
中设置 hls 大小解决了这个问题。
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);