2011-12-21 60 views
3

如果加載了在Flash或的VideoDisplay Flex中FLVPlayback組件,並試圖尋求到一個特定的位置或者設置playheadTime到特定位置,電影總是或非常大量的尋找播放頭到Flash視頻中的特定位置?

在Flash中,將輪上下一個FLVPlayback組件將舞臺和源設置爲http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/examples/assets/phone.flv 然後嘗試video.seek(6)或video.playheadTime = 6;

如果你使用其內置的洗滌它只是將後藤10.同樣,僅間隔爲0,5或10因此頂多看到擦洗框架是3

下面是柔性用一個例子相同的結果。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:media="com.synapsegroup.media.*"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.events.MetadataEvent; 
      import mx.events.SliderEvent; 
      import mx.events.VideoEvent; 

      protected function scrubber_changeHandler(event:SliderEvent):void 
      {    
       trace(event.value); 
       video.playheadTime = event.value; 
      } 

      protected function video_playheadUpdateHandler(event:mx.events.VideoEvent):void 
      {    
       //scrubber.value = event.playheadTime; 
       //http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/examples/assets/phone.flv 
      } 

     ]]> 
    </mx:Script> 

    <mx:Panel> 
     <mx:VideoDisplay id="video" source="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/examples/assets/phone.flv" minWidth="200" minHeight="200" 
         autoPlay="false" 
         /> 
     <mx:ControlBar> 
      <mx:Button label="Play" click="video.play();"/> 
      <mx:Button label="Stop" click="video.pause();"/> 
      <mx:HSlider liveDragging="true" id="scrubber" minimum="0" maximum="11.5" change="scrubber_changeHandler(event)" thumbPress="video.pause();"/> 
     </mx:ControlBar> 
    </mx:Panel> 

</mx:Application> 

在這兩種情況下,如果你點擊播放/暫停速度不夠快,你可以對個別幀暫停與更多的粒度,但那不是一個好UX

有我丟失的東西以編程方式做到這一點?

我也想說的是,根據視頻的長度,這在過去是3分鐘長期得到10秒的時間間隔

回答

6

閃存的文件中提到,爲求值()是近似的時間間隔改變。 這部分原因是視頻如何被壓縮。它被分成幾個塊,一個關鍵幀和一組增量幀,它們只包含有關已經改變的數據。通過這種方式,視頻的整體文件大小遠小於每個幀都包含每個像素的文件大小。

但是,這也意味着您不能跳到任何幀,因爲很多幀實際上並不存在。播放頭必須找到最接近的關鍵幀,然後從中繼續播放。

要使視頻停止並尋找任何幀,必須使用一個關鍵幀距離對其進行編碼。試試看,你會看到你的文件大小是enourmouse,但你現在可以讓它順利地向後播放。

至於擦洗棒是不正確的尋求,是的。它是。它有點馬虎。 Boo adobe和所有這些。但是,他們必須在告訴玩家尋找每一次鼠標移動時進行權衡,這可能導致玩家陷入困境,因爲它會計算每個鼠標移動時的keframe加delta值,而不是實際拖動酒吧。

它不是很出色,但是你可以從netstream類編寫你自己的代碼,並且爲你設置更多的平衡。大多數情況下,我認爲他們的平衡是完全可以利用的,即使能夠更精確也是件好事。

+0

感謝您的洞察力 – chrisan 2011-12-22 18:07:42