흐음...

여러개 패킷을 까본건 아니지만 캐시에서 다른걸로 인식하는 이유가 저 망할 cpn 값 때문인 듯..

https://r2---sn-ab02a0nfpgxapox-jwwe7.googlevideo.com/videoplayback?source=youtube&ms=au%2Conr&mt=1552538122&

mv=m&id=o-ALgIWMfOrFHHMwZnmn-TneMiQB_DBuam4C3gy0uXrNt3&requiressl=yes&dur=478.244&mm=31%2C26&

mn=sn-ab02a0nfpgxapox-jwwe7%2Csn-oguelne7&pl=22&ip=211.237.16.76&

sparams=aitags%2Cclen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&signature

=E9FA7DEB837FF2931C1BBDF8A75CC08AA6381D.553ACDD01BBD44D14946BB8D37C5B285DD807580&gcr=kr

&ipbits=0&expire=1552559810&lmt=1548316020126515&initcwndbps=728750&

aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C394%2C395%2C396%2C397&

mime=video%2Fmp4&itag=396&key=yt6&gir=yes&clen=16011686&keepalive=yes&txp=5532432&fvip=2&

ei=YtqJXMbHJKeGs8IPgp6B4AQ&

c=WEB&alr=yes&

cpn=zCV8-pls_I8uiHHw&

cver=2.20190313&

range=0-90603&

altitags=395%2C394&rn=1&rbuf=0

https://r2---sn-ab02a0nfpgxapox-jwwe7.googlevideo.com/videoplayback?source=youtube&ms=au%2Conr&mt=1552538122&

mv=m&id=o-ALgIWMfOrFHHMwZnmn-TneMiQB_DBuam4C3gy0uXrNt3&requiressl=yes&dur=478.244&mm=31%2C26&

mn=sn-ab02a0nfpgxapox-jwwe7%2Csn-oguelne7&pl=22&ip=211.237.16.76&

sparams=aitags%2Cclen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&signature

=E9FA7DEB837FF2931C1BBDF8A75CC08AA6381D.553ACDD01BBD44D14946BB8D37C5B285DD807580&gcr=kr

&ipbits=0&expire=1552559810&lmt=1548316020126515&initcwndbps=728750&

aitags=133%2C134%2C135%2C136%2C160%2C242%2C243%2C244%2C247%2C278%2C394%2C395%2C396%2C397&

mime=video%2Fmp4&itag=396&key=yt6&gir=yes&clen=16011686&keepalive=yes&txp=5532432&fvip=2&

ei=YtqJXMbHJKeGs8IPgp6B4AQ&

c=WEB&alr=yes&

cpn=naxiChjHuGyejORl&

cver=2.20190313&

range=0-90603&

altitags=395%2C394&rn=1&rbuf=0


