단순 통화 앱 만들기(Android) (초안)

레이아웃 작업

방송과 통화 모두 음성전용이 아니라면 화면에 카메라 화면이나 상대편의 화면을 표시해야 합니다. Remon SDK에서는 이러한 화면을 담당하는 View가 별도로 있습니다. SurfaceViewRenderer 입니다. SurfaceViewRenderer를 layout.xml에 등록하고 해당 view를 Remon SDK에 지정해줘야 합니다.

즉, 다음과 같이 layout.xml에 Remon의 SurfaceViewRenderer를 등록합니다.

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:layout_alignParentBottom="false"
android:layout_weight="2">
<org.webrtc.SurfaceViewRenderer
android:id="@+id/remote_video_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<org.webrtc.SurfaceViewRenderer
android:id="@+id/local_video_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>

위 예에서는 local 즉 자기 자신의 카메라영상을 출력하는 view와 remote 즉 상대방의 영상을 출력하는 view를 각각 등록하였습니다. 이제 필요한 작업이 모두 완료되었습니다. 위의 layout에 방송을 송출하거나 시청 혹은 통화를 시도하기 위한 버튼을 추가하면 기본적인 Remon SDK를 구동시켜볼 준비가 완료되었습니다.

통화

RemonCall로 통화 기능을 쉽고 빠르게 만들 수 있습니다.

remonCall = RemonCall.builder()
.context(CallActivity.this)
.localView(surfRendererLocal) //나의 Video Renderer
.remoteView(surfRendererRemote) //상대방 video Renderer
.serviceId("SERVICEID1") // RemoteMonster 사이트에서 등록했던 당신의 id를 입력하세요.
.key("1234567890") // RemoteMonster로부터 받은 당신의 key를 입력하세요.
.build();
button.setOnClickListener{
remonCall.connect("CHANNEL_ID")
}

버튼을 클릭하면 'CHANNEL_ID'라는 이름의 통화용 방이 만들어집니다. 웹용 Remon 샘플 페이지에서 당신이 만든 안드로이드 앱과 서로 통화를 해보세요.

통화 목록 검색

만약 A라는 통화용 채널을 만들었는데 상대방은 어떻게 A라는 채널이 있는지 확인할 수 있을까요? 검색을 해야합니다. 다음과 같이 RemonCall의 메소드를 이용하여 채널을 검색하고 해당 채널에 들어갈 수 있습니다. 통화는 항상 2명만 참여할 수 있습니다.

remonCall = RemonCall.builder().build();
remonCall.fetchCalls();
remonCall.onFetch(calls -> {
for (Channel call : calls) {
if (call.getStatus.equals("WAIT")) { // Only WAIT channels
myChannelId = call.getId;
}
}
});
remonCall.connect(myChannelId)

그 외 주요 메소드들

RemonCall의 주요 인스턴스 메소드는 다음과 같습니다.

  • close() : RemonCall 객체가 소멸됩니다. 통화를 종료할 때 사용합니다. close 후에 새 통화를 시작하려면 RemonCall 객체를 새롭게 생성 해야 합니다.

  • showLocalVideo(): 통화 시작 전에 자신의 카메라 화면을 미리 보고 싶을 때 호출합니다.

  • pauseLocalVideo(true): 통화 중 자신의 카메라 화면을 중지하고 싶을 때 호출합니다.

  • switchCamera(): 카메라가 여러 개일 때 카메라를 순차적으로 스위칭해서 보여줍니다.

  • fetchCalls() : 통화채널을 조회할 때 호출합니다.

Callback에 대하여

  • onInit(): RemonCall 객체 생성이 정상적으로 처리됐을 때 호출됩니다. token이 인자로 전달됩니다.

  • onConnect(): 통화채널이 만들어졌을 때 호출됩니다. 생성된 채널ID가 인자로 전달됩니다.

  • onComplete() : 통화 상대방과 연결이 됐을 때 호출됩니다.

  • onClose(): 통화가 종료되었을 때 호출됩니다. CloseType이 인자로 전달됩니다.

  • onError(): 에러가 발생했을 때 호출됩니다. 오류 메시지가 인자로 전달됩니다.

  • onStat(): RemoteMonster가 통화품질 데이터를 5초마다 자동으로 생성합니다. 통화품질 데이터가 생성될 때 호출됩니다. 통화품질 데이터가 인자로 전달됩니다.

자세한 내용은 다음 문서를 참고합니다.

Callback과 Observer

단순 통화 앱을 만들며 RemoteMonster를 이용해 기능을 구현하는 방법을 알아보았습니다. Remon SDK의 내부를 알면 다양한 옵션을 선택할 수 있고, 원하는 것을 쉽게 구현할 수 있습니다.

Remon SDK의 내부