Flutter 웹/모바일에서 LiveKit 화상통화 구현 시 마이크/카메라 권한 및 메모리 누수 해결

1. 문제

통화가 끝난 후에도 마이크나 카메라가 계속 켜져 있거나, 앱이 무거워지면서 버벅거리는 현상이 발생합니다.
제대로 권한을 회수하지 않으면 유저들은 누군가 자신을 엿듣고 있다고 의심하게 되며, 이는 서비스 삭제 1순위 사유가 됩니다.

2. 왜 필요한가

사용자의 민감한 사생활(마이크/카메라)을 확실하게 보호하고, 기기의 배터리 소모를 최소화해야 합니다.
프라이버시 이슈는 단 한 건만 터져도 서비스에 치명상을 입힙니다. 통화 밖에서는 미디어 장치가 절대 작동하지 않는다는 확신을 주어야 합니다.

3. 기대효과

카메라 권한 관련 불필요한 오해나 CS 문의를 원천 차단하고, 구형 스마트폰에서도 쾌적한 통화 환경을 제공합니다.
앱을 하루 종일 켜두어도 발열이 없어져 유저들의 앱 체류 시간이 비약적으로 상승합니다.

4. 구현 방향

통화 종료 버튼을 누르거나 화면을 벗어나는 즉시 시스템에 할당된 미디어 장치 권한을 강제로 회수합니다.
화면 뒤편에 쌓여있는 메모리 쓰레기를 즉각 청소하는 꼼꼼한 메모리 관리 로직을 도입했습니다.


void disposeMediaTracks() async {
  // 통화 종료 시 강제로 마이크/카메라 하드웨어 권한 해제
  for (var track in room.localParticipant?.audioTracks ?? []) {
    await track.track?.stop();
  }
  for (var track in room.localParticipant?.videoTracks ?? []) {
    await track.track?.stop();
  }
  await room.disconnect();
}

5. 비즈니스 가치

사생활 보호를 최우선으로 하는 깨끗한 서비스 이미지를 구축하여 고객들의 막연한 불안감을 해소하고 신뢰를 얻습니다.
신뢰를 기반으로 유저들은 지인들에게 안심하고 서비스를 추천하게 됩니다.

댓글 남기기