이러한“YouTube에서 비디오 저장”서비스는 어떻게 작동합니까?


62

내 말은, 그들은 일반적으로 어떻게 작동합니까? 동영상 플레이어 자체 (Flash 플레이어가 포함 된 페이지뿐만 아니라)에 대한 링크를받는 방법은 무엇입니까?

나는 웹에서 검색을했지만 유용한 것을 찾을 수 없었습니다 (모든 링크는 그러한 서비스를 가리 키지 만 실제로는 어떻게 구현되는지는 알 수 없습니다).

답변:


51

라는 매우 인기있는 오픈 소스 명령 줄 다운로더 youtube-dl가 있습니다. 특정 YouTube 링크 또는 Yahoo! Vimeo와 같은 인기있는 웹 비디오 사이트에서 실제 비디오 및 오디오 파일 링크를 가져옵니다. 비디오, uStream 등

어떻게되는지 확인하려면 YouTube 추출기를 살펴보세요 . 여기에 표시하기에는 너무 많습니다. 더 간단한 사이트를위한 다른 추출기가 존재 합니다 . Steven Penny는 YouTube를위한 간단한 JavaScript 다운로더도 가지고 있습니다.

그러나 기본적으로 Flash 비디오 플레이어의 경우 일부 JavaScript를 통해 초기화하고 구성해야합니다. 간단히 말해 Flash 객체의 플레이어는로드 할 비디오 스트림의 URL을받습니다.

비디오 스트림을 찾으려면 비디오 페이지의 HTML 및 JS 코드를 구문 분석하여 관련 초기화 코드를 찾은 다음 실제 MP4 파일에 대한 링크를 찾아보십시오. 일반 텍스트로 표시 될 수도 있지만 특정 다운로드 토큰을 사용하여 즉시 생성 될 수도 있습니다. 종종, 자바 스크립트는 재 설계하기 어렵게하기 위해 난독 화되기도합니다. 또는 비디오 정보가 JS에 의해 비동기식으로로드되는 XML 파일에 포함될 수 있습니다.

HTML5 점진적 다운로드 비디오의 경우 실제 소스 파일은 일반적으로 태그 의 source하위에 직접 언급 video되므로 페이지를 검색 mp4하거나 유사하게 검색하십시오 . 예를 들어 독일 뉴스 쇼 Tagesschau 100 에서 다음을 찾을 수 있습니다.

<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">

자세한 내용은 고급 재생 기술 의 MPEG DASH 또는 애플의 HTTP 라이브 스트리밍 (HLS)와 같은, 당신은 실제 비디오 스트림을 얻을 수있는 메타 정보 파일을 구문 분석해야합니다. 메타 파일 ( .mpd예 : DASH 및 .m3u8HLS 용)에는 비디오 및 오디오 세그먼트에 대한 링크가 포함되며 나중에 재생 가능한 파일을 얻기 위해 결합해야합니다.

이에 대한 일반적인 해결책은 없습니다. 대상 사이트를 신중하게 검사하고 디버깅해야합니다.


3
한 가지 질문은 이것에 대한 Youtube / Google의 정책은 무엇입니까? 그들은 이것으로 괜찮습니까, 그렇지 않습니까?
JMK

31
§5.1.L 의 YouTube 서비스 약관은 스트리밍 이외의 다른 수단을 통한 콘텐츠 소비를 허용하지 않으므로 이론적으로는 허용되지 않습니다. 실제로, 그들은 그것을 시행 할 수 없습니다. 모든 다운로더는 스트리밍 중임을 시뮬레이션 할 수 있습니다.
slhck 2016 년

2
@StevenPenny 축소되지 않은 버전이 있습니까?
TankorSmash

5
@slhck Flash는 자체적으로 HTTP 요청을 만들 수도 있습니다. 대신 브라우저의 HTTP 엔진을 사용합니다. Flash 자체에서 요청한 경우 브라우저에 "보이지"않을 것입니다. 물론 광고주에게 좋을 것입니다. ;)
Daniel B

3
@slhck 그들은 프로그래밍 방식으로 시행 할 수 없지만 , 변호사 팀을 퇴출시키는 경우 합법적으로 시행 할 있습니까?
Cruncher 2016 년

35

YouTube 북마크

이것이 내가 JavaScript로 한 방법입니다

ytplayer.config.args객체로 시작하십시오 . 동영상의 모든 URL이 포함되어 있습니다. 그것은로 나뉩니다

url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts              // DASH: contains video or audio stream

이들 각각은 "스트림 개체"라고하는 쉼표로 구분 된 배열입니다. 각 "스트림 객체"에는 다음과 같은 값이 포함됩니다

url  // direct HTTP link to a video
itag // code specifying the quality
s    // signature, security measure to counter downloading

