私はh264ビデオを持っており、現在、AppleのHTTPビデオストリーミングツールとmediafilesegmenterを使用してこれらのファイルをセグメント化しています。私がする必要があるのは、 この非常に人気のあるオープンソースのセグメンター に基づいて代替のセグメンターに切り替えることです。
問題は、このセグメンターがビデオを撮るだけでなく、MPEG-TSビデオだけを撮ることです。そのため、最初にh264ビデオをTSに変換する必要があります。
私はffmpegでそれを行うことができます。私はこれを使用しています:
ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts
しかし、これはかなり大きな出力を作成します。その理由は、Appleのセグメンターが同じコーデック(AVC)と同じオーディオコーデック(AAC)を保持しているのに対し、ffmpegはビデオ形式をMPEGビデオに変更しているためです。
問題は、どういうわけか同じAVCビデオコーデックを維持しながら、ビデオをトランスポートストリームに変換できるかということです。
したがって、私の目標は、Appleのmedifilesegmenterと同じビデオ品質と同じビデオコーデックを維持することです。
UPD:わかりました... ffmpegはビデオをセグメントに分割できるようです:
ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_list test.m3u8 -segment_format mpegts segment%d.ts
それにはまだ1つの問題があります:それはhttpライブストリーミングインデックスファイルを作成しません。 (-segment_listは、セグメントのリストを含むファイルを作成しますが、HLSインデックスのようには見えません)。したがって、インデックスファイルを作成する必要があります
試してみてください:
ffmpeg -i in.mp4 -acodec copy -vcodec copy out.ts
Ffmpegにはセグメンターもあります。 http://ffmpeg.org/ffmpeg.html#segment_002c-stream_005fsegment_002c-ssegment を参照してください
-segment_list_type
をm3u8
に設定してみてください。 close_list
が呼び出されるまでセグメント期間がリストに追加されないため、リストは静的ファイル変換には適していますが、ライブストリームには適していません。
リストタイプは、現在のリリースのリスト名ファイル拡張子から設定する必要がありますが、そうではありません。
-segment_list_flags live
を設定してみてください