VideoRoom Guide

Videoroom은 영상 회의 기능을 인터넷을 이용한 앱으로 구현한 것입니다. Omnitalk SDK를 이용하여 회의실(룸) 생성 및 참여하는 것으로 1:1 또는 다자간 영상 회의실 기능을 간단히 구현할 수 있습니다.

Step 0. SDK 초기화 및 객체 생성

Developer's Guide의 Pre-requisite에서 장치 설정 및 개발 공통 사항을 참고하시기 바랍니다.

Step 1. 세션 생성

Omnitalk SDK 초기화를 제외한 모든 API 기능은 유효한 세션의 존재를 전제로 하고 있습니다. 세션의 생성을 위해 createSession API를 호출합니다. 사용하고 싶은 번호나 문자열을 userId로 전달해 등록할 수 있으며 생략시엔 Omnitalk 서버에서 부여한 임의의 id를 리턴받을 수 있습니다.

await sdk.createSession();

Step 2. 회의실 생성 및 조회

기존 회의실을 조회해 참여하거나 새로운 회의실을 만들 수 있습니다. 기존 회의실(룸) 조회는 roomList API를, 회의실(룸) 생성은 createRoom API를 이용합니다. 룸 타입을 명시하지 않으면 모든 타입의 룸이 조회됩니다. 조회한 목록 결과의 room_id 로 회의실에 참여할 수 있습니다.

var roomResult = await sdk.roomList(roomType: RoomType.audioroom);

await sdk.createRoom(roomType: RoomType.videoroom);

Step 3. 회의실 참여

회의실에 참여하게 되면 별도의 작업 없이 참여자들과 음성 회의를 할 수 있게 되며, 회의실에 관련된 이벤트 메세지를 수신할 수 있습니다. 음성 회의실에서 수신 가능한 이벤트는 아래와 같습니다. 자세한 내용은 Event Message 를 참조 바랍니다.

await sdk.joinRoom(roomId : roomId)
  • CONNECTED_EVENT - 새로운 참가자 입장했을 때

  • LEAVE_EVENT - 다른 참가자가 퇴장 했을 때

  • MUTE_EVENT - 다른 참가자가 mute 했을 때

  • UNMUTE_EVENT - 다른 참가자가 unmute 했을 때

  • MESSAGE_EVENT - 채팅 메세지 수신 이벤트, 회의실 입장시 채팅 기능을 사용할 수 있는 상태가 됩니다. 채팅기능 사용법은 Chatting Guide 를 참조 바랍니다.

Step 4. 방송 시작

비디오 방송의 시작은 자신의 영상을 담을 RTCVideoRenderer 타입의 객체를 인수로 전달해 publish API를 호출하면 됩니다. publish API호출이 성공하면 해당 방송의 세션 id가 담긴 객체를 리턴 받게 되고 룸의 다른 사용자들에게 BROADCASTING_EVENT가 발생합니다.

RTCVideoRenderer localVideo = RTCVideoRenderer();

await sdk.publish(localRenderer: localVideo);

Step 5. 방송 구독

룸에서 방송중인 사용자의 영상을 구독하기 위해서는 subscribe API를 사용하면 됩니다. 방송 리스트를 조회하거나 BROADCASTING_EVENT를 수신해 구독할 방송의 세션을 구할 수 있습니다. 구독할 영상을 담을 RTCVideoRenderer 타입의 객체를 함께 인수로 전달합니다. 방송 구독에 성공하면 CONNECTED_EVENT를 받게 됩니다.

RTCVideoRenderer remoteVideo = RTCVideoRenderer();
await sdk.subscribe(publisherSession : publisherSession, remoteRenderer : remoteVideo);

참여자 목록 조회

publishList API 를 사용하여 입장한 회의실에 참여하여 방송을 개시한 사용자 목록을 조회할 수 있습니다.

await sdk.publishList();

BROADCASTING_EVENT 수신

sdk.on('event', (dynamic event) async {
      switch (event["cmd"]) {
        case "BROADCASTING_EVENT":
          publisherSession = event['session'];
          break;
        case "CONNECTED_EVENT":
          print('Audio Connected');
          break;
        case "LEAVE_EVENT":
          print('$event['session']} has left');
          break;
      }
    });

Last updated