Auto hide next up card for Amazon Prime Video v2.7.0 リリース

JavaScriptchat_bubble3

Amazon Prime VideoのNext up等の邪魔な要素を非表示にする「Auto hide next up card for Amazon Prime Video v2.7.0」をリリースしました。

v2.6.0からの変更点

  • xhookが無効な状態で開始できるように
  • xhookを使用する機能の項目をオプションダイアログの下部に移動
  • xhookを使用してNext upを無効化する機能をデフォルトで無効に変更
  • オプションダイアログ内でツールチップのある項目が分かりやすくなるように改善
  • 強制的に最高画質で再生する機能を追加(xhookを使用)
  • 自動再生のフラグをtrueに変更する機能を追加(xhookを使用)
  • プロフィールアイコンの隣にもオプションアイコンを表示するように
  • コンテキストメニューからオプションダイアログを開けるように(拡張機能の場合)
  • ユーザースクリプトのメニューからオプションダイアログを開けるように

v2.6.0の記事のコメント欄でも触れていますが、通信を監視・改変する機能を実装するためにxhookというライブラリを採用した結果として問題が発生していました。(そのためChromeウェブストア、AMO、Greasy Forkではv2.6.0.1としてv2.5.2にロールバックするという処置を取りました。)

どうもxhookが有効な状態ではプライムビデオの先読みの挙動に影響が出るようで、問題というのは再生開始から少しの間は最低画質で再生されてしまうというものです。プライムビデオは各解像度・品質の動画(mp4)の情報をmpd(xml)形式で配信し、再生時はウィンドウサイズやネットワークの状態を判定基準として再生対象のmp4が動的に切り替わるという仕様なのですが、なぜかxhookを有効にすると再生開始から少しの間の分の先読みでだけ最低画質が取得されてしまうようです。xhookの仕組みがプライムビデオのコンテンツ保護的な仕様に引っかかったのかもしれません。

その問題に対処するための機能がv2.7.0で追加した「強制的に最高画質で再生する機能」ですが、そもそもxhookがデフォルトで有効になっているという状態をなんとかしたかったので、デフォルトではxhookは有効にせず必要な時にだけ有効にするという実装に変更しました。これはStack Overflowの情報と、Amazon Prime Video 1080pという拡張機能の実装が参考になりました。

最終的にはAmazon Prime Video 1080pと同じようにxhookをインラインスクリプトとして実行することに決定しました。v2.6.0ではコンテンツスクリプトのworldの設定をMAINにする方法を採用していましたが、そうするとそのコンテンツスクリプト内で拡張機能用のAPIが使用できないというデメリットがあり、それだと将来的に困る可能性がある、というのがインラインスクリプトの方式を採用した主な理由です。

ちなみにxhookをデフォルトで無効にするだけならworldの設定がMAINのままでも可能ではありました。xhookには有効と無効のための関数enable()とdisable()があり、xhookがデフォルトで有効になっているのは内部でenable()が実行されているためです。なのでそこを削除するかコメントアウトするだけでxhookはデフォルトで無効な状態となります。ただ先述の理由があってそちらの対処方法は採用しませんでした。

xhookの実装についてはここまでとして、強制的に最高画質で再生する機能ですが、これはmpd内の動画情報のリストから最高画質の情報以外を削除するというシンプルな方法で実現しています。Amazon Prime Video 1080pやPrime Video (JP) Select Always Best Qualityの実装も参考にしつつ自分なりに実装しました。

なおプライムビデオは視聴環境のOSやブラウザ次第で画質を制限します。強制的に最高画質で再生する機能はあくまでもプライムビデオが提供している範囲内で最高画質を強制する機能であり、画質の制限を回避することはできません。制限についてはプライムビデオのヘルプ「パソコンでのPrime Videoシステム要件」をご確認ください。

自動再生のフラグをtrueに変更する機能は、各視聴環境の都合で自動再生の設定をオンにしたくてもできない人向け、という考えで実装しました。自動再生がオフでも自動再生関連のデータは取得されるので、単純にフラグを切り替えるだけで自動再生が動作するようになります。プライムビデオ側の自動再生の設定は変更されないので、PCのブラウザでだけ自動再生を活用、ということが実現できます。

オプションアイコンについてですが、画面右上のプロフィールアイコンの横にも表示するようにしました。また、Chrome/Firefoxの拡張機能ではコンテキストメニューから、ユーザースクリプトではユーザースクリプトのメニューからオプションダイアログを開けるようにもしました。これまで以上にオプションダイアログにアクセスしやすくなったと思います。

ブラウザ拡張機能

藤乃音りょう