Docker로 트위치 스트리밍 자동 녹화하기

2022. 12. 31. 21:41Programming

발단

트위치가 720p에 이어 다시보기를 중단했습니다.

정확히는 한국 ip일 경우 다시보기가 보이지 않게 바뀌었는데, VPN을 켜면 조회는 가능했습니다. 그러나 그것도 이제는 더 이상 의미가 없습니다. 내년부터는 이 다시보기마저도 생성이 되지 않기 때문이죠.

풀영상 다시보기를 제공하는 스트리머들이 아니라면 결국 스트리밍 녹화밖에 없습니다. 그렇다면 옛날 비디오 세대마냥 본방을 직접 녹화해야할까요? 그럴 리가요. 다행히도 누군가가 대안을 제시했습니다. 바로 docker 허브에서 발견한 streamlink 이미지입니다.

 

Docker

 

hub.docker.com

이 이미지의 개요에서는 작성자가 아래와 같이 설명하고 있습니다.

I was in the search for a twitch stream ripper that would monitor and save streams to my twitch synology folder to watch on plex while I'm unable to watch online.
I could not find an existing image that would respond exactly to my needs so I combined what I could find from few existing projects

트위치 생방을 못 보는 경우가 있기에. 트위치 스트리밍을 모니터링하면서 따로 리핑을 해줄 수 있는 프로그램을 찾았다. 리핑한 결과물을 시놀로지 폴더에 저장하고, 이를 plex로 보기 위함이었다.
그러나 내 요구사항을 완벽하게 충족하는 이미지를 찾지 못해서 기존에 있던 유사한 프로젝트들을 스까서 새로 만들었다.

설명만 들어도 우리가 원하던 그 프로젝트입니다.

저는 시놀로지 도커에 올려서 사용해보겠습니다. 설명 드갑니다.

Streamlink란?

Streamlink는 스트리밍을 저장할 수 있도록 도와주는 CLI 프로그램입니다. HLS를 사용하는 어지간한 서비스에는 적용할 수 있으며, 트위치도 이 중에 해당됩니다.

 

Streamlink 5.1.2 documentation

A command-line utility that extracts streams from various services and pipes them into a video player of choice.

streamlink.github.io

이번에 소개하는 이미지는 이 Streamlink에 Twitch API를 같이 결합하여 아래와 같이 동작하도록 되어있습니다.

  1. Twitch API를 통해 특정 스트리머가 방송 중인지 확인한다
  2. 방송 중이 아닐 경우엔 일정 시간 뒤에 재도전한다.
  3. 방송 중일 경우엔 Streamlink를 통해 녹화를 시작한다.

그러므로 Twitch API 사용을 위한 채널 등록이 필요합니다.

Twitch API를 위한 채널 등록

Twitch Developers에 들어갑니다.

이후 '콘솔'에 들어갑니다.

"응용 프로그램"에 들어가서 "내 응용 프로그램 등록"을 누릅니다.

적당히 아무값이나 입력합니다. OAuth 리디렉션 URL은 편의상 "http://localhost"로 적어주시면 됩니다.

범주는 어느 걸 해도 상관 없는데 저는 Analytics Tool로 골랐습니다.

이후 생성한 응용 프로그램의 관리로 들어갑니다.

여기에서 클라이언트 ID가 필요합니다.

그리고 아래의 클라이언트 시크릿도 필요한데요, 발급하기 전까지는 존재하지 않습니다. "신규 시크릿" 버튼을 누르면 생성됩니다.

이렇게 생성된 시크릿은 1회성으로, 해당 페이지를 벗어나면 사라지니 잘 보관해야만 합니다.

이제 Streamlink 이미지를 돌릴 준비는 다 됐습니다.

Docker로 돌려봅시다

 

먼저, 이 이미지는 /download 경로에 다운로드하도록 되어있으므로, 볼륨 마운트 옵션을 통해 자신이 받고자 하는 경로를 넣어야합니다.

예를 들어 C:\TwitchDownloads 폴더에 넣고 싶다면 -v C:\TwitchDownloads:/download 옵션을 주면 됩니다.

넘겨줄 수 있는 환경변수에 대해 알아보겠습니다.

  • user : 확인하고자 하는 스트리머의 아이디. twitch.tv/xxx 에서 xxx에 해당하는 부분입니다.
  • timer : 온라인 상태를 확인하는 작업을 몇초 간격으로 실시할지를 정합니다. 180은 3분에 한번씩 방송 중인지 체크하겠다는 의미입니다. 너무 짧으면 API 사용량 초과로 블락이 될 수 있으니 적절하게 조절해야합니다.
  • clientid : 위에서 이야기 한 클라이언트 id입니다.
  • clientsecret : 위에서 이야기 한 클라이언트 secret입니다.
  • quality : 화질입니다. worst, best 같은 특수 키워드가 있고, 720p60 이나 480 같은 직접적인 지정도 가능합니다.
  • slackid : 녹화가 시작되고 녹화가 끝날 때 알림을 줄 수 있도록 슬랙 id를 넘겨주면 슬랙으로 노티를 준다는데, 안 써봐서 모르겠습니다.

이 설정값들을 맞춰서 실행하면 됩니다.

유의사항 : 스트리밍 녹화도 720p?

잘 알다시피 한국 ip일 경우에는 스트리밍 시 최대 화질이 720p입니다. 그러므로 Streamlink를 사용하더라도 국내 ip라면 best quality 옵션이 있더라도 720p만 받게 됩니다.

이걸 막기 위해서는 컨테이너 내부의 네트워크도 VPN을 사용하도록 해줘야 합니다.