2016-03-20 4 views
11

Mp4Boxを使用して長いMP4ビデオの固定長セグメントを作成しました。 Mp4Boxはmv_init.mp4というメタ情報ファイルを作成し、mv_1.m4smv_2.m4sなどのセグメントを作成します。私はHTML5 Media Source Extensionsを使用してビデオをストリーミングし、ストリーミングは正常に動作しています。ユーザーが別の時間を探しているときにHTML5ビデオストリーミングで.m4sセグメントファイルサフィックスを計算する

問題は私のHTML5プレーヤーの機能を求める時間を利用できませんユーザーがシークバーを使用して別の時点を探す場合、currentTimeの正しいセグメントファイル(mv_{number}.m4s)を取得する必要があります。例えば

  • ビデオ時間:2時間
  • セグメントサイズ:
  • ユーザが時間にシーク10秒:25分

25分= 25×60秒= 1500秒。各セグメントの長さは10秒ですので、セグメント番号1500/10 = 150が必要です。必要なセグメントファイルはmv_150.m4sです。

計算は明らかに正しいと思われるが、それはストリーミングを続行する前に、HTML5プレーヤーは、mv_150.m4s後にさらに多くのファイルをダウンロードします。

セグメントファイル番号を正しく計算すると、シーク後にストリーミングがスムーズに実行され、余分なファイルはダウンロードされません。 MP4ビデオのセグメントを作成するには

は、私は次のコマンドを使用:

MP4Box -dash 10000 -out video.mpd -dash-profile live -segment-name mv_ -rap video.mp4 
+0

あなたはプレイヤーの作者ですか?あなたは[mcve]を含めることができますか?私。この問題を示す最小限の例です。どのブラウザを使用していますか? – Palec

答えて

3

を私が問題に研究し、本当の原因を発見しました。セグメントをロードするための計算は正しいものでした。この問題は、ビデオファイルのキーフレーム間隔で発生していました。キーフレームとは、ビデオ内のフレームで、その後、ビデオをそのポイントからロードして実行することができます。だから私の場合は、各セグメントの先頭にキーフレームを挿入する必要があります。したがって、異なる時間位置でビデオを探索するとき、ロードされる次のセグメントには、開始時にキーフレームが含まれます。

ビデオファイルのキーフレームは、FFMPEGを使用して設定できます。たとえば、5秒のセグメントを持つビデオがある場合、ffmpegを使用して5秒間隔でキーフレームを作成する必要があります。キーフレームを設定する際のもう1つの重要なポイントは、ビデオのフレームレートを調べることです。キーフレームの位置を正確に計算するには、ビデオのフレームレートが固定されている必要があります。

例:

Video File: gladiator.mp4 

Segment Size: 5 seconds 

いいえ我々設定FFMPEG

ffmpegの-i gladiator.mp4 -x264-paramsは keyint = 120 USINGフレームレートとキーフレームの間隔:MIN-keyintを= 120:無シーンクエスト= 1 - r 24剣闘士 - 出力。MP4

keyint=120 i.e; 24 fps * 5 seconds = 120 

そして今、我々は、オンデマンド-segment名mv_ Mp4Box

MP4Box -dash 5000 -frag 5000 -out gladiator.mpd -dashプロファイル を使用してセグメントファイルを作成しますグラディエーター-output.mp4

だから、各セグメントファイルの開始時にキーフレームを持つにそうmv_1、mv_2、...などのセグメントを作成します。

Seekable Dash Streaming Example

関連する問題