문제상황
- 20분 내의 프로세스는 killsignal을 통해 종료시켜도 정상적으로 음성이 저장되나, 20분이 넘어가면 음성이 비정상적으로 저장되고, kill signal을 날려도 프로세스가 정상적으로 종료되지 않았음.
- 프로세스가 정상적으로 종료되지 않아, 프로세스 종료 시 지정해놓은 이벤트 핸들러가 작동하지 않아, 다음 로직이 실행되지 않음.
분석
- kill signal을 날려도 기존의 프로세스가 정리될 시간을 주기 때문에 ffmpeg은 기존의 작업을 계속 실행
- sdp스트림의 끝을 알아채는 방법은 null값을 탐지하는 것.
- 하지만 현재는 끝을 알릴 null값을 임의로 넣어 줄 수 없기때문에 ffmpeg은 스트림의 끝을 파악못함
- 따라서 스트림이 종료되면 ffmpeg은 timeout error를 던지며 프로세스를 스스로 종료.
- killsignal로 프로세스가 죽어가는 중에 transport가 닫히며 스트림이 끝나고 스트림이 끝나니 또 에러를던지며 프로세스가 종료되며 정상적으로 프로세스 종료로직이 이뤄지지 않음
해결
- kill signal로 프로세스를 죽이지 말고 transport를 없에 스트림을 끊어 프로세스가 스스로 종료되게하도록 로직을 변경함.