10

UIWebViewMPJEG ストリームを取得する URL を介して Web カメラのコンテンツを表示するように設定しています。

別のカメラに切り替えたい場合、UIWebView. 、 このような:

<img id='iImage' src='about:blank'>
<script type='text/javascript'>
function show(url)
{
    iImage.src = url;
}
</script>

これを行わなかった場合、新しい URL に切り替えるたびにUIWebView、新しいコンテンツを表示する準備が整うまで 1 ~ 2 秒間白くなりました。上記のコードでは、コンテンツを直接置き換えるだけで、ホワイトアウトは発生しません。

ただし、2 つのビデオストリームを切り替えると、ある時点で でエラーが発生し、試行錯誤のUIWebView結果、同じビデオストリームをビューに表示する 4 回目にこれが発生することがわかりました。ブラウザ タブで 4 つのビデオ ストリームを開こうとすると、前の 3 つのうちの 1 つを閉じるまで、4 つ目がロード サイクルでスタックします。

これは私に次のことを信じさせます:

  1. 問題のカメラは、同時に 3 つのストリームしか提供できません
  2. srcタグの属性を変更して<img...>も、前のストリームは閉じられません

これはキープアライブにリンクできますか? タグでの表示を停止した場合でも、Webkit ブラウザー システムは以前のストリームを維持でき<img...>ますか?

基本的に、再現するにはこれを行うことができます:

  1. 上記のコンテンツをUIWebView
  2. これを 4 回呼び出します。wv.EvaluateJavascript("show(url)")

4 回目の通話で、真ん中に青いクエスチョン マークが表示されます。

キープアライブが原因になる可能性はありますか? もしそうなら、私はそれを制御できますか?

4

1 に答える 1

5

これは、ソースが変更されても WebKit が画像リソースの読み込みを停止しないことが原因です。これは通常、画像には問題を引き起こしませんが、終わりのないストリーミング画像では、ページがリロードされるまで画像が解放されません。

この問題を指摘する Chromium に対して提出されたバグがあります。 https://code.google.com/p/chromium/issues/detail?id=73395

window.stop()コメント スレッドからの回避策は、画像を変更する前に呼び出すことです。これは、ブラウザーで停止をクリックするのと同じであり、ロード中のすべてのリソースが中止されます。うまくいけば、これがページのリロードを引き起こさないという事実が、ホワイト フラッシュを回避するでしょう。

私は次のことを試してみます:

<img id='iImage' src='about:blank'>
<script type='text/javascript'>
function show(url)
{
    window.stop();
    iImage.src = url;
}
</script>
于 2012-05-13T23:49:39.893 に答える