2016-05-21 8 views
0

.mp4ファイルからhlsストリームを作成しようとしています。これまでのところ、マニフェスト+ .tsファイルを作成することはできますが、私はplaylist.m3u8を持っていません。それ、どうやったら出来るの?ここでプレイリスト/異なる帯域幅のffmpegを作成するにはどうすればよいですか?

はHLSストリーム(なしプレイリスト)を作成し、私の現在のコマンドです:

ffmpeg -i test.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_list out.m3u8 -segment_time 10 out%03d.ts 

これが何を作成するout.m3u8です:

#EXTM3U 
#EXT-X-TARGETDURATION:10 
#EXT-X-MEDIA-SEQUENCE:0 
#EXTINF:10, 
out.ts 
#EXTINF:10, 
out.ts 

私が作りたいもの:

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000 
low.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000 
medium.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000 
high.m3u8 

答えて

3

まず、adaptive streaming with HLSを行うには、あなたがサポートしたいビットレートでビデオをエンコードする必要がありますオルト。 Appleのencoding recommendationsを見てみましょう。

これを実行したら、各動画を分割して再生リストを生成する必要があります。最後のステップでは、master playlistを作成して、バリアントプレイリストのURLと各ストリームの情報(帯域幅、解像度など)を追加します。これはプレーヤーのビデオソースとして使用するプレイリストです。

たとえば、ソースビデオが1080pで撮影され、ビデオビットレートが1200kの360pバリアントを生成するとします。あなたは可能性、次のffmpegのコマンドを使用して、そのような何か:

ffmpeg -i 1080p.mov -c:v libx264 -vprofile baseline -vlevel 3.1 -s 640x360 -b:v 1200k -strict -2 -c:a aac -ar 44100 -ac 2 -b:a 96k 360p.mov 

注あなたはニーズからの変異体を作製(ソース)ビデオは、高品質を可能にすること - あなたは720pの1から1080pのビデオをエンコードすることはできません(なしアップスケーリング)。

次に、プレイリストやこのビデオのセグメントを生成するために、あなたの質問にいずれかのコマンドを実行します。

ffmpeg -i 360p.mov -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_time 10 -segment_format mpegts -segment_list 360p/playlist.m3u8 -segment_list_type m3u8 360p/fileSequence%d.ts 

は今マスタープレイリストを作成し、プレイリスト、あなたの(相対)URLを追加作成されました。したがって、このような何か:

#EXTM3U 
#EXT-X-STREAM-INF:BANDWIDTH=1228800,CODECS="mp4a.40.2,avc1.4d401e",RESOLUTION=640x360 
360p/playlist.m3u8 

(。帯域幅属性も考慮に私はここに行っていないオーディオのビットレートを取る必要があります)

は、他の変異体のためのプロセスを繰り返します。

プレーヤーは、プレイリストで利用可能なストリームに関する情報と、その時点で使用可能な帯域幅を使用して、再生に最も適したストリームを判断します。

+0

マスタープレイリストをプログラマに作成する方法はありますか?たぶんffmpegを使用していますか? – Murilo

+0

こんにちは@Murilo、はい。 https://ffmpeg.org/ffmpeg-formats.html#hlsのドキュメントを参照してください。 –

関連する問題