Raspberry Pi ZERO(stretch-lite)で作るRadiko Player(準備)

radikoの再生が1分位で停止してしまうという現象はmoode3.1の頃からあったのですがmoode4.0になっていよいよ解消できなくなってしまいました。(rtmpdump廻りでエラー)以前はrootでradikoスクリプトを実行すると以降正常だったのですが!

ファイルサーバー(zero)はだいぶ遊んでいて余裕もあるのでRadiko Playerに仕立ててみたいと思います。zeroには音源カードも搭載していないので音声はpulse serverのmoode audioに飛ばすことにします。
ブラウザは前回導入したsurf2を使っていますが基本レイアウトはこれまでと変わりなくcssを解釈できるブラウザであれば何でもOKですね。

画像はchromium-browserとsurf2(340×480)で見た場合の例です。
自分で作る自分だけのラヂオなのでデザイン、構成を含めて自由に構築できるものと思います。

今回はraspberry pi zero(stretch-lite)外付け音源カードなし、pulseサーバーはmoode audioを対象にしていますが音源カードがあってpulse server & clientとして実行する場合も基本の考え方は同じと思います。(MoOde 4.0(Beta12) Pulse Audioを設定する

インストール
まずはradiko関連をインストール、stretchからはffmpegが使えますね。

# apt install mplayer swftools libxml2-utils rtmpdump ffmpeg

radikoスクリプトはいろいろなサイトで紹介されていると思います。

pulseaudio設定
ディスクトップ版(stretch)ではpulseaudio関連のパッケージはインストール済です。
lite版でもpulseクライアントとしてのライブラリはデフォルトでインストールされています。
~/.config/pulse/client.confを作成

autospawn = no
daemon-binary = /bin/true
default-server = 192.168.xxx.xxx サーバーのアドレス

またコマンドラインから音量コントロールを有効にするためpulseaudio-utilsをインストール(lite)

# apt install pulseaudio-utils
使い方
% pactl -- set-sink-volume 0 22%
% pactl -- set-sink-volume 0 +6dB

コマンドラインから実行する

moode audioのpulseサーバーをスタートしてPi3からzeroにログインradikoスクリプトを実行します。
radikoスクリプト(radiko.sh)のあるディレクトリで

$./radiko.sh -p FMT


PI3はpavucontrolを起動しておいてpulseサーバーの出力装置や音量は適正値にセットされていることを確認してから実行します。

再生タブではmplayerから実行しているのを確認できます。

再生プレーヤーの選択

らじるは配信形式が変更になって現在はm3u8になっていますがmplayerでこのm3u8を再生すると定期的に音が途切れてしまいます。
aptでffmpegをインストールするともれなくffplayが使えるようになります。
X環境のないstretch-liteではオプションに-nodispを指定して実行

$ ffplay -nodisp "https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8"

ffplayでは動作も軽くかなり安定して再生できます。

もう一つの選択肢としてmpvがあります。確かmplayerの新規開発は終了してmpvに引き継がれていると思います。jessieの頃のPiではかなり重く感じたのですが現在はだいぶ向上しているようです。但しffplayと比べると再生開始が若干遅れてしまいます。

# apt install mpv


mpvで再生すると一部の海外ラジオサイトでは曲情報を取得してくれます。
インストール時は依存でyoutube-dlがインストールされますがバージョンが古くまた更新されることもないため入れ直したほうがいいでしょう。 youtube-dl Download Page

更新は約7日〜10日位で行われているようです。スクリプトに書いてcronから実行するのがいいと思います。

# apt remove youtube-dl
to install
$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl

radikoスクリプトも変更が可能です。
デフォルトはmplayerになっていると思いますが再生可能なプレーヤーを書いといてコメントを入れ替えることで試すことができます。

# Play
play() {
------- snip ------
        mplayer -
#       mpv -
#       ffplay -nodisp -
}

中にはプロトコルによってffplayで再生できないものがmplayerでは再生可能などいろいろあるようです。またクリップ気味のサイトなどもプレーヤーを変更することによって軽減されることもあります。

webサーバーのインストール

webサーバーにはnginxを使いました。

# apt install nginx php7.0-fpm

/etc/nginx/sites-available/defaultの編集

44行目index.php追加
    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

54行目からアンコメント4箇所
    # pass PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
    #
    #   # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #   # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    }

シンボリックリンクの作成

# cd /etc/nginx/sites-enabled
# ln -s /etc/nginx/sites-available/default

nginx php7.0-fpm再起動

# systemctl restart nginx php7.0-fpm

www-dataをaudioグループに追加

# gpasswd -a www-data audio

www-dataがpulseaudioにアクセスできるように

# cd /var/www
# mkdir -p .config/pulse
# cp /home/pi/.config/pulse/client.conf .config/pulse
# chown -R www-data:www-data .config

ローカル環境だけなのでphpのビルトインウェブサーバーも使うこともできます。
実行は簡単でターミナルからroot権限で以下を実行するだけ

# php -S 0.0.0.0:80 -t /var/www/html

メリットはphpの記述に問題があればメッセージで教えてくれます。テスト目的にもいいと思います。
rc.localから起動してやればこのまま実用になりそうです。
stretch-liteのzeroは問題なくpulseaudioに接続、音が出るのですがstretchのPi3はpulseaudioで接続拒否されてしまいます。どうも接続先が自身の127.0.0.1に向いているようです。
これはLXDEの仕様かなと思っています。nginxではzero同様問題なく動作します。

zeroはせっかくインストールしたのでやはりここは扱いやすいnginxで運用することとします。

下準備はほぼできたので続きはまた次回で!