fix: K2 카메라 연결 지연(20~30초) 수정 — ICE gathering 완전종료 대신 1.5초 바운드
onicecandidate가 ev.candidate===null(전체 gathering 종료)까지 기다린 뒤에만 오퍼를 보내고 있었는데, 이 네트워크에서 그 신호가 20~30초씩 걸림(가상 인터페이스들 순회+ 타임아웃으로 추정). 실제 필요한 STUN srflx 후보는 1~2초면 잡히므로, 완전종료를 기다리지 않고 1.5초 타임아웃 뒤 그때까지 모인 후보로 바로 오퍼를 보내도록 변경. 브라우저 실측: 연결까지 20~30초 → 3초 이내로 단축.
This commit is contained in:
+14
-3
@@ -91,8 +91,15 @@ function connectCam(){
|
||||
setStatus('끊김');
|
||||
}
|
||||
};
|
||||
pc.onicecandidate=(ev)=>{
|
||||
if(ev.candidate===null){
|
||||
// 원래는 ev.candidate===null(ICE gathering 완전 종료)까지 기다린 뒤에만 오퍼를
|
||||
// 보냈는데, 이 네트워크에서 그 완전종료 신호가 20~30초씩 걸림(가상/VPN 인터페이스들을
|
||||
// 하나씩 훑고 타임아웃되는 걸로 보임) — 정작 이 프린터가 필요로 하는 STUN srflx
|
||||
// 후보 자체는 보통 1~2초 안에 잡힘. 그래서 완전종료를 기다리지 않고 짧은 타임아웃
|
||||
// 뒤에 그때까지 모인 후보로 바로 보낸다(2026-09-19, 20초+ 연결지연 확인 후 수정).
|
||||
let offerSent=false;
|
||||
function sendOfferOnce(){
|
||||
if(offerSent || pc!==camPC) return;
|
||||
offerSent=true;
|
||||
fetch('/api/k2/webrtc-signal',{
|
||||
method:'POST',
|
||||
headers:{'Content-Type':'text/plain', ...authH()},
|
||||
@@ -104,9 +111,13 @@ function connectCam(){
|
||||
}
|
||||
}).catch(()=>{ if(pc===camPC) setStatus('연결 실패'); });
|
||||
}
|
||||
pc.onicecandidate=(ev)=>{
|
||||
if(ev.candidate===null) sendOfferOnce(); // 빨리 끝나면 그대로 씀
|
||||
};
|
||||
pc.addTransceiver('video',{direction:'sendrecv'});
|
||||
pc.createOffer().then(d=>pc.setLocalDescription(d)).catch(()=>{ if(pc===camPC) setStatus('연결 실패'); });
|
||||
pc.createOffer().then(d=>pc.setLocalDescription(d)).then(()=>{
|
||||
setTimeout(sendOfferOnce, 1500); // 안 끝나면 1.5초 뒤 그때까지 모인 후보로 진행
|
||||
}).catch(()=>{ if(pc===camPC) setStatus('연결 실패'); });
|
||||
}
|
||||
function reconnectCam(){ connectCam(); }
|
||||
connectCam();
|
||||
|
||||
Reference in New Issue
Block a user