2009-08-27 9 views
1

私は何も文書化されていない奇妙な動作を経験しています バグ?最初の停止後にNetstreamが再開しない場合は、

play()メソッドを呼び出した後、NetStreamのはをnetStatusコード は "NetStream.Play.Start" であるとき、一時停止している:

はここで何が起こっているかです。これにより、自動的に再生するデフォルトの動作が無効になります( )。 で再開する前に、 togglePause()またはresume()を実行するには、操作 を実行してください。 togglePause()またはresume()を使用して再開しようとすると、 のネットストリームは再び再生を開始しません。

すぐにただちに停止してからseek()を使わずにresume()すると、 は正常に再開します。

また、最初の一時停止を約250ms遅延させた場合は、次にseek()と を問題なく再開できます。

私はここでのデモとソースを掲示: http://drinkspiller.cannonballinteractive.com/temp/ResumeAfterPauseAndSeek/

をコード初期の一時停止を処理し、追求し、再開ボタンを処理するために、マイナー 追加が直接のNetStream用AS3ドキュメントからのコード例です。 それほど大したことはありません。

私はstream.seek(0)とstream.pause()を呼び出して一時停止しています。この は、最初のフレームが何もではなくVideoインスタンスに確実に表示されます。 の動作は、stream.seek(0)を使用せずに、stream.pause()を使用して の再生を停止する場合にのみ発生します。

また、私はstartPaused()の呼び出しを遅らせました。バッファ満杯のイベント コードまで、動作は同じです。

これは バグであることを知り、賢明な回避策を見つけたり、私に確認してもらえますか?どうもありがとう!

+0

drinkspiller、あなたはそれを最後に解決しましたか?どうやって共有できますか? – Glue

答えて

3

確かにいくつかのバグがあります。しかし、私はあなたのサンプルを持つ2つの潜在的な問題があると思う:

  1. 私はそれはFLVに関するメタデータを受信する前にNetStream.seekを呼び出すために良いアイデアだとは思いません。 (期間はメタデータから抽出されると考えてください)。それについての公式の文書があるかどうかは分かりませんが、経験からは問題があるかもしれません。 onMetaDataイベントハンドラにpause/seekイベントを入れてみてください。

    私の理解は、メタデータがFLVデータにインラインで含まれていることです。どこでもかまいませんが、理想的には通常はファイルの先頭にあります。したがって、NetStreamは、徐々にダウンロードするときに、ビデオでより高度なことを行うために必要なメタデータを取得するのに十分な情報を受け取る必要があります(シークなど)。それは250msの休止を入れたときにそれがなぜあなたのために働いたのか説明することができます。

  2. サンプルFLVは、私が扱ってきた他のFLVとは別にエンコードされています。理由は分かりませんが、別のFLVを参照するように変更した場合、すべてがうまくいっています(問題#1が解決された後です)。)

    サンプルFLVにシークするために必要なキーフレームがないと思ったのですが、キーフレームを組み込むために再エンコーディングを試みましたが、それでも動作しませんでした。 FLVについて何が違うのか分かりませんし、誰かがそれを指摘できれば、私はそれも非常に便利だと思います。

シーク(0)コールを使用して、ポスターフレームがあることを確認してください...私はそれを自分で行う必要はありません。これは、FLVがどのようにエンコードされるかにも関係している可能性があります。

1

netstream.seek(0)を実行すると、メタデータハンドラが再度呼び出されます。

関連する問題