2016-11-01 17 views
21

Tôi đang tạo một ứng dụng web sử dụng WebRTC. Nó hoạt động tốt trên các trình duyệt máy tính để bàn. Tuy nhiên trên trình duyệt web trên điện thoại thông minh nhỏ, có các sự kiện không mong muốn:Làm thế nào để giữ dữ liệu WebRTCChannel mở trong tab không hoạt động của trình duyệt trên điện thoại?

Khi chuyển tab trên trình duyệt web di động chrome cho android và firefox cho android, kênh dữ liệu webrtc mở được tạo với .createDataChannel đóng. Trình xử lý sự kiện dataChannel.onclose được kích hoạt. Làm cách nào để ngăn kênh dữ liệu đóng? Nếu điều đó là không thể, có thể mở lại kênh dữ liệu mà không cần khởi động lại toàn bộ pha tín hiệu không?

này cũng xảy ra khi duyệt cho một tập tin với <input type="file">

tôi duyệt stackoverflow một chút và nhận thấy có những thứ khác đang cắt giảm/chậm lại trong các tab không hoạt động như requestTimeOutsetInterval.

Có bất kỳ yêu cầu xác thực nào để buộc nó luôn mở ở chế độ nền hay không.

+2

Chỉ cần chụp trong bóng tối: thử lưu các ứng dụng SDP và ICE và thực hiện lại pha tín hiệu, nhưng với dữ liệu đã lưu thay vì báo hiệu thực tế. – Kevin

+0

xin vui lòng xem tại đây: https://www.webrtc-experiment.com/ –

+0

bạn có thể gửi mã xin vui lòng –

Trả lời

0

không có sự kiện nào trong safari cho phép bạn phát hiện xem tab có bị tạm dừng hay không, tuy nhiên bạn có thể phát hiện xem tab có được mở lại sau một thời gian hay không bằng cách đặt chức năng lặp lại thường xuyên. -

 var beforeTime = new Date.getTime(); 
     var getTime = function() { 
     var timeNow = new Date.getTime       
     if (timeNow - beforeTime > 1000) { 
      console.log("Woken Up)"; 
    } 
     beforeTime = nowTime; 
     setTimeout(getTime, 500); 
} 

bạn có thể sử dụng window.onunload để lưu dữ liệu của datachannel cho một cookie và nếu nó mở lại sau thời gian quy định trong chức năng này (10 giây), sau đó bạn có thể tải lại dữ liệu từ các tập tin cookie

hy vọng nó đã giúp, mukund2003

+2

Bạn đã trả lời nội dung khác. –

1

Một cách để buộc trình duyệt giữ một tab hoạt động đầy đủ ngay cả trên nền là sử dụng API âm thanh trên web. Thật vậy, bất kỳ ứng dụng nào (ví dụ: trình phát nhạc) phát âm thanh cần được giữ sống, điều này có ý nghĩa. Nhưng, đây là một hack không chuẩn và do đó không phải là bằng chứng trong tương lai. Chia sẻ kiến ​​thức của bạn nếu bạn tình cờ tìm ra các cách khác.

2

Theo tài liệu mozilla của WebRTC của ..

Xử lý tình trạng kênh thay đổi

Cả hai đồng nghiệp địa phương và từ xa của chúng tôi sử dụng một phương pháp duy nhất để xử lý sự kiện cho thấy một sự thay đổi trong trạng thái kết nối của kênh.

Khi ngang hàng địa phương trải qua một sự kiện mở hoặc đóng, phương pháp handleSendChannelStatusChange() được gọi:

function handleSendChannelStatusChange(event) { 
if (sendChannel) { 
    var state = sendChannel.readyState; 

    if (state === "open") { 
    messageInputBox.disabled = false; 
    messageInputBox.focus(); 
    sendButton.disabled = false; 
    disconnectButton.disabled = false; 
    connectButton.disabled = true; 
    } else { 
    messageInputBox.disabled = true; 
    sendButton.disabled = true; 
    connectButton.disabled = false; 
    disconnectButton.disabled = true; 
    } 
} 

}

Nếu trạng thái của kênh đã thay đổi để "mở", chỉ ra rằng chúng ta đã hoàn thành việc thiết lập mối liên hệ giữa hai đồng nghiệp. Giao diện người dùng được cập nhật tương ứng bằng cách bật hộp nhập văn bản cho thư gửi, tập trung hộp nhập để người dùng có thể bắt đầu nhập ngay lập tức, bật nút "Gửi" và "Ngắt kết nối", giờ đây chúng có thể sử dụng được, và vô hiệu hóa nút "Kết nối", vì nó không cần thiết khi conneciton mở.

Nếu trạng thái đã thay đổi thành "đóng", bộ hành động ngược lại xảy ra: hộp nhập và nút "Gửi" bị tắt, nút "Kết nối" được bật để người dùng có thể mở kết nối mới nếu họ muốn làm như vậy và nút "Ngắt kết nối" bị vô hiệu hóa vì nó không hữu ích khi không có kết nối.

vì vậy hãy thử để chơi với handleReceiveChannelStatusChange
dụ ngang hàng từ xa này, mặt khác, bỏ qua các sự kiện thay đổi trạng thái, ngoại trừ để đăng nhập sự kiện ra cửa sổ Console:

function handleReceiveChannelStatusChange(event) { 
     if (receiveChannel) { 
       console.log("Receive channel's status has changed to " + 
       receiveChannel.readyState); 
    } 
} 

Các handleReceiveChannelStatusChange () phương thức nhận được dưới dạng tham số đầu vào sự kiện xảy ra; đây sẽ là một RTCDataChannelEvent.

+0

Tôi đã biết điều đó. Trong câu hỏi của tôi, tôi đã nói rằng trình xử lý sự kiện dataChannel.onclose được kích hoạt có nghĩa là tôi đã có một handleReceiveChannelStatusChange thực hiện điều đúng. Làm thế nào để ngăn chặn sự kiện onclose xảy ra? –

+0

mà sao chép dán mặc dù :), tôi đoán 500 là quá nhiều –

+0

Không quan trọng 500 :)) Tôi hy vọng bạn giải quyết! – CristiC777

Các vấn đề liên quan