안녕하세요.
RemonCall (안드로이드 sdk 2.7.5) 로 1:1 영상 채팅 중 상대방이 건 통화를 거절하려는 로직을 만드는 중에 질문이 있습니다. 현재의 로직은 아래와 같습니다.
- RemonCall.builder() 로 초기화
- onInit() 콜백에서 showLocalVideo() 콜 (통화승낙/거절 화면에서 카메라 미리보기 보여주기 위해서)
- 거절을 누르면 RemonCall.close() 콜
3.번 과정에서 RemonCall.close()은 PeerConnectionMediaManager.java 파일의 close()함수를 호출하게 되는데 RemonCall.connect()를 하지 않았기 때문에 mRemonContext.getChannel() 가 null입니다. 그래서 아래 로직을 타지않게 되고
if( mRemonContext.getChannel() != null && mRemonContext.getIdentity() != null ) {
if( sCaptuerManager.getVideoCapturer() != null ) {
sCaptuerManager.removeObserver(mRemonContext.getIdentity());
}
}
(1) observer 제거
(2) mVideoCapturer.stopCapture()
(3) mVideoCapturer.dispose()
이렇게 3가지 release 로직을 타고있지 않고 있습니다.
(2)와 (3)의 과정은 getCapturer()로 Capturer를 가져와서 수행할 수 있으나 (1) observer 제거는 외부에서 수행을 할수 없는 상태입니다.
이 문제 때문인지 한번이라도 거절을 하면 앱을 강제 종료하지 않는 이상 다시 액티비티를 만들어서 동일한 과정을 다시 해도 카메라 화면이 검게 나옵니다.
통화 거절을 하지않고 통화 승낙을 하면 RemonCall.connect() 하기 때문에 mRemonContext.getChannel()을 했을때 channel정보가 있고, RemonCall.close()를 콜했을때 위의 코드를 타서 release가 잘되고 화면이 검게 나오는 문제가 없습니다.
통화 거절 로직을 만드는 다른 방법이 있는 것인가요? 제가 어느 부분을 잘못 만들었을까요?