RSS듀오랩스
모바일 앱

WebRTC 기반 AI 상담원: 딥페이크 영상 응답을 앱에서 재생한 방법

작성자
듀오랩스 대표·5분 읽기

AI 상담원에서 딥페이크 영상과 합성 음성은 생성만큼 전달 방식이 중요합니다. 사용자가 발화를 마친 뒤 화면이 오래 비거나, 음성과 입 모양이 어긋나면 응답 품질이 급격히 떨어집니다.

WebRTC는 생성된 얼굴이나 목소리를 만드는 기술이 아닙니다. 서버가 만든 응답 미디어를 앱까지 전달하고, 사용자가 대화처럼 느낄 수 있도록 재생하는 구간을 맡습니다.

WebRTC는 생성 기술이 아니라 전송 계층입니다

AI 영상 응답의 흐름은 다음처럼 나눌 수 있습니다.

사용자 발화
  -> 앱에서 음성 수집
  -> 서버에서 질문 처리와 답변 생성
  -> 딥페이크 영상과 합성 음성 생성
  -> WebRTC로 응답 미디어 전달
  -> 앱 화면에서 재생

서버가 화면 속 상담원의 얼굴과 목소리를 만들었다면, WebRTC는 그 결과가 앱에 도착하는 길을 담당합니다. W3C의 WebRTC 명세도 WebRTC를 실시간 프로토콜을 통해 미디어와 데이터를 주고받기 위한 API로 정의합니다.

생성 계층과 전송 계층을 분리하면 장애 지점도 명확해집니다. 서버에 영상 결과가 있는데 화면에 나오지 않는다면 생성 모델보다 연결 상태, 첫 패킷 수신, 디코딩과 렌더링 순서를 먼저 확인할 수 있습니다.

대화에서는 첫 프레임이 중요합니다

일반 동영상은 어느 정도 내려받은 뒤 재생해도 큰 문제가 없습니다. AI 상담은 다릅니다. 사용자가 말을 마친 뒤 빈 화면이 오래 이어지면, 질문을 듣지 못했는지 답을 만드는 중인지 알기 어렵습니다.

사용자가 느끼는 대기 시간은 여러 구간의 합입니다.

구간 기다리는 일
음성 입력 마이크 버퍼가 채워지고 인코딩됩니다
음성 전송 압축된 음성이 서버까지 이동합니다
서버 처리 질문을 인식하고 답변 미디어를 만듭니다
미디어 연결 응답 스트림을 받을 연결이 준비됩니다
첫 화면 패킷을 받고 디코딩한 첫 프레임을 그립니다

전체 응답 시간만 재면 어느 구간이 느린지 알 수 없습니다. 발화 종료, 응답 생성 완료, 첫 미디어 패킷 수신, 첫 프레임 렌더링 시점을 같은 요청 ID로 기록해야 지연 원인을 나눠 볼 수 있습니다.

WKWebView 안에서는 재생 정책도 설계해야 합니다

네이티브 앱과 웹 화면을 함께 사용하는 구조라면 영상이 도착하는 것만으로 끝나지 않습니다. WKWebView 안에서 상담 화면의 일부로 재생되도록 미디어 정책을 맞춰야 합니다.

주요 WKWebViewConfiguration 항목은 다음과 같습니다.

  • allowsInlineMediaPlayback
  • mediaTypesRequiringUserActionForPlayback
  • allowsAirPlayForMediaPlayback
  • allowsPictureInPictureMediaPlayback

인라인 재생은 특히 중요합니다. 영상이 iPhone의 기본 전체 화면 플레이어로 넘어가면 입력 화면과 상담 상태가 가려지고 대화 흐름이 끊깁니다. Apple 문서에 따르면 allowsInlineMediaPlayback을 활성화하는 것과 함께 HTML 비디오의 playsinline 속성도 맞춰야 합니다.

자동 재생 정책도 함께 확인해야 합니다. 사용자 동작 없이 미디어를 시작하려면 앱 설정과 웹 콘텐츠의 재생 조건이 서로 맞아야 합니다. 한쪽만 바꾸면 스트림은 도착했는데 화면에서는 재생되지 않는 상태가 생길 수 있습니다.

연결 상태는 화면 상태로 번역해야 합니다

WebRTC에는 연결 중, 연결됨, 일시 단절, 실패처럼 서로 다른 상태가 있습니다. 개발자에게는 네트워크 상태지만 사용자에게는 화면이 멈춘 이유입니다.

실시간 미디어 화면에서는 다음 동작을 먼저 정하는 편이 좋습니다.

  • 연결을 준비하는 동안 무엇을 보여줄 것인가
  • 첫 영상 프레임이 오기 전까지 입력을 허용할 것인가
  • 일시 단절과 완전한 실패를 어떻게 구분할 것인가
  • 이전 응답이 늦게 도착하면 재생할 것인가 버릴 것인가
  • 재연결에 실패했을 때 사용자가 다시 시작할 방법은 무엇인가

응답이 아직 생성되지 않은 상태와 생성됐지만 재생 연결이 끊긴 상태를 같은 로딩 화면으로 처리하면 사용자는 기다려야 하는지 다시 질문해야 하는지 판단할 수 없습니다. 네트워크 상태를 그대로 노출하기보다 사용자가 취할 수 있는 다음 행동으로 바꿔 보여줘야 합니다.

영상과 합성 음성은 같은 시간축에서 재생해야 합니다

딥페이크 응답은 얼굴만 움직이는 영상이 아닙니다. 합성 음성이 입 모양과 맞아야 하나의 응답으로 느껴집니다. 영상이 먼저 움직이고 음성이 늦게 나오거나, 음성이 시작됐는데 첫 영상 프레임이 준비되지 않으면 작은 어긋남도 눈에 띕니다.

응답을 WebRTC 미디어로 받으면 오디오와 비디오의 시간 정보를 같은 재생 파이프라인에서 다룰 수 있습니다. 앱이 별도의 음성 파일과 영상 파일을 각각 내려받아 시작 시점을 맞추는 것보다 실시간 응답에 알맞습니다.

서버의 생성 완료 이벤트만으로 응답이 끝났다고 판단해서는 안 됩니다. 앱이 스트림을 받고 첫 프레임을 그렸는지, 음성과 영상 재생이 정상적으로 종료됐는지까지 확인해야 사용자에게 전달된 응답이 됩니다.

이 게시글 공유하기

마지막 수정:

공유하실 때는 출처(Duolabs)와 원문 주소를 표시해 주세요.