IOSアプリでffmpegを使用して、ローカルの.mp4ビデオをHLSに変換しようとしています。ポッドを使用して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);
}];
これを行う他の方法はありますか?
最後に、FFOutputFile.m
次のコードを使用します。
av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0);
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
その他 ここ