Skip to content

Latest commit

 

History

History
110 lines (94 loc) · 5.47 KB

README.md

File metadata and controls

110 lines (94 loc) · 5.47 KB

1:1 영상 통화 앱 구현 video_call

개발 툴 : Flutter
개발 언어 : Dart
개발 일시 : 2023-02-14 ~
개발자 : Won Chi Hyeon

앱 개요

기능 : 실제 핸드폰을 사용해서 1:1 화상 통화 기능
       화상 통화를 종료할 수 있는 기능
       
사용한 플러그인 : agora_rtc_engine, permission_handler

아고라에서 필요한 상수값 가져오기

아고라 홈페이지

아고라 홈페이지에서 회원가입을 진행하고 새로운 프로젝트를 생성합니다.
이 때 Secured mode: APP ID + Token (Recommanded)
프로젝트 config 설정페이지에서 Generate temp RTC Token을 눌러서
토큰을 발급받습니다. 토큰의 유효기간은 24시간만 유효합니다.
Channel Name은 핸드폰끼리 통신할 때 사용할 채널의 이름으로 원하는 대로 짓습니다.

프로젝트에 필요한 App ID, Channel Name, Temp Token을 안전한 곳에 복사해둡니다.

[필요한 아고라 상수값들 APP ID, Channel Name, Temp Token]

image

아고라에서 얻은 상수값들을 프로젝트에 파일로 저장

아고라에서 얻은 필요한 상수값들(App ID, Channel Name, Temp Token) 이 세 개를
lib/const 폴더를 생성해서 그 안에 넣어줍니다.
Temp Token은 24시간만 유효하기에 24시간이 지나면 새로 발급받은 토큰값을 넣어줍니다.

image

이미지와 추가하기

이미지 사이트

asset/img 파일에 logo, home_img를 프로젝트의 asset/img 파일에 추가합니다.
pubspec.yaml 파일을 다음과 같이 수정합니다.

image
image

프로젝트에 필요한 라이브러리 설치

flutter pub add agora_rtc_engine와 flutter pub add permission_handler로 프로젝트에 필요한
라이브러리를 설치하고 pub get을 실행해서 변경 사항을 저장합니다.

image

네이티브 설정하기

안드로이드에서 추가할 네이티브 권한들을 설정해줍니다.
네트워크 상태를 읽는 READ_PHONE_STATE, ACCESS_NETWORK_STATE
인터넷을 이용해서 영상을 스트리밍해야하기에 INTERNET
녹음과 녹화 기능과 관련된 RECORD_AUDIO, MODIFY_AUDIO_SETTING, CAMERA
블루투스를 이용한 녹음과 녹화 기능 BLUETOOTH_CONNECT

모듈의 build.gradle 파일의 compileSdkVersion을 33으로 변경합니다.

image
image

로고 UI 작성

Scaffold의 배경색으로 blue[100]!을 적용하였습니다.
그림자가 있는 로고는 안에 아이콘과 글자가 Container안에 위치한 형태입니다.

image

이미지 UI 작성

가운데에 asset/img/ 폴더에 추가한 home_img.png 이미지를 넣어주었습니다.

image

화상 통화 시작 버튼 UI 작성

앱의 맨 밑에 화상 통화 시작 버튼을 생성하였습니다.
MainAxisAlignment.end으로 맨 밑에 배치하고 CrossAxisAlignment.stretch로 가로방향을 꽉 채우도록 하였습니다.

image

화상 통화 시작 버튼에 화면 이동 기능 구현

버튼에 Navigator를 사용해서 캠 스크린으로 화면 전환하는 기능을 추가하였습니다.

[버튼을 누르면 캠 스크린으로 화면 전환]

image

화상 통화에 필요한 권한을 요청하고 응답받기

캠 스크린 cam_screen.dart 페이지에서 화상통화에 필요한 권한들(카메라, 마이크) 요청하고 응답을 받아야 합니다.
권한 관리 라이브러리인 permission_handler 라이브러리를 import하고 카메라와 마이크에 대한 요청과 요청에 대한 응답을
받습니다. 요청이 허가된(granted) 상태라면 true값을 아니라면 '카메라 또는 마이크 권한이 없습니다.'라는 문구가 출력되도록
하였습니다.

image

Future로 위젯 렌더링하기

권한을 요청하고 응답받는 Future형 함수 init()의 상태값에 따라 위젯을 다르게 렌더링하기 위해서
FutureBuilder를 사용하여 에러 유무, 데이터 유무 상태에 따라 위젯을 다르게 렌더링하였습니다.

image