Apple 例を挙げます HLSのm3u8ファイルのバイト範囲セグメントのサポート
#EXTM3U
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXTINF:10.0,
#EXT-X-BYTERANGE:75232@0
media.ts
#EXTINF:10.0,
#EXT-X-BYTERANGE:82112@752321
media.ts
#EXTINF:10.0,
#EXT-X-BYTERANGE:69864
media.ts
しかし、特定の.tsファイルに対してそのようなプレイリストを作成する方法がわかりません。そのためのツールはありますか?
のように見えます
ffprobe -show_frames media.ts -print_format json
そのようなプレイリストを構築するためにフレームに関する十分な情報を提供しますが、それを構築するにはいくつかのスクリプトが必要になります。
そのアプローチで成功した場合は、この回答をスクリプトで更新します。
更新:
これが私が今までに見つけたいくつかの便利なリンクです:
iframeプレイリストを生成するためのBashスクリプト -ffprobeを複数回呼び出すため、少し最適化する必要があります
iframe-playlist-generator --project on python通常のプレイリストからiframeプレイリストを生成するために使用できます
最初に検索したものとは異なりますが、I-Frameプレイリストはバイト範囲のプレイリストに似ており、タスクにさらに適しているため、これら2つのプロジェクトを参照/開始点として使用して何かを作成します。私にはもう少し適しています。
プロジェクトは実際にはさまざまな方法を使用してI-Frameのサイズを見つけます-bashスクリプトはffprobeがpkt_sizeに表示するものを使用するだけで、pythonプロジェクトは、位置の差としてサイズを計算することで少しブードゥーを追加しますパケットの数とAppleのサンプルプレイリストに一致するように188を追加します。188バイトはmpeg-tsパケットのサイズであり、おそらく何らかの関係がありますが、方法を理解できていません。このサイズ計算の違いにより、異なるプレイリストが生成されます。 、おそらくそのうちの1つが何らかの形で間違っていますが、実際にはVLCは両方とも問題なく再生されるので、正しくないことが証明されるまで、より単純な方法に固執します。
更新2:
私は ffprobe
で指定された.tsファイルのI-Frame情報を抽出し、I-Frameと通常の両方を構築できるRubyモジュール を作成しましたその情報に基づいたbyterangem3u8プレイリスト(問題で要求されたとおり)。
前述のI-Frameプレイリストを作成する簡単な方法が正しくないことがわかったので、iframe-playlist-generatorの方法を使用しました。出力は、mediafilesegmenter -output-single-file -file-base output-dir/ input.ts
によって生成されたI-Frameプレイリストとほぼ同じで、 Duvrai で言及されていますが、ランダムフレームで188バイトのサイズのミスが発生することがあり、パターンを理解できませんでした。 、したがって、現在は無視されます。
有る -hls_flags
ffmpegオプションとして。 ( https://www.ffmpeg.org/ffmpeg-formats.html )
次のコマンドは、m3u8インデックスファイルのバイト範囲機能(HLSバージョン4からサポート)によってセグメント化された単一のtsファイルを生成します。
$ ffmpeg -i sample.mp3 -hls_time 20 -hls_flags single_file out.m3u8
Appleのmediafilesegmenter
などの標準のセグメンターを使用して、ファイルの長さを確認してから、(cat
プログラムを使用して)それらを1つのファイルに連結できます。ファイルサイズから、プレイリストファイルのバイト範囲を指定するために必要なすべての情報が得られます。
ネットからツールをダウンロードするほど素晴らしいわけではありませんが、それほど複雑なアルゴリズムではありません。
nified Streaming は、これを実行できるツールも提供します。
mp4split --package-hls output-single-file -o prog_index.m3u8 input.mp4
これは彼らの商用ストリーミングパッケージの一部です(彼らはリクエストに応じて無料トライアルを提供しています)。また、 Amazon AWSインスタンス を時給で提供します。