2011-02-10 18 views
0

私はお互いに背後にある複数の短いビデオを再生しています。新しいビデオソースを設定するときに目立たないように、それらを一緒に繋ぐ方法がありますか?VideoPlayerを使用して2つの連続した動画を「黒い枠を挟まずに」再生

現時点では、新しいビデオソースを設定すると黒いフレームが挿入されるという問題が発生しています。イベントの順序は、この

のようなもののようです - 新しいビデオへ>を設定し、ソース - - >コンプリートイベント を派遣 - >ビデオ が終了>画面が空白になります(これは、それは、代わりに起こるべきではありません - >数ミリ秒が経過する - >新しい動画が再生を開始します。

画面が空白にならないようにするか、次のビデオがロードされるまで最後のフレームが表示されたままにすることはできますか。技術的には

おかげで、

デニス

+0

あなたのビデオを再生するために何を使用していますか?これはWeb上でも、デスクトップアプリケーション上でも可能ですか?再生してサポートする予定のビデオのビットレートはどのくらいですか? –

+0

ローカルアプリケーションなので、読み込み時間に問題はありません。私はいくつかのコードを作成し、編集でそれを見てください。 – Dennkster

答えて

0

は、それはなんとかです、しかし、私はあなたがこの時間の右の100%を取得することができます疑います。ここでこれを行う必要があります。

最初の(または前の)ビデオが終了する直前に、新しいプレーヤーインスタンスに次のビデオをロードする必要があります。次のビデオのビットレート 2.クライアントマシンのインターネット帯域幅。次のビデオのビットレート。 3.次のビデオをロードする前に、前のビデオが完全にロードされていない場合は、それも考慮して、現在再生中のビデオの再生を妨げないでください。 4.一部のクライアントコンピュータでは、吃音やグリッチなしにこれを行うことができない場合があります。

問題の最良の解決策は、実際に手でビデオを一緒にステッチすることです。もちろん手前のシーケンスがわからない場合はこれを行うことはできませんので、前に述べたことをやっておきます。

0

ここにShivが記述しているダブルビデオプレーヤーがあります。これは、ほとんどの場合、次のビデオが読み込まれるときに短い休止があることを除いては機能しますが、まだ理想的ではありません。

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> 
    <fx:Metadata> 
     [Event(name="complete", type="org.osmf.events.TimeEvent")] 
    </fx:Metadata> 

    <fx:Script> 
     <![CDATA[ 
      import org.osmf.events.MediaPlayerStateChangeEvent; 
      import org.osmf.events.TimeEvent; 
      import org.osmf.media.MediaPlayer; 
      import org.osmf.media.MediaPlayerState; 

      import spark.components.VideoPlayer; 

      var _source:String = ""; 
      var activePlayer:VideoDisplay = null; 
      var otherPlayer:VideoDisplay = null; 
      var playerIndex:int = 0; 

      public function set source (value:String) { 
       trace('set source: ' + value) 
       if(value == '' || value == null || value == _source) { 
        trace('rejected source'); 
        return; 
       } 

       if(activePlayer != null) { 
        activePlayer.depth = 3; 
       } 
       activePlayer = getElementAt(playerIndex) as VideoDisplay; 
       playerIndex = playerIndex == 0?1:0; 
       otherPlayer = getElementAt(playerIndex) as VideoDisplay; 
       trace('active player: ' + activePlayer.id); 
       activePlayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, player1_mediaPlayerStateChangeHandler); 
       activePlayer.source = value; 
       _source = value; 

      } 
      public function get source():String { 
       return _source; 
      } 

      protected function player1_mediaPlayerStateChangeHandler(event:MediaPlayerStateChangeEvent):void 
      { 
       trace('state change: ' + event.state + ', player: ' + (event.currentTarget.id)); 
       if(event.state == MediaPlayerState.READY) { 
        player1.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE,player1_mediaPlayerStateChangeHandler); 
        player2.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE,player1_mediaPlayerStateChangeHandler); 

        activePlayer.play(); 
        activePlayer.depth = 2; 
        otherPlayer.depth = 1; 
       } 
      } 

      protected function completeHandler(event:TimeEvent):void 
      { 
       if(event.currentTarget == activePlayer) { 
        trace('video complete'); 
        dispatchEvent(event); 
       } 
      } 

     ]]> 
    </fx:Script> 

    <s:VideoDisplay id="player1" autoRewind="false" complete="completeHandler(event)" autoPlay="true" opaqueBackground="false"/> 
    <s:VideoDisplay id="player2" complete="completeHandler(event)" autoRewind="false" autoPlay="true" opaqueBackground="false" /> 

</s:Group> 
関連する問題