기록해야 기억에 남는다

WebRTC (6) - Kurento RecorderEndpoint (2) 본문

Live-Streaming/WebRTC

WebRTC (6) - Kurento RecorderEndpoint (2)

아케인222 2023. 3. 10. 02:04

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