UIWebView и поддерживать жизнь?
Я настраиваю UIWebView
, чтобы показать содержимое веб-камеры через URL-адрес, который извлекает поток MPJEG.
Я узнал, что если бы я захотел переключиться на другую камеру, она выглядела бы гладко, если бы я не reset все содержимое UIWebView
, а вместо этого настроил javascript-функцию на странице, загруженной в нее, чтобы заменить содержимое изображения, например:
<img id='iImage' src='about:blank'>
<script type='text/javascript'>
function show(url)
{
iImage.src = url;
}
</script>
Если бы я этого не делал, каждый раз, когда я переключался на новый URL-адрес, UIWebView
белел на секунду или два, пока новый контент не был готов к отображению, причем приведенный выше код просто заменяет содержимое напрямую, нет выделения.
Однако, если я переключаюсь между двумя видеопотоками, в какой-то момент я получаю сообщение об ошибке в UIWebView
, а в результате проб и ошибок я обнаружил, что это происходит в 4-й раз, когда я показываю один и тот же видеопоток в вид. Если я попытаюсь открыть 4 видеопотока в браузере-вкладках, четвертый застрял в цикле загрузки, пока я не закрою один из предыдущих трех.
Это заставляет меня думать, что:
- Камера, о которой идет речь, может одновременно обслуживать только три потока
- Изменение атрибута
src
в теге <img...>
не закрывает предыдущий поток
Можно ли связать это с keepalive? Могла ли система веб-браузера сохранить предыдущие потоки, даже если я прекратил показывать их в теге <img...>
?
В принципе, для воспроизведения я могу это сделать:
- Настройте содержимое выше в
UIWebView
- Назовите это 4 раза:
wv.EvaluateJavascript("show(url)")
На четвертом вызове я получаю синий знак вопроса посередине.
Может ли быть живым виновником? И если да, могу ли я его контролировать?
Ответы
Ответ 1
Это вызвано тем, что 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>