[링크 : https://www.youtube.com/watch?v=lBSC3rUWGtY]


+

크롬에서 개발자도구로 검색해보니 base.js 에서 cpn을 생성하는 부분을 발견..

Client Playback Nonce 줄여서 cpn

g.h.Wj = function(a) {

        lja(this, a);

        if ("html5.invalidstate" != a.errorCode && "fmt.unplayable" != a.errorCode && "fmt.unparseable" != a.errorCode || !WI(this, a.errorCode, a.details)) {

            var b = /^pp/.test(this.g.clientPlaybackNonce);

            if (kja(a)) {

                a.details.sts = "17968";

                if (YI(this)) {

                    g.U(this.l, 4) || !this.fa("html5_suspended_reload_killswitch") && g.U(this.l, 512) ? (this.Mc = !0, cI(this)) : (this.o && (a.g && (a.details.e = a.errorCode, a.errorCode = "qoe.restart", a.g = !1), this.o.onError(a.errorCode, Tw(a.details))), ZI(this));

                    return

                }

                a: if (!(6048E5 >

                        g.P() - this.A.vh)) {

                    try {

                        window.location.reload(!0);

                        break a

                    } catch (c) {}

                    this.fa("tvhtml5_retire_old_players") && g.Iy(this.A) && aJ(this)

                }

            }

            if ($I(a) && this.g.va && this.g.va.i) {

                if (this.o) this.o.onError(a.errorCode, Tw(a.details));

                this.Ya("highrepfallback", "1", !0);

                !this.fa("html5_hr_logging") && /^hr/.test(this.g.clientPlaybackNonce) && btoa && this.Ya("afmts", btoa(this.g.adaptiveFormats));

                zha(this.g);

                aI(this);

                cI(this);

                VI(this);

                this.playVideo()

            } else a.g ? (b = this.u ? this.u.B.o : null, b = $I(a) && b && b.isLocked() ? "FORMAT_UNAVALIABLE" :

                void 0, g.lI(this, a.errorCode, b, Tw(a.details))) : this.o && (this.o.onError(a.errorCode, Tw(a.details)), b && "manifest.net.connect" == a.errorCode && (a = "https://www.youtube.com/generate_204?cpn=" + this.g.clientPlaybackNonce + "&t=" + g.P(), (new IF(a, "manifest", (0, g.y)(function(c) {

                this.Ya("pathprobe", c)

            }, this), (0, g.y)(function(c) {

                this.onError(c.errorCode, Tw(c.details))

            }, this.o))).send()))

        }

    }; 


Posted by 구차니


아래의 안전 모드 : 설정을 클릭하여 사용하지 않음으로 바꾸면 동영상을 볼 수 있다.
(19금이라던가 여러가지 sensorship 관련 제한을 필터링 해주는 옵션인듯)


[링크 : http://blog.naver.com/hahaj1/20109681239]
Posted by 구차니
예전에 만들어 놓은 gdata 모듈이 작동이 안된다는 제보가 들어와서 분석을 해보니

 img.src = 'http:\/\/v14.lscache7.c.youtube.com\/generate_204?ip=118.0.0.0& ...
 "fmt_map": "34\/640x360\/9\/0\/115,5\/320x240\/7\/0\/0"

다른건 차이가 없는데 이런식으로 escape 문자들이 추가되었다.
음.. 웹표준 준수하려고 생긴 변화인가? 아무튼 escape 문자를 왜 / 에 쓰는지 알수는 없지만 이런 변화가 생겼다.
Posted by 구차니

예전에는(불과 한달전!) content가 feed - content 였는데 이제는 바뀌어서
feed - media:group - media:description에 들어있다.

2010/04/09 - [프로그램 사용/유튜브(youtube)] - youtube xml / RSS 주소

Posted by 구차니
언어는 &hl
국가는 &gl 로 변수를 넘겨준다.
(웹상에서 언어를 변경할때는 이렇게 되는데 RSS Feed에는 영향을 미치지 못하는 것으로 보인다.)

http://gdata.youtube.com/feeds/api/standardfeeds/regionID/feedID?v=2

http://gdata.youtube.com/feeds/api/standardfeeds/ko/top_rated
위의 주소는, 한국의 top rated를 받아오는 방법이다.

Country Region ID
Australia AU
Brazil BR
Canada CA
Czech Republic CZ
France FR
Germany DE
Great Britain GB
Holland NL
Hong Kong HK
India IN
Ireland IE
Israel IL
Italy IT
Japan JP
Mexico MX
New Zealand NZ
Poland PL
Russia RU
South Korea KR
Spain ES
Sweden SE
Taiwan TW
United States US

[링크 : http://code.google.com/intl/ko-KR/apis/youtube/2.0/reference.html]

http://gdata.youtube.com/schemas/2007/categories.cat?hl=<LANGUAGE>
위의 내용은, 스키마를 언어별로 받아오는 것이다.
간단하게 카테고리별 문자열을 구글에게서 받아올수 있다.(내부적인 번역이 필요없다!)

Language/Locale hl Parameter Value
Chinese (Traditional) zh-TW
Czech cs-CZ
Dutch nl-NL
English (Great Britain, Ireland, Australia and New Zealand) en-GB
English (United States and Canada)
* default value
en-US
French fr-FR
German de-DE
Italian it-IT
Language/Locale hl Parameter Value
Japanese ja-JP
Korean ko-KR
Polish pl-PL
Portuguese (Brazil) pt-BR
Russian ru-RU
Spanish (Spain) es-ES
Spanish (Mexico) es-MX
Swedish sv-SE

[링크 : http://code.google.com/intl/ko-KR/apis/youtube/2.0/reference.html]

Posted by 구차니
http://gdata.youtube.com/feeds/api/
에서 XML 파일을 받으면 기본적으로

<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>

첫번째 페이지, 25개 항목을 받아오도록 되어있다.
즉, 인자를 넘겨주면 다른 값을 볼수도 있다는 의미!

<link rel='previous' type='application/atom+xml'
  href='http://gdata.youtube.com/feeds/api/videos?start-index=1&max-results=25...'/>
<link rel='next' type='application/atom+xml'
  href='http://gdata.youtube.com/feeds/api/videos?start-index=51&max-results=25...'/>

[링크 : http://code.google.com/intl/ko-KR/apis/youtube/2.0/reference.html]


2010.05.07 추가
start-index 는 대소문자 구분하며, 1 부터 시작한다.

'프로그램 사용 > 유튜브(youtube)' 카테고리의 다른 글

youtube api 변동으로 인한 content 태그 변경  (0) 2010.05.13
youtube locale 관련  (0) 2010.04.20
youtube html5  (2) 2010.04.17
Percent encoding = URL Encoding  (0) 2010.04.16
유튜브 fmt 와 t 값  (0) 2010.04.15
Posted by 구차니
http://www.youtube.com/html5 로 접속하면 html5 베타를 사용하도록 하는 옵션이 존재한다.

YouTube HTML5 동영상 플레이어

YouTube에서 HTML5를 지원하기 위한 선택적 시험 기능입니다. 지원되는 브라우저를 사용 중인 경우 대부분의 동영상에 Flash Player가 아닌 HTML5 플레이어를 사용하도록 선택할 수 있습니다..


지원되는 브라우저

YouTube는 현재 HTML5의 동영상 태그와 h.264 동영상 코덱을 모두 지원하는 브라우저를 지원합니다. 지원되는 브라우저는 다음과 같습니다.


업데이트

  • 2010년 1월 17일: 전체화면 지원 사용(브라우저에서 지원하는 경우).


추가 제한사항(해결 중)

  • 광고가 포함된 동영상은 지원되지 않습니다(Flash Player에서 재생).
  • 전체화면은 지원되지 않습니다.
  • 다른 TestTube 시험기능을 선택하면 HTML5 플레이어를 가져올 수 없습니다(Feather는 지원됨).

그런데.. Firefox 는 아직이구나..OTL 털썩
그래서 일단은 Google Chrome으로 접속!

위는 HTML5에서 동영상 로딩시 나오는 화면
아래는 동영상 우클릭시 나오는 화면(일반 우클릭과 동일함)

화질이라던가 이런건 잘 모르겠고,
솔찍히 Flash와의 차이점은 눈에 띄지는 않는다.(사용자 측면에서 동일하게 동영상은 나오니까.)

크롬 - 플래시

파이어폭스 - 플래시

크롬 - HTML5

후처리 문제인지는 모르겠지만, 360p에서 자막을 알아보기 힘들정도로 HTML5는 조금 안습상황이다.

'프로그램 사용 > 유튜브(youtube)' 카테고리의 다른 글

youtube locale 관련  (0) 2010.04.20
youtube gdata 검색관련  (0) 2010.04.20
Percent encoding = URL Encoding  (0) 2010.04.16
유튜브 fmt 와 t 값  (0) 2010.04.15
VLC에서 youtube 동영상 재생하기  (2) 2010.04.13
Posted by 구차니
공백은 +
isalnum()으로 걸러질넘들은 그대로 출력

그리고 변환시에는 무조건 "%%%02X" 형식으로 출력된다.
즉, encoding이나 decoding 시에 %[0-9a-f][0-9a-f] 인지 확인이 필요할듯 하다.



RFC 3986 section 2.2 Reserved Characters (January 2005)
! * ' ( ) ; : @ & = + $ , / ? % # [ ]

Reserved characters after percent-encoding
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
%21 %2A %27 %28 %29 %3B %3A %40 %26 %3D %2B %24 %2C %2F %3F %25 %23 %5B %5D

Other common characters after percent-encoding
< > ~ . " { } | \ - ` _ ^
%3C %3E %7E %2E %22 %7B %7D %7C %5C %2D %60 %5F %5E

RFC 3986 section 2.3 Unreserved Characters (January 2005)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

replacing spaces with "+" instead of "%20"

[링크 : http://en.wikipedia.org/wiki/Percent-encoding]


'프로그램 사용 > 유튜브(youtube)' 카테고리의 다른 글

youtube gdata 검색관련  (0) 2010.04.20
youtube html5  (2) 2010.04.17
유튜브 fmt 와 t 값  (0) 2010.04.15
VLC에서 youtube 동영상 재생하기  (2) 2010.04.13
URL encoding / decoding 관련 함수들  (2) 2010.04.13
Posted by 구차니
wget으로 손쉽게 다운로드 받는방법중에 찾은건 &t 값이 필요하다.
token 인지 table 인지는 모르겠지만, 이 값을 받을려고 동영상 페이지 300k 가량하는걸 받기도 모호하고
이래저래 찾아보는데 편하게 받는 법은 없는듯 하다.

http://www.youtube.com/v/BzbbpxR7ZTc
이런식으로 열면 리턴 URL로 t 값이 주어진다는데 오지도 않고..
정작 받아도 이상한 바이너리 파일이라.. 안드로메다로.. OTL

Firefox에서 열면 플래시인지 바로 전체화면(!) 플래시무비가 나온다.

유투브 H.264 인코딩 동영상 소스
요청 URL : http://www.youtube.com:80/get_video?video_id=[비디오ID]&t=[트랙 or 테이블 값]&fmt=18

파라미터
   - 비디오 아이디 : 유투브 검색 API로 쉽게 비디오 ID를 얻을 수 있습니다.
   - 트랙 or 테이블 값
      http://www.youtube.com:80/v/[비디오ID] 로 쿼리를 요청하면 Respone URI안에 t값이 포함되어져 있습니다.
   - fmt=18 : 이 파라미터를 붙이면 H.264 동영상 소스가, 붙이지 않으며 FLV 소스가 날라옵니다.

[링크 : http://blog.naver.com/cybersol/10029106108]

Fmt ID

포멧

픽셀 해상도

비디오 코덱

음성 코덱

해상도

비 고

fmt=0 

flv

320x240

flv1

mp3 1.0 22KHz

[ ]

( fmt=5와 같음)

fmt=5 

flv

320x240

flv1

mp3 1.0 22KHz

[small ]

 

fmt=6 

flv

480x360

flv1

mp3 1.0 44KHz

[ ]

(No more...)

fmt=13 

3gp

176x144

H263

AMR 2.0 8KHz

[ ]

(핸드폰 용)

fmt=17 

3gp

176x144

mpg4

AAC 1.0 22KHz

[ ]

(핸드폰 용)

fmt=18 

mp4

480x360

H264

AAC 2.0 44KHz

[large ]

 

fmt=22 

mp4

1280x720

H264

AAC 2.0 44KHz

[HD720 ]

 

fmt=34 

flv

640x480

H264

AAC 2.0 44KHz

[medium]

(기본값)

fmt=35 

flv

854x640

H264

AAC 2.0 44KHz

[large ]

 

fmt=37 

mp4

1920x1080

H264

AAC 2.0 44KHz

[HD1080]

 

[링크 : http://bluemarble.tistory.com /entry/YouTube-비디오-다운로드]

fmt는 format의 약자로, 모바일 기기나 임베디드 기기에서
특정 코덱만을 지원할 경우, 원하는 코덱/해상도를 선택하는데 이용될수 있다.
(전에 이 파일을 그렇게 찾았는데 블로그 폭발시켰는지 안떠서 OTL)

[링크 : http://hallang.tistory.com/218]

Comparison of YouTube media types

Standard Medium High 720p 1080p Mobile Old formats (pre Feb 2009)
Standard High Mobile
fmt value 34 18 35 22 37 17 0, 5 6 13
Container FLV MP4 FLV MP4 3GP FLV 3GP
Video Encoding MPEG-4 AVC (H.264) MPEG-4 Visual H.263
Aspect ratio 4:3, 16:9 16:9 11:9 4:3 11:9
Max Resolution 320×240
400×226
640×360
480×270
480×360
640×480
854×480
1280×720 1920×1080 176×144 320×240 480×360 176×144
Audio Encoding AAC MP3 AMR
Channels 2 (stereo) 1 (mono)
Sampling rate (Hz) 44100 22050 44100 8000

[링크 : http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs]


Posted by 구차니
저번에 안되도록 막힌 방법처럼 간단하진 않지만.
어쩌면 구식 방법으로 다운로드 하는것과 유사한 방법으로 VLC에서 동영상 재생이 가능한 방법이다.

1. video ID를 알아낸다.
2. token을 알아낸다.
3. vlc에 네트워크 스트림에 붙여넣는다.
http://www.youtube.com/get_video?video_id=[video_id]&t=[token_value]

video ID는 주소표시줄에 나오지만,
token은 그 페이지에서 java script중에 &t= 으로 검색하면 나온다.

2010/04/13 - Dreambox youtube VLC
Posted by 구차니