Raspberry pi4 + Raspbian (2020-02-13 buster-full) で Amazon Prime Video など DRM コンテンツを再生するメモ

Raspberry pi4 (4GB) + Raspbian (2020-02-13-raspbian-buster-full) 環境がなかなか快適なので、リビングの TV に繋いでメディアプレイヤーとして利用しようとしたところ、Amazon Prime Video が「最新の Chrome に更新してください」的なエラーで再生できませんでした。

ググって対応方法を見つけたのですが、英語なので簡単にまとめておきます。

# 対応方法

まず、ターミナルを開いて以下を実行します。

```sh
curl -fsSL https://pi.vpetkov.net -o ventz-media-pi
sh ventz-media-pi
```

元ネタは [Raspberry Pi Netflix One Line Easy Install – along with Hulu, Amazon Prime, Disney Plus, HBO, Spotify, Pandora, and many others](https://blog.vpetkov.net/2020/03/30/raspberry-pi-netflix-one-line-easy-install-along-with-hulu-amazon-prime-disney-plus-hbo-spotify-pandora-and-many-others/) で、関連ポストも含め英語ですが親切に説明してくれています。必要でしたら参照してください。

Raspberry pi を再起動して、メニューに追加された ``Chromium (Media Edition)`` でブラウザを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/5a62d451-0877-e48f-6da0-4cd0046e3124.png)
あとは Amazon Prime Video を楽しむだけ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/29c0624a-d98b-1538-e453-26924ad5ba99.png)
試していませんが Hulu や Disney plus など DRM を利用している他のサービスも利用できるようになっているようです。

# Media Edition って何だろう？

新しく追加された ``Chromium (Media Edition)`` アイコンは、何が違うのでしょう？プロパティを見ると理解できます。
![2020-05-01-104330_590x411_scrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/2f5cec4b-414a-4462-07e5-1874f3922db7.png)
ポイントはコマンド欄で、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/10bac5f7-7a6b-e88a-0fca-d5f5783af3a4.png)

通常の ``Chromium ウェブ・ブラウザ`` アイコンだと以下のようなシンプルな記述が、

```
chromium-browser %U
```

``Chromium (Media Edition)`` アイコンだと以下のように記載されています。

```
chromium-browser %U --user-agent="Mozilla/5.0 (X11; CrOS armv7l 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36"
```

これはわりと一般的で、つまりはブラウザの User-Agent 偽装ですね。Web サイトに対して、自分を Chrome Web ブラウザだよ、と名乗るわけです。

# キーは DRM への対応

ただし、たぶん上記の User-Agent 偽装は、今回の対応の根本的な対応では無さそうです。

元の英語 Blog に詳しいのですが、**chromium-widevine** という機能、そしてそれを実装したlibwidevinecdm.so ライブラリが今回の最も重要なポイントなようです。最初に実行したシェルスクリプト (ventz-media-pi) を読むと、このライブラリをインストールしているのがわかります。

この機能(ライブラリ)ですが、DRM (Digital Rights Management) に関する機能なので、配布に制限があるものと思われます。なので OSS である Chromium には同梱して配布できないのではないかと。

より詳細が知りたい方は chromium-widevine でググると、いろいろ情報が出ています。 [chromium-widevineが読み込まれるまで](https://qiita.com/soebosi/items/b95c2661388835fced11) の記事はソースまで追って解説してくれています。

# 配布に関する追記(2020年5月6日)

[英語 Wiki](https://en.wikipedia.org/wiki/Widevine) の Criticism セクションに以下のように記載されていました。

> In 2019, a developer tried to bundle Widevine in an Electron/Chromium-based application for video playing and did not get any response from Google after asking for a license agreement, effectively blocking DRM usage in the project. He later got the reply:

>> I'm sorry but we're not supporting an open source solution like this
— [Google Widevine Support](https://blog.samuelmaddock.com/widevine/gmail-thread.html)

> The same happened to other Electron projects. Developers of a competing browser to Chrome, Brave (a fork of Chromium itself), also had issues when trying to get a license from Google.

ざっくり訳すとこんな感じです。

> 2019年に、ある開発者がビデオ再生のため Widevine を Electron/Chromium ベースのアプリケーションにバンドルしようとしましたが、ライセンス合意を求めたところ、Google からの応答がなく、プロジェクトにおける DRM の利用は結果的に諦めました。 後で以下のような返事がありました：

>> 「申し訳ありませんが、このようなオープンソースソリューションはサポートしていません」
— [Google の Widevine サポートからのメール](https://blog.samuelmaddock.com/widevine/gmail-thread.html)

> 同じことが Electron プロジェクトにも起こりました。Chrome と競合するブラウザの開発者である Brave (Chromium からのフォーク)も、Google からライセンスを取得しようとしたときに同様の問題に直面しました。

# 全画面表示の乱れについて

2020年8月11日の時点で、Amazon Prime Video の全画面表示が乱れる、とのコメントをいただきました。(@jpsejoe さんに感謝！)

私の環境では問題ないように見えたのですが、試しに apt update と apt upgrade を実行して環境を最新にしたところ、同じ状況になりました。Window モードでは Amazon Prime Video の再生に問題はありませんが、全画面表示すると表示が乱れます。

ライブラリが更新されているようなので、以下のように導入シェルスクリプトの該当部分だけ実行して置き換えてみましたが、状況は改善せず。

```sh
wget -q --no-check-certificate https://pi.vpetkov.net/libwidevinecdm.so_.zip
unzip -q libwidevinecdm.so_.zip
chmod 755 libwidevinecdm.so
rm -f libwidevinecdm.so_.zip
sudo mv -f libwidevinecdm.so /usr/lib/chromium-browser
```

全画面表示だけで問題が発生して、画面も派手に壊れていますので、GPU 関係を疑ってググってみたところ、GPU アクセラレーションを無効にする ``--disable-gpu`` オプションを発見しました。

``Chromium (Media Edition)`` アイコンの起動欄にこのオプションを指定したところ、問題が解決！全画面でも表示乱れがなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/30067155-dc23-42d0-1066-3d841c68ed60.png)

ただしこのオプションで CPU 負荷が上がると思うので、pi3 以前の機種だと表示がカクつくかもしれません。駄目っぽかったら外してくださいませ。

# おまけ

今回、Raspberry pi で画面ショットを撮るのには scrot というツールを使いました。詳しくは[コチラ](http://atomiyama.com/linux/page/scrot-01/)。

```
sudo apt-get install scrot
scrot -s
```