web-dev-qa-db-ja.com

ffmpegHLSプレイリストが最初から始まっていない

5分間のビデオファイルを取得して、単一ファイルHTTPライブストリームプレイリストと.tsファイルを作成しようとしています。プレイリストファイル形式は、iOS 5の時点で個別のファイルではなく、バイト範囲をサポートできます。これは、私のユースケースの適切なターゲットです。しかし、ffmpegコマンドを実行すると、結果の.m3u8プレイリストの最初のエントリがバイト0から(またはバイト0の近くでさえ)開始されません。

例えば:

ffmpeg -i input -hls_flags single_file out.m3u8

次のようなプレイリストを作成します。

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:63
#EXTINF:1.376367,
#EXT-X-BYTERANGE:568324@63107840
out.ts
#EXTINF:1.334667,
#EXT-X-BYTERANGE:235564@63676164
out.ts
#EXTINF:1.918589,
#EXT-X-BYTERANGE:343288@63911728
out.ts
#EXTINF:10.427078,
#EXT-X-BYTERANGE:3311996@64255016
out.ts
#EXTINF:5.672333,
#EXT-X-BYTERANGE:52828@67567012
out.ts
#EXT-X-ENDLIST

最初のEXT-X-BYTERANGEエントリは@0ではないことに注意してください。68MBの.tsファイルには約63MBです。実際、プレイリストを<video>タグにロードし、SafariでHTMLを開くと、ビデオの再生は入力ビデオの終わりから約20秒で始まり、0ではなく、それより前にスクラブする方法はありません。

ffmpegすべての動画を含まない再生リストを作成したのはなぜですか?再生リストと一緒に作成された.tsファイルを見ると、すべてのビデオコンテンツが表示されています。

これは最近の ffmpeg static builds Linuxで見られます。また、Homebrewで構築されたバージョンのffmpeg2.7.1でOSXでも見られます。

5
Collin Allen

HLSドキュメントもう一度を読んだ後、私はついにこのオプションに気づきました:

hls_list_sizesize

プレイリストエントリの最大数を設定します。 0に設定すると、リストファイルにはすべてのセグメントが含まれます。デフォルト値は5です。

案の定、私の最初の質問では、ビデオの最後から5つのEXT-X-BYTERANGEエントリがあり、記載されているデフォルト値と一致しています。示されているようにhls_list_size0に設定すると、実際には、ビデオが最初から始まり、予想されるすべてのバイト範囲が含まれるようになります。

6
Collin Allen