기록해야 기억에 남는다
WebRTC (6) - Kurento RecorderEndpoint (2) 본문
1) RecorderEndpoint callback
- 비디오 녹화를 위해 RecorderEndpoint 생성 시 이벤트 리스너 콜백 함수를 등록 해줄 수 있다.
- addRecordingListener - 녹화가 시작되면 호출되는 이벤트 리스너 등록
- addPausedListener - 녹화가 일시정지 되면 호출되는 이벤트 리스너 등록
- addStoppedListener - 녹화가 중단되면 호출되는 이벤트 리스너 등록
- 위 세 가지 메소드가 RecorderEndpoint에 정의되어 있고, 상위 클래스에도 추가적인 메소드들이 존재한다.
- RecorderEndpoint - UriEndpoint - Endpoint - MediaElement - MediaObject - KurentoObject 순으로 상속 관계
- addMediaFlowInStatusChangedListener - 미디어가 RecorderEp 로 흘러들어오는 상태 변경 감지 이벤트 리스너 등록
- addMediaFlowOutStatusChangedLister - 미디어가 RecorderEp 에서 흘러나가는 상태 변경 감지 이벤트 리스너 등록
- addErrorListener - 에러 발생 감지 이벤트 리스너 등록
- 그 외에도 몇 가지가 더 존재하나, addMediaFlowInStatusChangedListener 를 사용하였다
2) Recording & Upload
- 1) 방송이 종료되면 WebRtcEndpoint를 release 함
- 2) WebRtcEndpoint가 release 되면, WebRtcEndpoint에서 RecorderEndpoint로 흘러가는 미디어 중단
- 3) addMediaFlowInStatusChangedListener 에서 등록한 콜백 함수 호출
- 4) 이벤트 리스너 argument의 status가 NOW_FLOWING이라면 녹화 할 준비 시작
- 5) RecorderEp에서 녹화를 제대로 마무리 하려면 꼭 stop을 해주어야 함
- RecorderEp.stopAndWait(new Continuation<>());을 콜하며 Continuation을 넘겨주어 async 하게 stop과 wait 처리 가능
- 6) new Continuation<>() 이 정의하고 있는 onSuccess 콜백 내부에서 recorderEndpoint와 mediaPipeline를 release 처리 + 업로드 서버로 업로드 요청을 전달
- 만약 그 전에 mediaPipeline을 release 하게 되면 recorderEndpoint는 KMS에서 보내는 요청을 받지 못해 콜백 함수가 제대로 작동하지 않게 됨
- 하단과 같이 VideoOnly, AudioOnly가 아닌 경우 Video, Audio 2채널이 close 되므로 두번 씩 호출 됨

- 두번 업로드 요청 하는 것을 방지하기 위해 Audio / Video 2채널인 경우 AtomicInteger를 이용해 종료 카운트를 세어주어 두 채널 모두 끊어진 경우 업로드 요청을 보내도록 개선

'Live-Streaming > WebRTC' 카테고리의 다른 글
| WebRTC (7) - Kurento RecorderEndpoint + FFmpeg (3) (0) | 2023.03.10 |
|---|---|
| WebRTC (5) - Kurento RecorderEndpoint (0) | 2023.03.07 |
| WebRTC (4) - Kurento One2ManyCall (0) | 2023.03.07 |
| WebRTC (3) - About Kurento (0) | 2023.03.07 |
| WebRTC (2) - SDP, RTP (0) | 2023.03.07 |