각 URL 은 인코딩 되므로 디코딩해야합니다. 이제 까다로운 부분입니다.

YouTube는 동영상 보안 수준이 3 이상입니다.

unsecured // as expected, you can download these with just the unencoded URL
s         // see below
RTMPE     // uses "rtmpe://" protocol, no known method for these

RTMPE 비디오는 일반적으로 공식 전체 길이 영화에 사용되며 SWF 확인 유형 2로 보호됩니다. 2011 년 이래로 개발되었으며 아직 리버스 엔지니어링되지 않았습니다.

유형 "s"비디오는 실제로 다운로드 할 수있는 가장 어렵습니다. VEVO 비디오 등에서이 내용을 볼 수 있습니다. 그들은 같은 서명으로 시작

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

그런 다음 서명은 다음과 같은 기능으로 스크램블됩니다.

function mo(a) {
  a = a.split("");
  a = lo.rw(a, 1);
  a = lo.rw(a, 32);
  a = lo.IC(a, 1);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 44);
  return a.join("")
}

이 기능은 동적이며 일반적으로 매일 변경됩니다. 더 어렵게하기 위해 함수는 다음과 같은 URL에 호스팅됩니다.

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js

이것은 동일 출처 정책 의 문제를 소개합니다 . 기본적으로이 파일 www.youtube.com은 서로 다른 도메인이므로이 파일을 다운로드 할 수 없습니다 . 이 문제의 해결 방법은 CORS 입니다. CORS를 사용하면 s.ytimg.com이 헤더를 추가 할 수 있습니다

Access-Control-Allow-Origin: http://www.youtube.com

자바 스크립트를에서 다운로드 할 수 있습니다 www.youtube.com. 물론 그들은 이것을하지 않습니다. 이 해결 방법의 해결 방법은 CORS 프록시를 사용하는 것입니다. 이것은 모든 요청에 ​​다음 헤더로 응답하는 프록시입니다.

Access-Control-Allow-Origin: *

이제 JS 파일을 프록시하고 서명을 스크램블하는 함수를 사용 했으므로 querystring에서이를 사용하여 비디오를 다운로드 할 수 있습니다.


1
YouTube 플레이어가 미디어 표현에서 요청할 바이트 범위를 어떻게 결정하는지 알고 있습니까 (DASH 재생 용)? MPD 파일은 세그먼트 만 나열합니다.
slhck

2
정확히는 아닙니다. 비디오 및 오디오 용 단일 파일이 있지만 YouTube는 바이트 단위로 여러 청크 단위로 파일을 요청합니다. 다른 품질로 전환하면 바이트 범위도 변경됩니다. 플레이어가 어떤 바이트가 어떤 바이트 오프셋에 해당하는지 어떻게 알 수 있는지 궁금합니다.
slhck

1
s유형 비디오 및 RTMPE유형 비디오 의 예를 들어 줄 수 있습니까 ?
클로이

@SurajJain 여기에 새로운 페이지가 있습니다-다른 방법을 사용함에 따라이
Steven Penny

이 링크는 404를 제공합니다. 리포지토리를 제거하셨습니까?
darksoulsong

1

내 대답 : 2019 년 1 월 22 일부터 사용자 정보를 연결하지 않고 우회하려고하면 이러한 방법을 사용할 수 있습니다.

왜? 이 플랫폼을 처음 사용하는 사용자이므로 @ Daniel-B에 지정된 규칙에 대해서는 언급 할 수 없습니다 . 6.1 달러 미만의 YouTube에 대한 새로운 ToS (독일에있는 독일어로 번역 해주세요)에 따르면 다음과 같습니다.

귀하는 자동화 된 시스템 (로봇, 스파이더 또는 오프라인 리더를 포함하되 이에 국한되지 않음)이 웹 사이트에 액세스하여 YouTube가 지정된 시간 내에 서버에 더 많은 요청을하여 공개적으로 이용 가능한 수정되지 않은 표준 웹 브라우저를 사용하여 동일한 기간 내에 인간;

이제 각 요청에 대한 시간을 파악하고 위반 여부를 추적 할 수 있습니다. 이 시나리오와 VPN을 사용하여 사용자의 세부 정보를 서비스에 연결하지 않고 자신을 보호하더라도 외부 IP 주소를 알면 어떻게 될 수 있습니까?


1
미래에서 온 여행자를 환영합니다 ... 이것이 저자의 질문에 어떻게 대답하는지 명확하지 않습니다
Ramhound

특정 답변과 관련하여 저자에게 경고를하려면 의견을 제출하고 법적 문제로 인해 도움이되지 않았다고 생각되는 답변은 모두 공감해야합니다. 이 답변은 토론 포럼에서 찾을 수있는 것과 비슷하며, 수퍼 유저는 토론 포럼이 아닙니다
Ramhound
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.