2016-03-03 50 views
0

我試圖從mp4文件創建自適應流。我在流媒體方面擁有相當豐富的經驗,並且已經通過Silverlight成功實現了流暢的流媒體。我們希望爲HTML5中的所有工作提供解決方案。我正在追求DASH。所以這裏是我採取的步驟...DASH包(mpd)我提出onratechange事件後凍結

  1. 使用ffmpeg重新採樣mp4到不同的大小。
  2. 確保文件使用Bento4s mp4Fragment實用程序正確分段。
  3. 使用Bento4s mp4dash實用程序創建DASH mpd文件和關聯的段。

我已經做了大量的工作來學習這些工具中的每一個,並創建一個獲得輸出的過程,我認爲它會工作。創建可靠的DASH文物。但似乎我做錯了什麼。這裏是我運行的命令行的例子。

對於第一步,我創建了三個不同的文件......對於三種不同的速率和尺寸......(這些可能不是確切的命令行,它們來自舊筆記...但參數值是我的我確定使用)

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 

因此,這給你三個需要分割的文件。所以我使用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個文件夾的視頻文件夾,每個文件夾都帶有段文件。

我可以配置IIS來播放mpd ok。以及分區文件。視頻播放良好...然後停止。它在50到60秒之間凍結。在它凍結之前,我可以確認引發了HTML5視頻標籤的onratechange事件。這是一個隨着遊戲速度改變而增加的事件。我沒有做任何改變,只是發生。

有問題的實際視頻大約1小時。另外我使用dash.js庫作爲播放器。

如果你能識別任何組件或細節,我應該改變,請讓我知道!

UPDATE ON 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> 

UPDATE ON 2016年3月7日

這裏是控制檯輸出對於兩個不同的視頻,這些視頻在50至60年代之間因某種未知原因而停止拍攝

///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 
+0

其實我不認爲onratechange事件不再比症狀爲播放速率確實在改變 - 它停止。我還應該注意到,我看不出有什麼錯誤。 –

回答

0

您可以提供更多信息,例如bento生成的清單以及dash.js在播放停止時生成的調試控制檯日誌嗎?此外,您使用的是哪個版本的dash.js - 最新發布的是2。0您還可以在https://github.com/Dash-Industry-Forum/dash.js.git

乾杯得到在/ dev分支每晚構建

威爾

+0

作爲一個新手,我很抱歉遇到你,但你能告訴我你正在談論的DASH調試控制檯嗎?我不知道在播放時調試播放器的過程。簡單地爲我提供一個適當的鏈接會很好。我有興趣發現這存在...我一定會研究這個。 –

+0

僅供參考我試着用一個完全不同的源文件來做這件事,它也做同樣的事情。上週我剛剛拿到了最新的短跑選手,我不知道這個版本是什麼。 –

+0

另外一個視頻,我在50到60之間凍結,就像另一個一樣。 –