Callbacks

Overview

RemonCast, RemonCall의 간단한 코드 만으로 통신 및 방송이 가능 합니다. 사용자의 필요에 따라 UI처리 및 추가 작업이 필요한 경우가 발생 합니다. 아래의 다양한 Callback을 통해 보다 세부적인 개발이 가능합니다.

안드로이드 2.4.13, iOS 2.6.9 버전부터 콜백은 모두 UI Thread 에서 호출됩니다. 이전 버전의 경우 UI 요소의 변경 시 UI Thread 와 관련한 처리를 추가해야 합니다.

방송과 통신은 각각에 적합한 이벤트와 흐름을 가지고 있습니다. 이를 알아두면 Callback를 활용하는데 도움이 됩니다. 이에 대한 내용은 아래를 참고하세요.

pageFlowpageChannel

Basics

onInit(token) / onInit()

onInit은 SDK가 인터넷을 통해 RemoteMonster 서버에 정상적으로 접속하여 RemoteMonster의 방송, 통신 인프라를 사용할 준비가 완료된 상태를 의미합니다. 이때 인증 정보인 token을 돌려 받습니다. 대다수의 경우 사용할 일이 없으며 디버깅에 활용하게 됩니다. (Android 의 경우 token 을 전달하지 않습니다.)

const listener = {
  onInit(token) {
    // Do something
  }
}

onCreate(channelId) - livecast

방송에서 송출자만 사용합니다. 송출자가 create()을 통해 방송을 정상적으로 생성하여 송출이 될때입니다.

onCreate는 인자로 channelId를 넘겨줍니다. 이것은 이 방의 고유한 구분자로 시청자들이 이 channelId를 통해 접속하여 방송을 보게 됩니다.

const listener = {
  onCreate(channelId) {
    // Do something
  }
}

const cast = new Remon({ listener })
cast.createCast()                          // Server generate chid

onJoin() - livecast

방송에서 시청자만 사용됩니다. 시청자가 join()을 통해 연결이 완료 된후 미디어 시청이 가능해 졌을 때 호출 됩니다.

const listener = {
  onJoin(channelId) {
    // Do something
  }
}

const cast = new Remon({ listener })
cast.joinCast('MY_CHANNEL_ID')                    // 'chid' is mandatory

onConnect(channelId) - communication

통신에서만 사용됩니다. 실질적으로 채널을 만들어 통화를 요청하는 Caller이거나 만들어진 채널에 접속하여 요청에 응답하는 Callee일때의 동작을 달리 하는 경우가 많으며 개발자가 Caller, Callee여부에 대한 상태를 관리해야 합니다.

Caller는 connect()을 통해 채널을 새로 만들고 상대방이 입장하기를 기다립니다.

Callee는 connect()을 통해 이미 만들어진 채널에 접속하게 됩니다. 이때 만들어진 채널의 channelId를 필수로 필요하게 됩니다. 정상적으로 완료되면 onConnect가 생기나, Callee라면 곧바로 발생하는 onComplete를 사용하는것을 권장합니다.

const listener = {
  onConnect(channelId) {
    if (isCaller) {
      // Do something
    }
  }
}

const call = new Remon({ listener })
call.connectCall()
// Or
call.connectCall('MY_CHANNEL_ID')

onComplete() - communication

통신에만 사용됩니다. 상호간 연결이 완료 된후 미디어 전송이 가능해 졌을 때 호출 됩니다.

const listener = {
  onComplete() {
    // Do something
  }
}

onClose()

사용자가 명시적으로 close() 함수를 호출 하거나 상대방이 close()함수를 호출 했을때 또는 네트워크 이상 등으로 더이상 연결을 유지 하기 어려울 때 등 연결이 종료 되면 호출 되며, Remon에서 사용했던 자원들 해제가 완료된 상태입니다.

const listener = {
  onClose() {
    // Do something
  }
}

onError(error)

Remon이 동작 중에 에러가 발생 할때 호출 됩니다.

const listener = {
  onError(error) {
    // Do something
  }
}

Error 코드에 대해 자세히 알고 싶으시면 아래 내용을 참고하시기 바랍니다.

pageError

onRetry(completed) - Beta

Remon 이 동작 중에 네트워크 환경의 변경이 감지되면 재연결을 시도 합니다. 이 때 재연결 상태를 알려주는 onRetry() 함수가 호출 되며 재연결이 시도가 시작 될 때는 completed 값을 false로 호출 되고, 재연결이 완료 되면 completed 값을 true로 호출 됩니다. 만약 재연결 시도중 재연결이 실패 하거나 에러가 발생 한다면 onRetry()가 아닌 onError() 또는 onClose()가 호출 될 수도 있습니다.

N/A

Advanced

onRemoteVideoSizeChanged(view, size)/onLocalVideoSizeChanged(view, size)

영상의 사이즈는 네트워크 상태에 따라 시시각각 변화 하며, 영상의 비율은 영상장치에 따라 다릅니다. 영상 송출자가 고정된 사이즈와 비율 보장해 주지 않는 환경이라면 onRemoteVideoSizeChangedonLocalVideoSizeChanged 함수를 구현 하여 변화 하는 영상크기에 반응 하도록 구현합니다.

N/A

onStat(report)

통신 / 방송 상태를 알수있는 report를 받습니다. report는 사용자가 remon 생성시 설정한 statInterval간격 마다 들어오게 됩니다. 네트워크 상황등에 따른 미디어 품질을 나타냄으로 사용자에게 로딩 UI 처리등 안내를 하는데 유용합니다.

이때, 들어오는 값은 영상 및 음성 통화 중에 현재 통화의 품질이 어떠한지를 통합하여 1에서 5까지의 단계로 확인할 수 있습니다.

사용자는 간혹 자신 혹은 상대방의 네트워크 문제로 인하여 통화 품질이 안좋거나 끊어진 상황에서도 서비스의 문제라고 생각하고 불만을 제기할 수 있습니다. 때문에 사용자의 문제가 네트워크의 문제임을 사전에 알려주거나 다양한 UI 처리가 가능합니다.

현재 이 통화 품질 정보는 5초에 한번씩 받을 수 있습니다.

단계

품질

비고

1

매우 좋음

2

좋음

3

나쁨

4

매우 나쁨

5

방송, 통화 불능

const listener = {
  onStat(result){
    const stat = `State: l.cand: ${result.localCandidate} /r.cand: ${result.remoteCandidate} /l.res: ${result.localFrameWidth} x ${result.localFrameHeight} /r.res: ${result.remoteFrameWidth} ${result.remoteFrameHeight} /l.rate: ${result.localFrameRate} /r.rate: ${result.remoteFrameRate} / Health: ${result.rating}`
    console.log(stat)
  }
}

Remon 객체를 생성할 때 입력 인자로 넣는 listener의 메소드 중 onStat() 을 구현하여 품질 정보를 받을 수 있습니다. 위의 result에서 받을 수 있는 여러 정보 중 result.rating 이 바로 네트워크 상황에 따른 통합적인 통화 품질 정보입니다.

보다 더 자세한 내용은 아래를 확인하세요.

Last updated