0

セクション間を移動するためにビデオトランジションを使用するフラッシュサイトを構築しています。各セクションの背景は、トランジション中に拡大されたトランジションビデオ自体よりも高解像度の静止フレーム写真です。各ビデオトランジションの最初のフレームは現在の背景画像であり、各ビデオトランジションの最後のフレームは宛先の背景画像です。大まかに言えば、これはサイトでのナビゲーションの意図されたフローです。

静止状態:
前景の高解像度画像、ビデオ要素なし

ユーザーがナビゲーションでアイテムをクリックする:
Flashはnetstreamオブジェクトを介してFLVを準備し、それをバッファリングします。これは、netstream.play()関数を介して実行されます。「Netstatus.Buffer.Full」イベントを受信すると、ネットストリームオブジェクトは一時停止され、ビデオオブジェクトに添付されます。ビデオオブジェクトは、フォアグラウンドの高解像度画像の後ろのディスプレイリストに追加されます。ビデオオブジェクトがステージに追加されるとすぐに、前景の高解像度画像が(トゥイーンを介して)アルファアウトされ、背景のビデオのみが残ります。フォアグラウンドのトゥイーンが終了すると、バックグラウンドのビデオが再生されます。「NetStream.Play.Stop」を受信するとすぐに、プロセスが逆になります。つまり、新しい高解像度の前景画像がビデオレイヤー上にトゥイーンし、それが完了するとすぐにビデオがステージから削除されます。

上で概説したフローには(少なくとも原則として)何も問題はないと思います。また、それを行うのはそれほど難しいことではないようです。しかし、FLV/ビデオオブジェクトの初期設定に問題はありませんでした。最初は、FLVが適切にキューに入れられていなかったように見えました。つまり、高解像度の前景画像がトゥイーンして白い画面が表示され、ビデオがポップインして1、2秒後に再生を開始しました。(FLVの最初のフレームは間違いなく白ではありません)。

何がこの動作を引き起こしているのかわかりませんでしたが、「Buffer.Full」を受信して​​から約100ミリ秒の間ネットストリームを再生するタイマーをハッキングして投入し、白い画面を引き起こしている可能性のあるものを超えてビデオを進めました。これはローカルではうまく機能しましたが、サイトを開発ホストに配置するとすぐに、移行中に白い画面に戻りました。厄介なのは、ハッキングの遅延を最大約2秒に上げると、リモートサーバーのホワイトスクリーンの問題が解消されたということですが、結果は予測できませんでした。接続速度によっては、すべてが完全に機能するように見える場合もあれば、すでに1〜2秒再生されているビデオに投げ込まれる場合もあります。

また、netStatusイベントの代わりにbytesLoaded / bytesTotalを使用して同様のアプローチを試しましたが、役に立ちませんでした。私の最後の実験はキューポイントを使用することでした。FLVのエンコード中に、私はキューポイントをFLVに0.2秒スローし、それを待ってからフォアグラウンドをトゥイーンアウトしました。繰り返しになりますが、ローカルで機能しましたが、リモートサーバーでテストするときにビデオが開始される前に、私はトゥイーンからホワイトに扱われました。

私はここで本当にアイデアが不足しているので、皆さんが提供できるアドバイスをいただければ幸いです。お手数をおかけしますが、よろしくお願いいたします。

ジャスティン

4

1 に答える 1

1

FLVは時々トリッキーな獣です。

これらすべてを処理するために、しばらく前に書いたコードを掘り下げることができるかどうかを確認します。その間、私はキューポイントについてのあなたの考えが好きです、そして私はあなたがそれらで問題にぶつかっている理由を知っています。キューポイントは実際にはキーフレームに関連付けられているため、キューポイントが2番目のキーフレームの後に配置されていることを確認する必要があります。これにより、少なくともビデオの最初のキーフレームが表示されます。

于 2009-09-16T14:40:47.893 に答える