0

mp4 ファイルからアダプティブ ストリームを作成しようとしています。私はストリーミングの経験が豊富で、Silverlight を介したスムーズなストリーミングの実装に成功しています。HTML5 で機能するすべてのソリューションが必要です。DASHを追求しています。だからここに私が取るステップがあります...

  1. ffmpeg を使用して、mp4 をさまざまなサイズにリサンプリングします。
  2. Bento4s mp4Fragment ユーティリティを使用して、ファイルが適切にフラグメント化されていることを確認します。
  3. Bento4s mp4dash ユーティリティを使用して、DASH mpd ファイルと関連するセグメントを作成します。

私は、これらのユーティリティのそれぞれを学び、機能すると思われる出力を得るプロセスを作成するために多くの作業を行いました。信頼できる DASH アーティファクトを作成するため。しかし、私は何か間違ったことをしているようです。私が実行するコマンドラインの例を次に示します。

ステップ 1 では、3 つの異なるファイルを作成します... 3 つの異なる速度とサイズに対して... (これらは正確なコマンド ラインではない可能性があります。古いメモからのものです... しかし、パラメーター値は私が確実に使用しているものです。 )

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 1500k -maxrate 1500k -bufsize 1000k -vf "scale=-1:720" C:\_SIMULATED_SHARE_C\ff\output\outputfile720.mp4

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 800k -maxrate 800k -bufsize 500k -vf "scale=-1:540" C:\_SIMULATED_SHARE_C\ff\output\outputfile540.mp4

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 400k -maxrate 400k -bufsize 400k -vf "scale=-1:360" C:\_SIMULATED_SHARE_C\ff\output\outputfile360.mp4

これで、断片化する必要がある 3 つのファイルが得られます。そこで、Bento4 の mp4fragment ユーティリティを使用してそれらをフラグメント化します。このコマンド ラインは単純なので、例は示しません。

Bento4s mp4dash を使用してダッシュを作成します。このようなもの...

"E:\\_INSTALL\\Bento4\\Bento4-SDK-1-4-3-607.x86-microsoft-win32-vs2010\\Bento4-SDK-1-4-3-607.x86-microsoft-win32-vs2010\\bin\\mp4dash.exe --mpd-name=\"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\dash\\something.mpd\" -f -o \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\dash\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny360f.mp4\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny540f.mp4\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny720f.mp4\" "

これは問題なく動作します。そして、mpd ファイル、セグメント ファイルを含むオーディオ フォルダー、セグメント ファイルを含む 3 つのフォルダーを含むビデオ フォルダーを作成します。

mpd を正常に再生するように IIS を構成できます。セグメントファイルと同様に。ビデオは正常に再生されます...そして停止します。50 ~ 60 秒でフリーズします。フリーズする直前にHTML5 videoタグのonratechangeイベントが発生しているのが確認できます。プレイ率が変化することで上がるイベントです。私はこれを変えるために何もしません。

問題の実際の動画の長さは約 1 時間です。また、dash.js ライブラリをプレーヤーとして使用しています。

変更すべきコンポーネントや仕様を特定できる場合は、お知らせください。

2016 年 3 月 7 日の更新

ここで要求されたように、MPD コンテンツは次のとおりです...

<?xml version="1.0" ?>
<MPD mediaPresentationDuration="PT51M51.909S" minBufferTime="PT0.80S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011">
  <!-- Created with Bento4 mp4-dash.py, VERSION=1.6.0-607 -->
  <Period>
    <!-- Audio -->
    <AdaptationSet lang="en" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
      <SegmentTemplate duration="801" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation audioSamplingRate="48000" bandwidth="132491" codecs="mp4a.40.2" id="audio/en">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <!-- Video -->
    <AdaptationSet maxHeight="720" maxWidth="1280" mimeType="video/mp4" minHeight="540" minWidth="640" segmentAlignment="true" startWithSAP="1">
      <SegmentTemplate duration="801" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation bandwidth="785536" codecs="avc1.64001F" frameRate="30000/1001" height="540" id="video/1" scanType="progressive" width="960"/>
      <Representation bandwidth="403537" codecs="avc1.64001E" frameRate="30000/1001" height="360" id="video/2" scanType="progressive" width="640"/>
      <Representation bandwidth="1496514" codecs="avc1.64001F" frameRate="30000/1001" height="720" id="video/3" scanType="progressive" width="1280"/>
    </AdaptationSet>
  </Period>
</MPD>

2016 年 3 月 7 日の更新

これは、50 秒から 60 秒の間に不明な理由で停止した 2 つの異なるビデオのコンソール出力です。

///ABS VIDEO 

