AI 화상 통화 & 응급 영상

WebRTC · 시니어 안전망의 핵심

14
9:16📶 🔋
🤖
실벗 AI
화상으로 함께 있어요
"어르신, 얼굴 보여주셔서 감사해요!
오늘 컨디션은 어떠세요?"
👵
실벗: "오늘 컨디션 어떠세요?"

3가지 화상 모드

모드설명
🤖 AI 화상실벗 AI 아바타와 영상 대화 — 표정 분석으로 컨디션 체크
👨‍👩‍👧 가족 화상1:1 가족, 다자간 가족 (최대 5명) 그룹 통화
🆘 응급 화상SOS 발동 시 자동 연결 — 가족·119·관제센터 동시

시니어 친화 기능

  • 큰 자동 자막 — 청력 저하 시니어 배려
  • 표정 인식 — AI가 "표정이 안 좋아 보여요"
  • 밝기 자동 조절 — 어두운 방 자동 밝게
  • 배경 흐림 — 사생활 보호
  • 원터치 가족 통화 — 즐겨찾기 5명 큰 사진 버튼
  • 녹화 기능 — 응급 시 자동 녹화 (보호자 공유)

기술 스택

  • WebRTC — P2P 영상 통신 (P2P 안되면 TURN 서버 경유)
  • Signaling: WebSocket (Node.js or PHP Ratchet)
  • TURN/STUN: coturn 자체 호스팅 또는 Twilio
  • AI 아바타: 정적 이미지 + 립싱크 (D-ID 연동 옵션)
  • 자막: Web Speech API STT → 화면 오버레이

WebRTC 핵심 코드 (실사용)

// js/video-call.js — 가족 화상통화
async function startCall(targetUserId){
  const stream = await navigator.mediaDevices.getUserMedia({video:true, audio:true});
  localVideo.srcObject = stream;

  const pc = new RTCPeerConnection({
    iceServers: [{urls:'stun:stun.l.google.com:19302'}]
  });
  stream.getTracks().forEach(t => pc.addTrack(t, stream));

  pc.ontrack = e => remoteVideo.srcObject = e.streams[0];
  pc.onicecandidate = e => e.candidate && ws.send(JSON.stringify({type:'ice', candidate:e.candidate, to:targetUserId}));

  const offer = await pc.createOffer();
  await pc.setLocalDescription(offer);
  ws.send(JSON.stringify({type:'offer', sdp:offer, to:targetUserId}));
}

// 자동 자막
const rec = new webkitSpeechRecognition();
rec.continuous = true; rec.interimResults = true; rec.lang = 'ko-KR';
rec.onresult = e => subtitle.textContent = e.results[e.results.length-1][0].transcript;
rec.start();
⚠ 시니어 화상 UX 5계명
① 받기 버튼은 화면의 50% 이상 ② 통화 종료는 빨강 큰 버튼 ③ 자막 기본 ON ④ 시작 시 음성 안내 "딸 영상통화가 왔어요" ⑤ 자동 응답 옵션 (10초 후)