2014-12-01 19 views
10

Tôi có ứng dụng webrtc, nó hoạt động tốt, nhưng với mục đích thử nghiệm, tôi cần kiểm tra xem máy chủ TURN của tôi có hoạt động hay không, nhưng vì cả hai thiết bị thử nghiệm đều nằm trong cùng một mạng, tôi không thể kiểm tra, nghĩ mã dưới đây sẽ hạn chế các ứng cử viên để chỉ những người sử dụng máy chủ lần lượt,WebRTC: buộc các đồng nghiệp sử dụng máy chủ TURN

function onIceCandidate(event, targetSessionID, targetUserName) { 
    if (event.candidate) { 
    var candidate = event.candidate.candidate; 
    if(candidate.indexOf("relay")<0){ // if no relay address is found, assuming it means no TURN server 
     return; 
    } 
    sendMessage(candidate); // using socket.io to send to the otherside 
... 

nhưng tôi nhận thấy rằng (với nhiều thất vọng), điều này không làm việc, bởi vì khi ngang hàng đang tạo ra mô tả câu trả lời,

.... 
a=candidate:0 1 UDP 2128609535 13.198.98.221 58779 typ host 
a=candidate:0 2 UDP 2128609534 13.198.98.221 58780 typ host 
.... 

điều này có nghĩa là thông báo là trực tiếp và không thông qua TUR N máy chủ, tôi có chính xác trong giả định này? Bây giờ, làm cách nào để buộc webrtc sử dụng máy chủ TURN?

+0

Có, các ứng viên sẽ hiển thị trong cuộc gọi lại đó, nhưng sau đó chúng cũng được thêm vào bất kỳ SDP nào được tạo sau đó. Bạn cũng sẽ phải xóa các ứng viên không mong muốn khỏi các SDP. –

+0

@BenjaminTrent Tôi nhìn vào SDP trong khi cung cấp và trả lời, vì vậy cách duy nhất tôi có thể ngăn chặn một kết nối p2p trực tiếp là thao tác thủ công chuỗi cung cấp và trả lời (nhận từ '' 'createOffer''' và' '' createAnswer'' ')? – mido

+1

Tôi tin như vậy, nếu bạn loại bỏ các ứng cử viên băng không mong muốn trước khi thiết lập chúng tại địa phương và gửi chúng ra cho các peer, mà NÊN làm việc. –

Trả lời

6

chỉ thêm này để đóng câu hỏi,

function onIceCandidate(event, targetSessionID, targetUserName) { 
    if (event.candidate) { 
    var candidate = event.candidate.candidate; 
    if(candidate.indexOf("relay")<0){ // if no relay address is found, assuming it means no TURN server 
     return; 
    }... 

Đoạn mã trên hoạt động, kiểm tra để wireshark,

sau khi thêm điều kiện if(candidate.indexOf("relay")<0), giao tiếp diễn ra chỉ thông qua máy chủ LƯỢT , nếu máy chủ không có chi tiết/chi tiết không chính xác, trạng thái kết nối được nhận tại số new

Chỉnh sửa: như Cullen đã nói trong câu trả lời của mình, theo w3 webrtc, đi qua relay như iceTransportPolicy nên làm việc, nhưng tôi đã không kiểm tra nếu nó được thực hiện trong Firefox và Chrome chưa ...

+0

Nó được thực hiện ngay bây giờ, fwiw. – RandallB

+0

Không có trong Chromium 50 AFAICT –

+0

Ahh ... chỉ với adapter.js. – RandallB

3

Tôi không biết khi nào hoặc khi nào trình duyệt sẽ hỗ trợ điều này nhưng hãy xem "Chính sách ứng cử viên ICE" trong phần 4.1.1 của dự thảo-ietf-rtcweb-jsep-08, bạn có thể xem cách đặt chính sách để "chuyển tiếp" sẽ làm những gì bạn muốn. Trong bản dự thảo API W3C hiện tại, giá trị này được đặt bằng giá trị RTCIceTransports của "relay" cho trường iceTranports trong cấu hình. Tìm kiếm RTCIceTransports trong https://w3c.github.io/webrtc-pc/

0

Đối với mục đích thử nghiệm trên firefox bạn có thể buộc TURN relay.

Kiểm tra câu trả lời của tôi here!

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