유달린 방송 자동녹화 시스템 (open-stream-recorder 개발을 위한 playground 겸 테스트)
이 레포는 코드 퀄리티 신경쓰지 않고 빠르게 기술검증하고 구현하는 용도로 편하게 활용
- 일단 NestJS 기반으로 작성
- Twitch EventSub을 통해 생방송 알림 수신
- 일단 하나의 코드에서 모든 작업 수행
- 중간에 Redis를 두고 BullMQ로 큐 처리
- DB는 Supabase에서 제공하는 PostgreSQL를 이용
- 저장은 R2에서
- Twitch EventSub으로 알림이 들어온다
- 들어온 알림을
stream
테이블에 기록한다 (스트림이 시작됨) - m3u8 주소를 불러와서 역시
stream
테이블에 함께 기록한다 - m3u8 주소를 파싱해서 하위 job을 실행시키는 메인 Job을 실행한다
- 메인 Job에서 ts 파일 파싱을 시작한다.
- 추출된 ts 파일은
segment
테이블에 기록하고, 파일을 다운받아 r2에 저장하는 하위 Job을 실행시킨다 - 하위 Job에서는 ts 파일을 저장하고, r2에 업로드하고, db에 완료된 링크를 기록까지 한다
- Job이 실패하면 다시 실행되니까 최소 n회 정상 동작 보장은 될 것이다
프론트와 백엔드에서는 stream
테이블과 segment
테이블을 이용해서 ts segment file을 이용한 스트리밍을 보여준다.