2012-05-06 20 views
10

Tôi đang thiết lập một UIWebView để hiển thị nội dung của máy ảnh web thông qua URL truy xuất luồng MPJEG.UIWebView và tiếp tục hoạt động?

Tôi phát hiện ra rằng nếu tôi muốn chuyển sang một máy ảnh khác, có vẻ mượt mà hơn nếu tôi không đặt lại toàn bộ nội dung của UIWebView, mà thay vào đó hãy thiết lập chức năng javascript trong trang tôi đã nạp vào các nội dung của hình ảnh, như thế này:

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

Nếu tôi không làm được điều này, mỗi khi tôi chuyển sang url mới, UIWebView đi trắng cho một hoặc hai giây cho đến khi nội dung mới đã sẵn sàng để được hiển thị , với đoạn mã trên, nó chỉ thay thế trực tiếp nội dung, không bị mất trắng.

Tuy nhiên, nếu tôi chuyển đổi qua lại giữa hai luồng video, tại một thời điểm nào đó, tôi gặp lỗi trong số UIWebView và bằng thử nghiệm và lỗi tôi đã phát hiện ra điều này xảy ra lần thứ tư tôi hiển thị cùng một video trong lượt xem. Nếu tôi cố gắng mở 4 video trong tab trình duyệt, thứ 4 bị kẹt trong chu kỳ tải, cho đến khi tôi đóng một trong ba video trước đó.

Điều này dẫn tôi để tin rằng:

  1. Chiếc máy ảnh trong câu hỏi chỉ có thể phục vụ 3 con suối cùng lúc
  2. Thay đổi thuộc tính src trên thẻ <img...> không đóng dòng trước

Điều này có thể được liên kết để giữ gìn không? Hệ thống trình duyệt webkit có thể giữ cho các luồng trước tồn tại, mặc dù tôi đã ngừng hiển thị chúng trong thẻ <img...> không?

Về cơ bản, để tạo lại tôi có thể làm điều này:

  1. Thiết lập các nội dung nêu trên trong một UIWebView
  2. Gọi này 4 lần: wv.EvaluateJavascript("show(url)")

Trên cuộc gọi thứ 4, tôi nhận được một dấu hỏi màu xanh ở giữa.

Có thể tiếp tục là thủ phạm không? Và nếu có, tôi có thể kiểm soát nó không?

+0

Keep-alive là nghĩa vụ phải cho phép trình duyệt để tái sử dụng một kết nối để có được nội dung bổ sung.Vì vậy, bạn thay đổi URL (tôi giả định cho cùng một tên miền nhưng đường dẫn khác nhau), kết nối trước đó nên được tái sử dụng. Vấn đề của bạn giống như các ổ cắm mới được mở cho mỗi url hình ảnh. Có thể là do lỗi WebKit với MJPEG. Thử thay thế toàn bộ phần tử HTML của hình ảnh và xem điều đó có hữu ích không. –

+0

Vâng, điều đó có hiệu quả, nhưng đó rõ ràng là điều tôi muốn tránh làm. –

+0

Tại sao lại như vậy? Thay đổi yếu tố hình ảnh không nên giới thiệu sự cố bạn đã thay thế tất cả nội dung của chế độ xem web. –

Trả lời

5

Điều này là do WebKit không dừng tải tài nguyên hình ảnh ngay cả khi nguồn được thay đổi. Điều này thường không gây ra vấn đề cho hình ảnh nhưng hình ảnh phát trực tuyến không bao giờ sẽ khiến nó không bao giờ buông bỏ cho đến khi trang được tải lại.

Có lỗi được gửi tới Chromium chỉ ra vấn đề này. https://code.google.com/p/chromium/issues/detail?id=73395

Từ chuỗi nhận xét, cách giải quyết là gọi window.stop() trước khi thay đổi hình ảnh. Điều này giống như việc nhấp vào dừng trong trình duyệt và khiến tất cả tài nguyên tải bị hủy. Hy vọng rằng, thực tế là điều này không làm cho trang tải lại sẽ tránh flash trắng của bạn.

tôi muốn cung cấp cho các sau một thử:

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