Raspberry Pi ZeroにRadiko Playerを導入する

Pi ZeroにRadiko Playerを導入してみました。

ZeroでRadikoを聴く訳ではないのですがほかのテスト目的でインストールしたところ少し気がついた点があったので軽く纏めてみました。

OS 2017-04-10-raspbian-jessie-lite

カード作成

dd if=2017-04-10-raspbian-jessie-lite.img of=/dev/sda bs=1M

wiringPiインストール
内蔵alsaで音を出すには前回記事を参照
jessie-liteにはwiringPiがインストールされてないのでインストールします。

# apt install libi2c-dev git-core
# cd
# git clone git://git.drogon.net/wiringPi
# cd wiringPi
# ./build

mplayer関連
radikoスクリプトは適当に調達

# apt install mplayer swftools libxml2-utils libav-tools rtmpdump

lighttpd

# apt install lighttpd php5-cgi
# lighty-enable-mod cgi
# lighty-enable-mod userdir
# gpasswd -a www-data audio

/etc/lighttpd/conf-available/10-cgi.conf編集
下記の部分コメントを外してphp部を追記

cgi.assign      = (
        ".pl"  => "/usr/bin/perl",
        ".py"  => "/usr/bin/python",
        ".php" => "/usr/bin/php-cgi",
)

radikoスクリプトをブラウザから実行すると停止する
新規にインストールするといつもこの現象が発生します。
適当に触っているといつの間にか正常に再生できてしまうのですが今回は少し真面目に挙動を観察してみました。
コマンドラインからは連続再生できる
らじるスクリプトは正常に再生できる
インストール直後は正常に再生できる
再起動後は1分足らずで停止する

ここでroot権限でコマンドラインからradikoスクリプトを実行
正常に再生する
ブラウザからも正常に再生する
再起動後も正常に再生する

/var/tmpにできるauthkey.pngとplayer.swfも最初に実行したユーザーのままです。
カード2枚で試しましたがほぼ同じ結果を得ています。という訳でなにが原因なのかはわかりませんでした。

ボリューム値を取得する
amixer -R からボリューム値を取得していますがカードが変わると当然取得する箇所も変更になります。
sampleの//print_r($vol_a);の部分をコメントアウトすると画面に表示します。
取得している箇所は2箇所あります。(先頭附近と下記箇所)

// goto vol
        vol:
            $vol = shell_exec("amixer -c 0 -R 2>&1");
            $vol_a = explode(' ',$vol,30);
            $vol_s = $vol_a[24];
print_r($vol_a);
            $vol_x = substr($vol_s,1,3);


空白ごとに切り出しているのでamixer -Rから大体の切り出す数と目的のナンバーを指定します。

ブラウザのキャッシュが効いているのでクリアするかブラウザを再起動すると見えてくると思います。

スマホ対応デザインにしてみた

小さいボタンを使用したのでスマホでもこんな感じに見えると思います。

lighttpdからradiko.shを実行するとmplayerの実行ログはsyslogに記録されていました。
ZeroではこのログがSDへのアクセスになりノイズとなってしまいます。
そのためmplayerの実行ログはすべて捨てるようにしました。
radiko.sh -p FMT /dev/null & → 1>/dev/null 2>/dev/null &

参考 index.php_zero_radiko