58393][rulesController] [RULES]: playbackTimeRule [Fragment:download,82,MediaSegment,0video] Default 
dash.all.js:11 [58395][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,82,MediaSegment,0,video] Default 
dash.all.js:11 [58401][indexHandler][audio] Getting the request for time: 82.082 
dash.all.js:11 [58403][indexHandler][audio] Index for time 82.082 is 81 
dash.all.js:11 [58405][indexHandler][audio] SegmentTemplate: 81.08099999999999 / 1361.235 
dash.all.js:11 [58406][indexHandler][audio] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [58407][rulesController] [RULES]: playbackTimeRule [Fragment:download,82,MediaSegment,0audio] Default 
dash.all.js:11 [58417][fragmentLoader] loaded video:MediaSegment:82.082 (200, 18ms, 2ms) 
dash.all.js:11 [58419][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,82,MediaSegment,0,audio] Default 
dash.all.js:11 [58435][fragmentLoader] loaded audio:MediaSegment:82.082 (200, 14ms, 0ms) 
dash.all.js:11 [59390][indexHandler][video] Getting the request for time: 83.083 
dash.all.js:11 [59392][indexHandler][video] Index for time 83.083 is 82 
dash.all.js:11 [59393][indexHandler][video] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [59394][indexHandler][video] SegmentTemplate: 83.08299999999998 / 1361.235 
dash.all.js:11 [59395][rulesController] [RULES]: playbackTimeRule [Fragment:download,83,MediaSegment,0video] Default 
dash.all.js:11 [59396][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,83,MediaSegment,0,video] Default 
dash.all.js:11 [59401][indexHandler][audio] Getting the request for time: 83.083 
dash.all.js:11 [59403][indexHandler][audio] Index for time 83.083 is 82 
dash.all.js:11 [59404][indexHandler][audio] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [59406][indexHandler][audio] SegmentTemplate: 83.08299999999998 / 1361.235 
dash.all.js:11 [59408][rulesController] [RULES]: playbackTimeRule [Fragment:download,83,MediaSegment,0audio] Default 
dash.all.js:11 [59416][fragmentLoader] loaded video:MediaSegment:83.08299999999998 (200, 17ms, 1ms) 
dash.all.js:11 [59418][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,83,MediaSegment,0,audio] Default 
dash.all.js:11 [59437][fragmentLoader] loaded audio:MediaSegment:83.08299999999998 (200, 14ms, 1ms) 
dash.all.js:11 [59902][scheduleController][video] Stalling Buffer 
dash.all.js:11 [59903][bufferController][video] Waiting for more buffer before starting playback. 
dash.all.js:11 [59906][scheduleController][audio] Stalling Buffer 
dash.all.js:11 [59907][bufferController][audio] Waiting for more buffer before starting playback. 
dash.all.js:11 [63684][playbackController] <video> ratechange:  0 




///HOG VIDEO

[58250][rulesController] [RULES]: playbackTimeRule [Fragment:download,105,MediaSegment,0audio] Default 
dash.all.js:11 [58266][fragmentLoader] loaded video:MediaSegment:84.105 (200, 28ms, 1ms) 
dash.all.js:11 [58269][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,105,MediaSegment,0,audio] Default 
dash.all.js:11 [58287][fragmentLoader] loaded audio:MediaSegment:84.105 (200, 14ms, 1ms) 
dash.all.js:11 [58982][indexHandler][video] Getting the request for time: 84.906 
dash.all.js:11 [58983][indexHandler][video] Index for time 84.906 is 105 
dash.all.js:11 [58984][indexHandler][video] SegmentTemplate: 84.105 / 3111.909 
dash.all.js:11 [58984][indexHandler][video] SegmentTemplate: 84.906 / 3111.909 
dash.all.js:11 [58985][rulesController] [RULES]: playbackTimeRule [Fragment:download,106,MediaSegment,0video] Default 
dash.all.js:11 [58986][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,106,MediaSegment,0,video] Default 
dash.all.js:11 [58989][indexHandler][audio] Getting the request for time: 84.906 
dash.all.js:11 [58990][indexHandler][audio] Index for time 84.906 is 105 
dash.all.js:11 [58991][indexHandler][audio] SegmentTemplate: 84.105 / 3111.909 
dash.all.js:11 [58992][indexHandler][audio] SegmentTemplate: 84.906 / 3111.909 
dash.all.js:11 [58993][rulesController] [RULES]: playbackTimeRule [Fragment:download,106,MediaSegment,0audio] Default 
dash.all.js:11 [59002][fragmentLoader] loaded video:MediaSegment:84.906 (200, 14ms, 1ms) 
dash.all.js:11 [59003][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,106,MediaSegment,0,audio] Default 
dash.all.js:11 [59014][fragmentLoader] loaded audio:MediaSegment:84.906 (200, 8ms, 1ms) 
dash.all.js:11 [59735][scheduleController][video] Stalling Buffer 
dash.all.js:11 [59736][bufferController][video] Waiting for more buffer before starting playback. 
dash.all.js:11 [59738][scheduleController][audio] Stalling Buffer 
dash.all.js:11 [59739][bufferController][audio] Waiting for more buffer before starting playback. 
dash.all.js:11 [61695][playbackController] <video> ratechange:  0 
4

1 に答える 1