프로그래밍/회고

DASHI - 트위치 다시보기 부활

Lou Park 2023. 11. 19. 11:07

dashi.tv

 

2022년 11월 10일 트위치 다시보기 서비스가 사라졌다.

오늘이 19일이니까 1년하고도 정확히 9일지났는데 너무나 불편한게 많아서 견딜 수 없었다 ㅋㅋㅋ

솔직히 1080p 뺏긴건 괜찮다...근데 다시보기는 선 넘었다고 생각함

 

좋아하는 스트리머가 갑자기 방송을 키거나, 아니면 그 날의 녹화본이 사라지거나

하는 경우가 잦아서 트수는 이 상황을 안타까워하며 분개하며...나만의 다시보기 스트리밍 서비스인 dashi를 어제 하루를 꼬박 투자해서 만들었다.

않이 회사에있는데 방송이 끝났다고

 

기능

- Observe하는 스트리머의 방송 녹화: 방송을 한번 켤때마다 하나의 다시보기가 만들어진다.

- 지난 방송 리스트: 최대 3일까지의 방송목록을 가지고 있는다.

- 최근 잘라보기: 지금은 리밋을 해제에서 처음부터 끝까지 볼 수 있지만, 최근 N시간만 보기 기능도 지원한다.

- 다시보기 스트리밍: HLS 기반 다시보기 스트리밍을 지원한다.

 

구조

 

dashi는 복잡하지 않게 만들고, 기능을 덧붙여나가자는 신조아래 만들어졌다.

전체 구조는 단순하다. DB하나 없다.

방송정보는 모두 파일로 관리한다.

 

Twitch API를 통해 지금 Live중인지를 주기적으로 확인하고, 방송중일 경우 streamlink로 스트림을 받아와서 ffmpeg로 대략 10초마다 잘라서 ts파일로 저장해둔다. 한편 m3u8을 만드는 워커가 따로 존재하며, 이 워커는 현재 작업중인 방송에 대해서 여태까지 받아온 ts파일들을 기반으로 m3u8을 업데이트한다. 

 

방송마다 스트리머 ID와 시작시간을 기반으로 Hash를 만들어 하루에 여러번 방송을 껐다 키더라도 각각의 방송으로 기록된다.

유저(나)가 보는 Web화면은 진짜 HTML 쪼가리다...ㅋㅋㅋ

 

*이 다시보기 서비스는 스트리머에게 피해를 끼치지 않는다.

영상을 스트리밍 받을때는 그저 봇 시청자 1명이 있는 것과 동일하고, 그 후에는 서버에 저장된 녹화분만 돌려보기 때문이다.

 

토요일에 방송하는 사람들이 없어서 내가 방송켬....ㅋㅋㅋㅋㅋ

 

UI 디자인도 편한대로 대충했는데 영상에 최대한 집중할 수 있게 다크모드를 선택했다.

그리고 나도 개발에 최대한 집중할 수 있게(?) 최대한 디자인 요소를 뺌

 

 

개선할 점

모니터링 시스템

배치가 제대로 돌아가지 않았거나 실패했을때 내 Discord로 알림을 받을 수 있도록 해야한다. 그리고 로그자체도 빈약하게 찍혀있기 때문에 이 부분을 개선해야함.

 

m3u8 파일 생성기

따로 임시파일을 만들어서 처리하기는 하지만, 녹화가 길어질수록 생성에도 시간이 많이 걸리므로

이미 처리한 청크에 대해서는 다시 처리하지 않도록 수정하면 속도가 빨라질 것이다.

 

관리자 화면

방송을 3일까지밖에 보관 못하는 이유가 내 서버에 가용 용량이 60G남짓이기 때문인데, 방송을 수동으로 삭제하고 스트리머 ID도 업데이트 할 수 있도록 바꾸면 좋을 것 같다.

 

 


 

홈 서버에서 돌리는거라 아직은 나만 써보고있다.

개선할점도 조금씩 픽스해나가면 같은 스트리머 보는 사람들과 공유할 수 있지 않을까?