RemonCast, RemonCall의 간단한 코드 만으로 통신 및 방송이 가능 합니다. 사용자의 필요에 따라 UI처리 및 추가 작업이 필요한 경우가 발생 합니다. 아래의 다양한 Callback을 통해 보다 세부적인 개발이 가능합니다.
안드로이드 2.4.13, iOS 2.6.9 버전부터 콜백은 모두 UI Thread 에서 호출됩니다. 이전 버전의 경우 UI 요소의 변경 시 UI Thread 와 관련한 처리를 추가해야 합니다.
방송과 통신은 각각에 적합한 이벤트와 흐름을 가지고 있습니다. 이를 알아두면 Callback를 활용하는데 도움이 됩니다. 이에 대한 내용은 아래를 참고하세요.
Basics
onInit(token) / onInit()
onInit은 SDK가 인터넷을 통해 RemoteMonster 서버에 정상적으로 접속하여 RemoteMonster의 방송, 통신 인프라를 사용할 준비가 완료된 상태를 의미합니다. 이때 인증 정보인 token을 돌려 받습니다. 대다수의 경우 사용할 일이 없으며 디버깅에 활용하게 됩니다.
(Android 의 경우 token 을 전달하지 않습니다.)
constlistener= {onInit(token) {// Do something }}
remonCast.onInit(() -> {// Do something});
remonCast.onInit {}
remonCast.onInit { (token) in// Do something}
[remonCast onInitWithBlock:^{
// Do something
}];
onCreate(channelId) - livecast
방송에서 송출자만 사용합니다. 송출자가 create()을 통해 방송을 정상적으로 생성하여 송출이 될때입니다.
onCreate는 인자로 channelId를 넘겨줍니다. 이것은 이 방의 고유한 구분자로 시청자들이 이 channelId를 통해 접속하여 방송을 보게 됩니다.
constlistener= {onCreate(channelId) {// Do something }}constcast=newRemon({ listener })cast.createCast() // Server generate chid
remonCast.onCreate((channelId) -> {// Do something});remonCast.create("ChannelName"); // Server generate channelId
remonCast.onCreate { (channelId) in// Do something}remonCast.create()// Server generate chid
[remonCast onCreateWithBlock:^(NSString * _Nullable chId) {
// Do something
}];
onJoin() - livecast
방송에서 시청자만 사용됩니다. 시청자가 join()을 통해 연결이 완료 된후 미디어 시청이 가능해 졌을 때 호출 됩니다.
constlistener= {onJoin(channelId) {// Do something }}constcast=newRemon({ listener })cast.joinCast('MY_CHANNEL_ID') // 'chid' is mandatory
remonCast.onJoin(() ->// Do something});remonCast.join('MY_CHANNEL_ID'); // channelId is mandatory
remonCast.onJoin {// Do something}remonCast.join('MY_CHANNEL_ID');
remonCast.onJoin {// Do something}remonCast.join('MY_CHANNEL_ID')// 'chid' is mandatory
constlistener= {onJoin(channelId) {// Do something }}constcast=newRemon({ listener })cast.joinCast('MY_CHANNEL_ID') // 'channelId' is mandatory
onConnect(channelId) - communication
통신에서만 사용됩니다. 실질적으로 채널을 만들어 통화를 요청하는 Caller이거나 만들어진 채널에 접속하여 요청에 응답하는 Callee일때의 동작을 달리 하는 경우가 많으며 개발자가 Caller, Callee여부에 대한 상태를 관리해야 합니다.
Caller는 connect()을 통해 채널을 새로 만들고 상대방이 입장하기를 기다립니다.
Callee는 connect()을 통해 이미 만들어진 채널에 접속하게 됩니다. 이때 만들어진 채널의 channelId를 필수로 필요하게 됩니다. 정상적으로 완료되면 onConnect가 생기나, Callee라면 곧바로 발생하는 onComplete를 사용하는것을 권장합니다.
통신에만 사용됩니다. 상호간 연결이 완료 된후 미디어 전송이 가능해 졌을 때 호출 됩니다.
constlistener= {onComplete() {// Do something }}
remonCall.onComplete(() -> {// Do something});
remonCall.onComplete {// Do something}
remonCall.onComplte {// Do something}
[remonCall onCompleteWithBlock:^{
// Do something
onClose()
사용자가 명시적으로 close() 함수를 호출 하거나 상대방이 close()함수를 호출 했을때 또는 네트워크 이상 등으로 더이상 연결을 유지 하기 어려울 때 등 연결이 종료 되면 호출 되며, Remon에서 사용했던 자원들 해제가 완료된 상태입니다.
constlistener= {onClose() {// Do something }}
remonCast.onClose((closeType) -> {// CloseType.MINE : 자신이 close() 를 호출해 연결을 끊은 경우// CloseType.OTHER : 상대방이 close() 를 호출해 연결을 끊은 경우// CloseType.OTHER_UNEXPECTED : 상대방이 끊어져서 연결이 종료된 경우// CloseType.UNKNOWN : 이유를 알 수 없이 연결이 종료된 경우});
remonCast.onClose { closeType:CloseType ->// CloseType.MINE : 자신이 close() 를 호출해 연결을 끊은 경우// CloseType.OTHER : 상대방이 close() 를 호출해 연결을 끊은 경우// CloseType.OTHER_UNEXPECTED : 상대방이 끊어져서 연결이 종료된 경우// CloseType.UNKNOWN : 이유를 알 수 없이 연결이 종료된 경우}
remonCast.onClose {// Do something}remonCast.close()
[remonCast onCloseWithBlock:^{
// Do something
}];
onError(error)
Remon이 동작 중에 에러가 발생 할때 호출 됩니다.
constlistener= {onError(error) {// Do something }}
Remon 이 동작 중에 네트워크 환경의 변경이 감지되면 재연결을 시도 합니다. 이 때 재연결 상태를 알려주는 onRetry() 함수가 호출 되며 재연결이 시도가 시작 될 때는 completed 값을 false로 호출 되고, 재연결이 완료 되면 completed 값을 true로 호출 됩니다. 만약 재연결 시도중 재연결이 실패 하거나 에러가 발생 한다면 onRetry()가 아닌 onError() 또는 onClose()가 호출 될 수도 있습니다.
N/A
N/A
self.remonCast.onRetry { (completed) inif completed {// 재연결이 완료 되었습니다.// 재연결 시도 중 실패가 발생 한다면 호출 되지 않을 수 있습니다. } else {// 재연결을 시도 합니다. 재연결이 시도가 시작 되면 항상 호출 됩니다. }}
[self.remonCall onRetryWithBlock:^(BOOL completed) {
if (completed) {
// 재연결이 완료 되었습니다.
// 재연결 시도 중 실패가 발생 한다면 호출 되지 않을 수 있습니다.
} else {
// 재연결을 시도 합니다. 재연결이 시도가 시작 되면 항상 호출 됩니다.
}
}];
영상의 사이즈는 네트워크 상태에 따라 시시각각 변화 하며, 영상의 비율은 영상장치에 따라 다릅니다. 영상 송출자가 고정된 사이즈와 비율 보장해 주지 않는 환경이라면 onRemoteVideoSizeChanged와 onLocalVideoSizeChanged 함수를 구현 하여 변화 하는 영상크기에 반응 하도록 구현합니다.
Remon 객체를 생성할 때 입력 인자로 넣는 listener의 메소드 중 onStat() 을 구현하여 품질 정보를 받을 수 있습니다. 위의 result에서 받을 수 있는 여러 정보 중 result.rating 이 바로 네트워크 상황에 따른 통합적인 통화 품질 정보입니다.
@OverridepublicvoidonStat(RemonStatReport report) {Logger.i(TAG,"report: "+report.getHealthRating());String stat ="health:"+report.getHealthRating().getLevel() +"\n"; }
report에는 방송/통신의 상태를 알 수있는 여러가지 값들이 있습니다. report.getHealthRating().getLevel()을 통해 품질을 상태를 알 수도 있고, report.getRemoteFrameRate() / report.getLocalFrameRate()를 통해 해당 연결의 fps를 확인 할 수 있습니다.
report에는 방송/통신의 상태를 알 수있는 여러가지 값들이 있습니다. report.getHealthRating().getLevel()을 통해 품질을 상태를 알 수도 있고, report.getRemoteFrameRate() / report.getLocalFrameRate()를 통해 해당 연결의 fps를 확인 할 수 있습니다.