Raspberry PiでAbemaTVを起動

今年で開局1年を迎えるAbemaTVですが、AppleTVなどにも対応し、大画面でコンテンツを楽しめるようになりました。そこで、机の上で寂しそうにしていたラズパイを使ってAbemaTVを見れる環境を構築したいと思います。

## 注意
Raspberry Piで遊ぶ方法として実践しております。単純にAbemaTVを快適に視聴できる環境を求めている方は対応端末をご購入ください。
AbemaTVアプリを始め、改造などの不正行為は行っておりません。くれぐれも著作権等の扱いにはご注意ください。

## 概要
簡単に行うことを以下にまとめます。
0. Raspberry Pi 2/3を準備
1. Android TVをRaspberry Piに導入
2. AbemaTVのインストールと設定
3. BOOT設定の変更

## 0. 環境準備
- Raspberry Pi 2
- SD card 32GB
- USB Keyboard
- LAN Cable
- Display and HDMI Cable

今回の方法はRaspberry Pi 2及び3に対応しております。
今回はモデル2で行った結果を掲載しますが、GPU性能に限界を感じたため、モデル3で行うことをおすすめします（私は未確認です）。

## 1. Android TVの導入
Raspberry Pi向けにAndroidを改良したものが配布・販売されております。
今回は**RaspAnd**という名前で販売されているものを使用しました。
[RaspAnd Marshmallow 6.0.1](http://raspex.exton.se/?p=453)
導入はLinux・Windowsともに簡単に行なえます。
> **Linux:**
> ``dd if=xxx.img of=/dev/xxx bs=1M``
> **Windows:**
> [Win32 Disk Imager](https://ja.osdn.net/projects/sfnet_win32diskimager/)

## 2. AbemaTVのインストール
<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/128344/eeca76b1-3b73-c3f5-8162-83d17f9c0a7c.jpeg" alt="インストール" title="インストール" with="300" height="260" />
</div>
上記で紹介したAndroidTVのイメージはストアアプリが導入されているため、Googleアカウントで普通にインストールするだけです。
今回は主にAbemaTVを起動するだけのためにAndroidTVを使用するため、不要なサービスやアプリは停止させてしまいましょう。しかし、サービスによってはインストールに必要なものもありますので、各種システムのことを詳しく知らない人は、インストールが完了してから軽量化作業を行うようにしましょう。

## 3. BOOT設定の変更
このまま起動して使っても良いのですが、カクカクして番組を視聴できるレベルではありません。（モデル3ではサクサクなんでしょうか…）
ここから試行錯誤が始まります。まずは、BOOT時の設定を変更してみます。

SDカードをパソコンで読み込むとBOOTディレクトリが見えると思います。
その中にある``config.txt``を以下のように編集してみました。

```ruby:config.txt
hdmi_force_hotplug=1
hdmi_drive=2
config_hdmi_boost=4
hdmi_group=1
hdmi_mode=19
disable_overscan=1
framebuffer_width=1280
framebuffer_height=720
kernel=zImage
device_tree=bcm2710-rpi-3-b.dtb
dtparam=audio=on
dtoverlay=vc4-kms-v3d,cma-256
initramfs ramdisk.img 0x01f00000
mask_gpu_interrupt0=0x400
avoid_warnings=2
gpu_mem=450
enable_uart=1
```
モデル2はメモリを1GB搭載しているので、``gpu_mem=450``と変更して半分くらいをGUP関連のメモリ領域に割り当ててみました。かなり軽量化させると、これくらいを割り当てても比較的快適に動いてくれました。流石に半分以上を割り当てると起動しなかったりしました(^_^;)。
一応、HDMI関連の設定も変更したりしてみましたが、あまり変化が感じられませんでした。

## 4. 結果
<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/128344/fc6ae986-e502-177c-dfbb-3df62ad31db0.jpeg" alt="結果" title="結果" with="300" height="260" />
</div>
一応、**起動は**できました！
しかし、上記の方法だけだとサクサク動作してくれないと思います。原因としては、配信されるコンテンツの画質が良すぎるのです。なので、グラフィックの限界を超えてしまっているのだと思います。その証拠に、4:3とかの古いアニメとかは普通に視聴できます。

考えられる対処方法としては、プロキシ設定などでパソコン側から回線速度を擬似的に遅くすることで、低画質で受信させる方法です（アプリに画質設定がなかったので）。ただし、パソコンなどが別に起動していなければならないので本末転倒…（パソコンで見ればいいじゃんｗ）
root権限が取れれば本体のみで再現できそうですが、ラズパイでの方法がわからないため、断念しました。

## 5. 試行錯誤の残骸
- SDストレージ内のAndroid設定を書き換えれば…？
まずBOOT以外の領域(ext4)にアクセスする方法
-> [Mac OS X で ext4 マウントする方法（ext4fuse）](http://architect-wat.hatenablog.jp/entry/2014/08/31/120453)
でも、最新のmacではセキュリティの関係でうまくいかない
-> [OSX 10.10.1 Yosemite で Fuse でext4使おうとしたら fuse インストール出来ない](http://takuya-1st.hatenablog.jp/entry/2014/12/12/183004)
マウントしたディレクトリにアクセスできない
-> [osx で ext4 をread/write でマウントする。](http://takuya-1st.hatenablog.jp/entry/2016/06/07/232236)

- Androidイメージの独自カスタマイズをすれば…？
これが使えそう
-> [device_brcm_rpi2](https://github.com/peyo-hd/device_brcm_rpi2)

- 通信速度の制御
パソコンを使う方法
-> [Android開発で3G回線速度を再現する](http://blog.loadlimits.info/2012/10/android開発で3g回線速度を再現する/)
安定しないが、WiFiを利用すれば物理的に遅くできそう…

## 最後に
ちなみに、YouTubeも高画質の再生は難しいですが、低画質なものであれば再生可能です。
AbemaTV以外でも様々なことを試すことができるレベルでAndroidTVが動作するため、ラズパイが家にあるという方は試してみてもいいかもしれません。

Androidの独自カスタマイズも良い勉強になりそうなので、チャレンジしてみたいですね(*´ω｀*)