YouTube

【手動】Youtubeの動画の.m3u8ファイルURLを取得する


はじめに

Youtubeのライセンス無し動画のみ取得できます。

kitoko552さんのこちらの記事を参考にしました。

本当にありがとうございます。

YouTube動画のm3u8URLを取得する


.m3u8とは


.m3uとは『マルチメディアプレイリストのファイルフォーマット』である。 ... m3u8は、UTF-8(BOMB無し)で作成する事を明示的にした形式。 根本的にはm3uとm3u8は同じ物。 このファイルに分割されたtsファイルのパスを記述していくことで、複数のファイルを一つのファイルとして再生する事が出来る。


要は動画そのものではなく、動画にアクセスするために必要な情報が含まれているファイルみたいです。

Youtube動画の.m3u8ファイルには解像度ごとのデータも含まれていました。


手動で取得する


ほしいYoutubeのリンクを持ってくる

ライセンス無しの動画を見つけましょう。

とりあえず著作権フリーの動画があったので今回はそれを使います。


欲しい動画のURL

https://www.youtube.com/watch?v=rvkxtVkvawc


URL内の最後のv=の部分が動画IDになります。


動画ID

rvkxtVkvawc



infoファイルを取得する

まず.m3u8ファイル含めて動画の情報が記載されてるinfoファイルを取得します。

infoファイルは以下のリンクで取得できます。

https://www.youtube.com/get_video_info?video_id={videoId}

この{videoId}の部分を欲しい動画の動画IDに書き換えてアクセスします。

このとき、ブラウザによっては必要な情報が入ってないので注意してください。

SafariはいけましたがChromeはダメでした。

https://www.youtube.com/get_video_info?video_id=rvkxtVkvawc

するとこんなテキストファイルがダウンロードされたかと思います。


length_seconds=25&cr=JP&player_response=%7B%22playabilityStatus%22%3A%7B%22status%22%3A%22OK%22%2C%22playableInEmbed%22%3Atrue%7D%2C%22streamingData%22%3A%7B%22expiresInSeconds%22%3A%2221540%22%2C%22formats%22%3A%5B%7B%22itag%22%3A17%2C%22url%22%3A%22https%3A%2F%2Fr3---sn-nvoxu-ioqe7.googlevideo.com%2Fvideoplayback%3Fmv%3Dm%5Cu0026mt%3D1547889191%5Cu0026ms%3Dau%252Crdu%5Cu0026signature%3D86F9BEA143E241DB3AF5F7CDBEAAF7362632A37D.D8925F7E22B2F281598EE57BBB3DA284954ACC7B%5Cu0026mn%3Dsn-nvoxu-ioqe7%252Csn-oguesnze%5Cu0026mm%3D31%252C29%5Cu0026c%3DWEB%5Cu0026fvip%3D3%5Cu0026expire%3D1547910870%5Cu0026key%3Dyt6%5Cu0026mime%3Dvideo%252F3gpp%5Cu0026ipbits%3D0%5Cu0026lmt%3D1542168296623039%5Cu0026itag%3D17%5Cu0026dur%3D25.123%5Cu0026pl%3D27%5Cu0026initcwndbps%3D1838750%5Cu0026source%3Dyoutube%5Cu0026requiressl%3Dyes%5Cu0026gir%3Dyes%5Cu0026txp%3D5431432%5Cu0026id%3Do-

...


この中から.m3u8で終わってhttpsで始まる部分を抜き取ります。


https%3A%2F%2Fmanifest.googlevideo.com%2Fapi%2Fmanifest%2Fhls_variant%2Fdover%2F11%2Fmv%2Fm%2Fmt%2F1547889191%2Fms%2Fau%252Crdu%2Fsignature%2F2844BAE6D0C4EB720447365A65CCE859CBB08A97.23AE1BFBF229BD768AD8C97BA6029A7790E3E19F%2Fmn%2Fsn-nvoxu-ioqe7%252Csn-oguesnze%2Fmm%2F31%252C29%2Ffvip%2F3%2Fhfr%2F1%2Fexpire%2F1547910870%2Ftts_caps%2F1%2Fkey%2Fyt6%2Fipbits%2F0%2Fhls_chunk_host%2Fr3---sn-nvoxu-ioqe7.googlevideo.com%2Fitag%2F0%2Fpl%2F27%2Finitcwndbps%2F1838750%2Fratebypass%2Fyes%2Fsource%2Fyoutube%2Frequiressl%2Fyes%2Ftx%2F23728348%2Fplaylist_type%2FDVR%2Fgo%2F1%2Fkeepalive%2Fyes%2Ftxs%2F9474469%252C23724088%252C23728348%252C23728352%2Fid%2Faef931b5592f6b07%2Fip%2F240d%253A1a%253Abb%253A2100%253A29a9%253A68a4%253A734a%253A199f%2Fsparams%2Fei%252Cgo%252Chfr%252Chls_chunk_host%252Cid%252Cinitcwndbps%252Cip%252Cipbits%252Citag%252Cmaudio%252Cmm%252Cmn%252Cms%252Cmv%252Cpl%252Cplaylist_type%252Cratebypass%252Crequiressl%252Csource%252Ctts_caps%252Ctx%252Ctxs%252Cexpire%2Fmaudio%2F1%2Fei%2FdupCXPbzCsj6qQHhi57IDA%2Ffile%2Findex.m3u8


まだ16進数化されてる文字コードが混じってしまっているので、必要なもののみ変換します。

こことか使うと楽です。

%3A -> :

%2F -> /
%25 -> %
%2C -> ,


https://manifest.googlevideo.com/api/manifest/hls_variant/dover/11/mv/m/mt/1547889191/ms/au,rdu/signature/2844BAE6D0C4EB720447365A65CCE859CBB08A97.23AE1BFBF229BD768AD8C97BA6029A7790E3E19F/mn/sn-nvoxu-ioqe7,sn-oguesnze/mm/31,29/fvip/3/hfr/1/expire/1547910870/tts_caps/1/key/yt6/ipbits/0/hls_chunk_host/r3---sn-nvoxu-ioqe7.googlevideo.com/itag/0/pl/27/initcwndbps/1838750/ratebypass/yes/source/youtube/requiressl/yes/tx/23728348/playlist_type/DVR/go/1/keepalive/yes/txs/9474469,23724088,23728348,23728352/id/aef931b5592f6b07/ip/240d%3A1a%3Abb%3A2100%3A29a9%3A68a4%3A734a%3A199f/sparams/ei,go,hfr,hls_chunk_host,id,initcwndbps,ip,ipbits,itag,maudio,mm,mn,ms,mv,pl,playlist_type,ratebypass,requiressl,source,tts_caps,tx,txs,expire/maudio/1/ei/dupCXPbzCsj6qQHhi57IDA/file/index.m3u8


これが欲しい動画の.m3u8ファイルのURLになります。

詳しく検証していませんが、数時間経つとこのリンクは使えなくなるので再度上記infoファイル取得の処理が必要になります。

なのでこの記事を上げる頃には 上記リンクだと403エラーが出るはずです。


さいごに

次はこのリンクを使って動画読み込んでみます。

->

AndroidでYoutubeの動画を再生する