2012-05-06 6 views
10

Я настраиваю UIWebView, чтобы показать содержимое веб-камеры через URL-адрес, который извлекает поток MPJEG.UIWebView и поддерживать жизнь?

Я узнал, что если бы я захотел переключиться на другую камеру, это выглядело бы более плавным, если бы я не сбросил все содержимое UIWebView, а вместо этого настроил функцию javascript на странице, которую я загрузил в нее, чтобы заменить содержимое изображения, как это:

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

Если бы я не сделал этого, каждый раз, когда я перешел на новый адрес, то UIWebView пошел белый для второго или два, пока новый контент был готов для отображения , с приведенным выше кодом он просто заменяет содержимое напрямую, без вычеркивания.

Однако, если я переключаюсь между двумя видеопотоками, в какой-то момент я получаю сообщение об ошибке в UIWebView, а по проб и ошибок я обнаружил, что это происходит в 4-й раз, когда я показываю один и тот же видеопоток в Посмотреть. Если я попытаюсь открыть 4 видеопотока в браузере-вкладках, четвертый застрянет в цикле загрузки, пока я не закрою один из предыдущих трех.

Это приводит меня к мысли, что:

  1. Камера в вопросе может служить только 3 потоков одновременно
  2. Изменение атрибута src на <img...> тег не закрывается предыдущей класс, сформированный с учетом способностей учащихся

Можно ли связать это с keepalive? Могла ли система webkit-браузера сохранить предыдущие потоки, даже если я прекратил показывать их в теге <img...>?

В основном, для воспроизведения я могу это сделать:

  1. Настройка выше содержание в UIWebView
  2. Зов это в 4 раза: wv.EvaluateJavascript("show(url)")

На 4-й вызов, я получаю синий знак вопроса посередине.

Может ли быть живым виновником? И если да, могу ли я это контролировать?

+0

Keep-жив должен позволить браузер повторно использовать соединение, чтобы получить дополнительный контент.Таким образом, вы меняете URL-адрес (я предполагаю, что тот же домен, но другой путь), предыдущее соединение должно быть повторно использовано. Ваша проблема звучит так, как новые сокеты открываются для каждого URL-адреса изображения. Возможно, это связано с ошибкой WebKit с MJPEG. Попробуйте заменить весь HTML-элемент изображения и посмотреть, поможет ли это. –

+0

Да, это работает, но это явно то, чего я хочу избежать. –

+0

Почему? Изменение элемента изображения не должно приводить к проблеме, которую вы заменили всем содержимым веб-представления. –

ответ

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> 
Смежные вопросы