Today
-
Yesterday
-
Total
-
  • 스트리밍 파일 저장 일대기 (1) - 파일 다운로드
    Soliloquy 2018. 7. 14. 12:01

     

     

    유튜브 라이브는 어떻게 방송을 전송할까 살펴보다가, 재미난 사실을 찾아냈다.

     

    유튜브 라이브는 HLS 방식 처럼 파일을 조각으로 나눠 일정한 시간 간격으로 전송하는 방식을 사용하고 있었다. 쪼개진 파일을 다운로드 하는 주소를 살펴보니, 거기에는 Key, 아이피, 순서 번호 등이 기록되어 있었는데, 여기서 순서 번호를 임의로 수정하면 과거 시점의 동영상도 불러오는게 가능했다. (심지어 DVR 기능이[각주:1] 꺼진 상태에서도 다시 볼 수 있었다.)

     

    파일명은 videoplayback + 랜덤 문자(MP4 파일)로 되어 있었고, 오디오와 비디오 파일을 별개로 분리 되어 있었다.[각주:2] 이런 파일들을 매 초마다 브라우저 저장소에 저장하여 동시에 재생하는 것 같았다.

     

    보통은 유튜브 다운로드 프로그램을 사용하는게 일반적인 방법이지만, 조각 파일들을 직접 합쳐서 재생시켜보고 싶었다.

     

    그리고 금방 끝날거라고 생각했는데 예상치 못한 오류 덕분에 거의 5시간이 걸렸다.

     

    조각 파일 받기

    wget

    우선 순서 번호 0번(방송 시작) 부터 차례대로 한꺼번에 받아야 하는데, 일일이 숫자를 넣어가면서 손으로 다운로드 하는 것 보다는 다운로드 프로그램의 기능을 이용해 보기로 했다. 처음 생각난 것은 wget. 나름 유명해서 인터넷을 좀 찾아보니 곧 바로 나왔다. 다운로드는 wget "주소" 하면 되고 숫자를 바꿀 부분을 {0..100} 로 하면 해당 자리가 0 부터 100 까지 증가시켜가면서 알아서 받는다고 한다.

     

    .bat 배치 파일을 만들고 다운로드를 시작하니, 인증서 오류가 나와서 --no-check-certificate를 넣어서 다시 시도했다. 그리고 나오는 403 Forbidden 메세지.

     

    C:\>wget "https://r5---sn-3u-u5xz.googlevideo.com/videoplayback?expire=1531515947&fexp=23709359,23745105&... --no-check-certificate

     

    (중략)

     

    Connecting to r5---sn-3u-u5xz.googlevideo.com|220.122.1.208|:443... connected.
    WARNING: cannot verify r5---sn-3u-u5xz.googlevideo.com's certificate, issued by
    `/C=US/O=Google Trust Services/CN=Google Internet Authority G3':
      Unable to locally verify the issuer's authority.
    HTTP request sent, awaiting response... 403 Forbidden
    2018-07-14 11:10:30 ERROR 403: Forbidden.

    403 에러 메세지

     

    위와 같이 403 에러가 자꾸 나왔다. {0...100} 부분을 제외 해도 증상은 동일했다. Useragnet 수정 파라메터를 넣어야 하나? 라는 생각에 -U "Mozilla/5.0 (compatible; MSIE 5.0)" 설정도 넣어봤지만, 계속해서 오류가 뜨는 것은 변함이 없었다. 쿠키 문제인가 싶어서 브라우저 쿠키를 리셋한 상태에서 해당 주소를 들어가니 문제 없이 다운로드가 된다. 파일을 다운로드 하는데 쿠키를 검증하지는 않는 듯 했다.

     

    WinWGet의 모습

     

    대체 뭐가 문제일까 고민하다가, 내가 뭘 잘못 눌렸나 싶어서 wget을 gui로 편리하게 사용할 수 있게 해주는 WinWGet를 써보기로 했다.

     

     

    Resolving r5---sn-3u-u5xz.googlevideo.com... 220.122.1.208
    Connecting to r5---sn-3u-u5xz.googlevideo.com[220.122.1.208]:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 93,902 [audio/mp4]

     

    ...

     

    Cannot write to `C:/videoplayback@lmt=1530998473171125&expire=1531556392...

     

    ...

     

    WinWGET 로그 일부

    파일 이름이 너무 길어서 저장할 수가 없다.

     

    그랬더니, 신기하게도 파일은 잘 받아온다. 그런데 저장이 안된다. 저장이 안되는 이유를 찾기위해 로그를 봤다. 그리고 추측한 이유로 WinWGet이 파일을 저장할 때, 저장 파일명을 주소명 그대로 사용해서 그런듯 했다.[각주:3] 그래서 어떻게 수정을 못할 까 파라메터를 열심히 찾아보다가, 결국 못찾았다.

     

    그런데 왜 WinWGET 에서는 되고 내가 만든 배치파일은 안될까... 고민하다가 WinWGET에 적혀있는 wget 파라메터와 WinWGET이 사용하는 wget 파일을 그대로 들고 와봤다. 배치파일에 똑같이 썼다. 또 403 오류가 나온다. 왜지? 라고 생각하면서 CMD를 열어서 한 번 복사 붙혀넣기 해봤다. 그랬더니, 파일을 잘 받아온다. 뭐가 문제인지는 아직도 잘 모르겠다. 배치 파일로 하면 뭐가 어떻게 바뀌는 건지...

     

    C:\>wget "https://r5---sn-3u-u5xz.googlevideo.com/videoplayback?expire=1531515947&fexp=23709359,23745105&... --no-check-certificate

     

    (중략)

     

    Connecting to r5---sn-3u-u5xz.googlevideo.com|220.122.1.208|:443... connected.
    WARNING: cannot verify r5---sn-3u-u5xz.googlevideo.com's certificate, issued by
    `/C=US/O=Google Trust Services/CN=Google Internet Authority G3':
      Unable to locally verify the issuer's authority.

    HTTP request sent, awaiting response... 200 OK
    Length: 93,902 [audio/mp4]

     

    ...

    CMD 창에 직접 붙여넣으니 잘 받는다...

     

    그래도 역시 파일 저장이 잘 안되서 다른 프로그램을 찾아보기로 했다.

     

    uget

     

    uGet의 모습

     

    그러다 찾아본 uget 이라는 프로그램. GTK 라는 라이브러리로 만들어서 윈도우, 맥, 리눅스 등 거의 왠만한 운영체제를 지원하는 프로그램이었다. 설치하는 게 귀찮아서 포터블 버전으로 받았는데, 특이하게 라이브러리를 위한 환경 변수를 먼저 설정해 주어야 했다. 다행히 직접 설정하는 것이 아니라 알아서 설정해주는 프로그램이 있었다. 압축 풀고 최상단 폴더의 Path Register 를 실행시키면 알아서 변수를 설정해 주었다.

     

    몇 번째 파일 까지 받을까 고민하다가, 비디오 파일 한 개당 3초인 것을 확인하고 1시간 20분 정도인 2500번 까지 받기로 했다. 그런데 200개 이상 받다보면 알 수 없는 오류를 내며, 프로그램이 종료됐다. 처음에는 계속 튕기면서 받으려고 하다가, 결국 포기했다. 윈도우 전용 프로그램이 아니라 문제가 좀 있나보다.

     

    받다보면 계속 나오는 에러메세지

    이것도 정확한 원인을 알 수가 없었다.

     

    결국 다른 프로그램을 찾아보기로 했다.

     

    FDM

    FDM의 모습

     

    이번에는 FDM(Free Download Manager) 이라는 프로그램을 사용해보기로 했다. 이 프로그램은 윈도우, 맥만 지원했다. 설치 중에 온갖 확장 프로그램들을 설치해서 마음에 안들긴 했지만, 다운로드는 성공할 것 같아서 일단 실행했다. 이걸 찾다보니 어느덧 새벽 2시. 다운로드 걸어놓고, 다운로드 완료 시 컴퓨터를 종료시키는 옵션을 켠 뒤 잠을 잤다. 같은날 오전 일어나서 확인을 해보니 비디오 파일 2500개, 오디오 파일 2500개를 모두 받는데 성공하였다.

     

    드디어 5000개를 모두 받았다.

    폴더가 2개인 이유는 한 폴더는 비디오, 다른 한 폴더는 오디오만 저장해서 그렇다.

     

     

    이제 다운로드 받은 파일들을 합치기만 하면 된다.

     

    여담

    대체 wget을 배치파일로 실행 시키면 왜 안되는 걸까? 주소가 너무 길어서 그런가? 혹시나 해서 google.com 을 다운로드 시켜보니, 얘는 잘 받았다. 403 오류가 주소와 관련있는 것 같은데, 정확한 이유를 모르겠다. bat파일로 실행하면 주소가 잘리거나 인코딩때문에 뭐가 달라지나?

     

    출처

    유튜브 로고: https://www.youtube.com/intl/ko/yt/about/brand-resources/

     

     

    [본문에 사용된 SVG 파일]

    yt_icon_cymk.svg



    1. 5시간전 까지 다시보기를 할 수 있는 기능. [본문으로]
    2. 예를 들어 1시간 30초 일때의 오디오 파일은 videoplaybackjipgef 이면 비디오 파일은 videoplaybackrejfpfe [본문으로]
    3. 유튜브 다운로드 주소가 255자를 넘어간다. (거의 700자) 그리고 윈도우에서는 그정도로 길게 파일명을 저장할 수 없어서 오류가 난다. [본문으로]

    댓글

어제는 이곳에 명이 다녀갔습니다.

Powered & Designed by Tistory