JavaScriptを有効にしてください

アニメ、映画同時視聴のためのChrome拡張開発②

JavascriptでYouTubeを操作する

 ·  ☕ 2 分で読めます
Photo by freestocks.org from Pexels

Photo by freestocks.org from Pexels

アニメ、映画同時視聴のためのchrome拡張「StreamSync」開発

前回の記事はこちら
StreamSync – アニメ、映画同時視聴のためのChrome拡張開発① | ひとりごと2.0

開発中のレポジトリはこちら

今回のお題

Youtubeのサイト上で再生されている動画を、Javascriptで制御する

Youtubeのばあい

const video = document.getElementsByClassName('video-stream html5-main-video')[0];

// 再生
video.play();

// 一時停止
video.pause();

// 再生地点の取得
video.currentTime;

// 10秒進む
video.currentTime += 10;

// 10秒戻る
video.currentTime -= 10;

// シーク(例:1分地点)
video.currentTime = 60;

document.getElementsByClassName('video-stream html5-main-video')[0]; で、現在再生されているyoutube動画のvideoタグを取得する。

videoタグはhtml5で登場した新しいタグだが、videoタグには便利なメソッドが色々実装されている。play(), pause()など
videoタグ自体はオープンな規格なのでyoutube以外のサイトでもvideoタグが取得できれば同様の形で操作できる・・・はず。

試しにChromeでyoutubeの動画を開き、右クリックから「検証」でdevtoolを起動する。
consoleタブに移動して上記のコードを実行してみると、動画を操作することができる。

Netflixのばあい

netflixの場合は、youtubeのようにvideoタグから操作しようとするとエラーが吐かれる。
netflix独自のAPIを使うのが得策のよう。

const player = netflix.appContext.state.playerApp.getAPI().videoPlayer;
const sessionId = player.getAllPlayerSessionIds()[0];
const video = player.getVideoPlayerBySessionId(sessionId);

// 再生
video.play();

// 一時停止
video.pause();

// 再生地点を取得
video.getCurrentTime(); // ミリ秒を返す

// シーク(例:1分地点)
video.seek(60000);

使いみち

StreamSyncでは、ホスト(すなわち同時視聴配信の配信主)とクライアント(視聴者)が見る動画の再生タイミングを同期するのが主要機能となる。
よってブラウザで再生中のyoutube、netflix、amazon primeなどのストリーミング動画の再生地点の取得とシークをプログラマブルに制御することが肝になってくる。

いま開発中のStreamSyncではこのあたりで使っている。
streamsync/stream.js

次回に続く

共有