Raspberry Pi OpenGLを有効にする

現在のRaspbianは2018-10-09-raspbian-stretch辺りからX関連のライブラリがデフォルトでOpenGLを使うように変更になっていると思います。

デフォルトのRaspbianはOpenGLが有効になっていないため動画を再生するとcpu使用率が異常に高くなってしまうようです。

環境

Raspberry pi 3 (2018-10-09-raspbian-stretch)

OpenGLを有効にする

# raspi-config


7 Advanced Options
A7 GL Driver
G1 GL (Full KMS) OpenGL desktop driver with full KMS

A3 Memory Split
256

GPUメモリもついでに変更しておきました。(メニュー Raspberry Piの設定からも可)
変更した値は/boot/config.txtに追記されます。

dtoverlay=vc4-kms-v3d
gpu_mem=256

OpenGLを有効にして再起動します。

ターミナルからコマンドを実行すると別ウィンドウでギャが見えてきます。

$ glxgears -info


OpenGLを有効にするときれいにギャが回転する様子が見えます。


こちらはOpenGLを有効にする前の様子
FPSの値も小さくなります。

スワップファイルの設定

ディスクトップ用途ではスワップファイルの容量アップは必須になります。
/etc/dphys-swapfile

CONF_SWAPSIZE=2048
# systemctl restart dphys-swapfile


動画再生やchromium-browserなどではデフォルトの100MBはあっという間に使い切ってしまいます。

動画再生

動画プレーヤー(mpv)をインストール、再生してみます。

# apt install mpv

~/.config/mpv/mpv.conf作成

vo=opengl
$ mpv "http://www.youtube.com/watch?v=-WtYKzE6R-s"

Raspbian imageを編集する

現在最新のRaspbianは2018-10-09版です。現行のRaspbianは3〜4ヶ月ごとにカーネルや累積したアップデートパッケージを更新してリリースしています。

カードを作成する際は書き込んだあとからも編集可能ですがimageファイルの時点で最低限の編集をしておけば複数のカードを作成する際やヘッドレス用途などのインストール作業が非常に楽になります。

どのように編集するかはそれぞれですが当サイトではIPアドレス、wifi接続設定、使いやすいbashrcやvimrcなどの設定ファイルもインストールしたらすぐ使えるよう放り込んでいます。

作業環境はRaspberry Pi 3(Raspbian desktop)

Raspbian Download


ダウンロードは国内のミラーサイトが早いと思います。(特にリリース直後)
本家より数時間遅れで反映されるようです。
ページ(URL)の末尾に最新の日付のRaspbianが追加されます。

jaist
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/

zipファイルを適当なディレクトリにダウンロード、展開します。

kpartxのインストール

# apt install kpartx

以前はloop deviceの作成にコマンドラインから実行していましたがもう少し簡単に扱えるようpcmanfmに関連付けをします。


実行するコマンドライン
sudo kpartx -a %f
アプリケーションの名前(適当に)
kpartx-add
デフォルトのアクション チェック


imgファイルを右クリックするとkpartx-addが登録されています。
場所にはbootとrootfsが見えてきます。


ドライブを選択してパスワード入力


マウントしてファイルが見えてきます。
bootはユーザー所有になっているのでssh空ファイルを作成
root所有のファイルはターミナルから実行
pcmanfmからkpartxを実行するとpcmanfm(LXDE)からは内蔵deviceと認識してloop deviceは再起動するまでリストから外せなくなってしまいますがddの実行には問題ありません。
(コマンドラインから# kpartx -d しても不可)

右クリックから作成したkpartx-addは~/.local/share/applicationsに置かれます。(編集、削除可)

[Desktop Entry]
Type=Application
Name=kpartx-add
Exec=sudo kpartx -a %f
Categories=Other;
NoDisplay=true
MimeType=application/x-raw-disk-image
Terminal=false

imgファイルの編集
/boot/ssh 空ファイル作成

初期アクセス用のアドレスを決めておきます。(interfaceはまだ指定しない)
/etc/dhcpcd.conf (各アドレスは自環境)

static ip_address=192.168.0.13/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

wifi接続設定 (作業用Piからコピーしてもいい)
/etc/wpa_supplicant/wpa_supplicant.conf

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="xxxx-xxxx"
    psk="xxxxxxxxxx"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    group=CCMP
    priority=2
}

dd 書き込んでみる
/dev/sdx (認識したデバイス名で) loop deviceはアンマウント

# dd if=2018-10-09-raspbian-stretch-lite.img of=/dev/sdx bs=1M

ラベルを編集
ddは全くのクローンを作成します。識別しやすいようにラベルを付け替えます。
bootはmlabel(mtoolsをインストール)で書き換えできますが変更しないほうがいいと思います。

# e2label /dev/sda2 zerow


書き込んだカードをzero(w)にセットして起動
有線も同時に接続しましたがzero(w)のネットワークは内蔵wifiが優先するようです。
あとは必要に応じてinterface アドレス hostnameなどを変更設定してセットアップを続行します。
新たにカードを作成する際も全く同じ手順で初回ログインアクセスが可能になります。

moOde audio 4.3 pulseaudio Server (Radiko)

通常moOde audioにはアンプとスピーカーが接続されていると思います。当サイトではmoOde audioをpulseaudio Serverとして運用しています。
ピュアなオーディオ再生を目的とする場合にはpulseaudioは不要と思いますが一般の音楽(音声)再生、また技術的な興味に於いてもこれらを利用するメリットはあると思います。

moOde audioのmpdとpulseaudioは同じデバイスを同時に使用することはできないのでpulseaudio使用時はmpdを停止する必要があります。(逆も同様)

クライアント側はraspberry pi + raspbianで動作を確認しています。今回はできるだけシンプルに構成、検討してみたいと思います。

ロケールの設定

最初にraspi-configからロケールの設定をしておきます。(ja_JP.UTF-8追加)

# raspi-config
4 Localisation Options - I1 Change Locale
[*] ja_JP.UTF-8 UTF-8

Pulse Audioの導入

moOde audioにpulseaudioをインストール

# apt install pulseaudio

user(pi)でpulseaudioスタート

$ pulseaudio --start

~/.config/pulseが作成されます。client.conf新規作成

~/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true

カードを調べる。PulseAudio/サンプル 当サイトのカード(ES9023-DAC)は次のように出力

$ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'
  * index: 0
        name: <alsa_output.platform-soc_sound.analog-stereo.monitor>
        device.string = "0"

$ pacmd list-sinks | grep -e 'name:' -e 'index:'
  * index: 0
        name: <alsa_output.platform-soc_sound.analog-stereo>

/etc/pulse/default.pa 末尾に追記(ネットワーク帯は自環境で)

/etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1
set-default-source alsa_output.platform-soc_sound.analog-stereo.monitor
set-default-sink alsa_output.platform-soc_sound.analog-stereo

前回はユーザー(~/.config/pulse/default.pa)でpulse serverを設定していたのですがシステム(/etc/pulse/default.pa)に記述したほうが明らかに効率が良いようです。

pulseaudioコマンドはstartしたuserがkillすることができます。
unixコマンド($sudo killall pulseaudio)からは可能です。
rootでは基本(デフォルト)startすることができません。

クライアント(raspberry pi)の設定(raspbian desktop)

pavucontrolのインストール

# apt install pavucontrol

クライアント側にはサーバー(moode audio)のIPアドレスを指定

~/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
default-server = 192.168.0.111

再生する

クライアントのraspberry pi3はpavucontrolを起動しておきます。
pulseサーバー(moode audio)にログイン pulseaudioスタート

$ pulseaudio --kill
$ pulseaudio --start

デバイス(カード)が見えればOK
音量はpavucontrolで制御します。最初の音量に注意
pulseaudioはアクセスが無いと自動(約1分位か)でkillします。pavucontrolが起動していれば勝手にkillすることはありません。
GUIなアプリケーションはほとんどpulseaudioに対応していると思います。コマンドラインからはmplayer,mpvなどがOK

moode audioから再生する

radiko関連パッケージのインストール

# apt install mpv mplayer swftools libxml2-utils rtmpdump

moode audio自身からpulseaudio経由で再生するにはuserの~/.config/pulse/client.confに次の1行を追記します。

default-server = 127.0.0.1

但しこの設定を加えるとuser(pi)はpulseaudioをスタートできなくなります。

$ pulseaudio --start
N: [pulseaudio] main.c: ユーザーが設定したサーバー 127.0.0.1 は start/autospawn を拒否しています。

したがってrootからはpulseaudioをstartできないことからuser piでpulseaudioをスタート、rootに設定を加えて実行してみます。(コマンドラインでの実行はpulseaudioをstartしていないと音量100%で出力します。pi3からpavucontrolでモニタ、音量の確認が必要です)

実験には以前のとおりradikoスクリプト再生環境を構築してみます。
必要なパッケージをインストールradikoスクリプトを実行
radikoスクリプトの再生プレーヤーにmplayerを指定すると数分後にRTMP廻りでエラーが発生、停止してしまいます。

# ./radiko.sh -p FMT
--------
AO: [pulse] 48000Hz 2ch floatle (4 bytes per sample)
Video: no video
Starting playback...
292.083 kB / 47.96 sec (unknown) 18.2% 
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
ERROR: RTMP_ReadPacket, failed to read RTMP packet header
316.538 kB / 51.92 sec
Download may be incomplete (downloaded about 0.00%), try resuming
A:  51.7 (51.7) of 0.0 (unknown) 18.2%

Exiting... (End of file)

これは以前より発生している現象で使っていると改善することもあります。Pi1B + moode audio特有の現象かもしれません。
いろいろ試してみるとmpvでは正常に再生することがわかりました。
欠点は再生開始までの時間がmplayerの8秒からmpvでは12秒ほどになります。(mplayerの8秒も長い)
安定して再生できればいいので以前のとおりmoode audio + pulseaudio + radiko(mpv)で環境を構築してみたいと思います。

#追記 20181117 —
/etc/mplayer.confにcacheを設定することで現在mplayerも安定して動作しています。

# cache = 8192
cache = 512

512KBで再生開始は10S位、1024KBだと20S位かかります。
らじるは途切れるのでmpvにしています。
——————-

#pulseaudioはデフォルト設定にネットワークとカード情報を設定しただけなので設定次第で挙動は違ってくると思います。

今回はできるだけシンプルにpulseaudioコントロール、radiko環境を構築してみたいと思います。

www-dataからpulseaudioをスタート

実用的にはユーザーwww-dataを利用してpulseaudioをコントロールするのが簡単そうです。

moode audioのwww-dataはデフォルトでsudoersに記載されています。(編集する際はvisudo)

www-data ALL=(ALL) NOPASSWD: ALL

www-dataにホームディレクトリを作成、ユーザーwww-dataでpulseaudio –start
~/.config/pulse/client.confを新規作成

# gpasswd -a www-data audio
ユーザ www-data をグループ audio に追加
# systemctl stop nginx php7.0-fpm
# mkdir /var/www-data
# usermod -s /bin/bash www-data -d /var/www-data
# cd /var
# chown www-data:www-data www-data
# su www-data
$ pulseaudio --start
$ cd ~/.config/pulse
/var/www-data/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
$ exit
# systemctl start nginx php7.0-fpm

# ユーザ www-dataからpulseaudioをスタートできますが同時に再生もwww-dataとして実行できます。pulseaudioの仕様なのかはわかっていません。

pulseaudioコントロール(radiko)

moode4.3では/var/wwwのsquashfsはoptionalとなっているためmoodeのwebサーバー(nginx)を利用します。
skyblue.cssの導入
SkyBlue CSS Frameworkをダウンロード、展開したskyblue-gh-pagesをhtmlにディレクトリ名変更

# cd /var/www
# wget https://github.com/Stanko/skyblue/archive/gh-pages.zip
# unzip gh-pages.zip
# mv skyblue-gh-pages html

/var/www/htmlにメインのphpファイルを置きます。(radiko_s.php)

# mkdir /var/www/html/bin
# cd /var/www/html/bin
# touch broad.txt
# chown www-data:www-data broad.txt
# chmod 755 killall.sh
# chmod 755 moode.sh
# chmod 755 radiko.sh

/var/www/html/binに必要なスクリプトを置きました。(再生プレーヤーは使う可能性のあるものを書き込んでおきます)
/var/www/html/bin/killall.sh

#!/bin/sh
sudo killall -q mplayer
sudo killall -q mpv
sudo killall -q ffplay
mpc stop > /dev/null 2>&1

/var/www/html/bin/moode.sh

#!/bin/sh
sudo killall -q mplayer
sudo killall -q mpv
sudo killall -q ffplay
sudo killall -q pulseaudio

/var/www/html/bin

-rw-r--r-- 1 www-data www-data   17 10月 18 20:26 broad.txt
-rwxr-xr-x 1 root     root      103 10月 18 19:06 killall.sh
-rwxr-xr-x 1 root     root      104 10月 18 19:08 moode.sh
-rwxr-xr-x 1 root     root     7700 10月  9 22:46 radiko.sh

ブラウザから実行 http://moode/html/radiko_s.php

phpファイルは以前作成したものを手直ししています。
ボリューム値の取得についてはこちら
radiko_s.phpファイル
radiko.shスクリプトは頂戴したものを直しながら使用(radikoは聴取エリアがあります)
個別設定
30行目 デフォルト音量
61行目 mute
231行目 volume Limit


起動時の画面
当サイトでは以前ビルドしたsurf2ブラウザを340×100サイズで起動しています。
moodeボタン mpd再生開始(pulseaudio –kill)


STOPボタンまたは中央の音量表示ボタンクリックでpulseaudioスタート(mpd停止)
pulseaudioスタート後中央のボタンは音量デフォルト設定ボタンとして機能


選局はスクロールまたはウインドウを引き伸ばしてクリック
pulseaudioスタートしていない状態からもOK
mボタン mute

mpd〜pulseaudioは1クリックで切り替えが可能です。但しラジオの再生開始は10数秒を要します。(pi1B)
音量は基本出力装置タブ側に反映されます。再生タブ(入力)も適当に変化します。
pavucontrolで変更した値(出力装置タブ)はタイトル左の文字(moOde)をクリック(画面リロード)することで反映します。

サーバー自身(moode audio)からの再生(radiko)は必ずpulseaudioがスタートしている必要があります。
初期設定時はpavucontrolでモニタ、適切なデバイス及び音量を確認テスト後アンプのスイッチを入れるようにします。


moodeからradiko再生、クライアントからmp4再生、オーディオプレーヤー再生の出力はpulseaudioでミキシングして再生されます。(通常の音楽、映像再生用途ではこんな使い方はあまりしないと思いますが)
moode player以外にも音楽(音声)の中枢として活躍しています。

moOde audio 4.3 Radioを登録する

mpdはhttpストリーミングも対応しています。

Moodeフォーラムに’Moodeにロゴ付きラジオ局を追加する’こんな投稿があります。

現在のNHKラジオはhttpsで配信しています。


$ mpd -V すると対応するフォーマットなど情報を表示します。
Protocolsの項をみるとhttps://ありますね。
moOde audioのmpdは独自のビルドなのでmmsはコンパイルオプションに入ってないようです。


以前より再生可能なことはわかっていたのですがフォーラムにあるとおりデータベースに登録しない限り再起動やplaylistに登録、読み込みをするとこんな表示になってしまいます。

plsファイルの作成

以降moodeにログインしたらroot権限で編集が必要です。
放送局は地域によって適切なURLを記載します。
らじるらじる m3u8 を ffmpeg で録音する(8放送局)2017/9 以降対応

$ ssh moode
$ sudo su
# cd /var/lib/mpd/music/RADIO
# cp Jazz24.pls "NHK FM.pls"

変更箇所はURLとTitle1
ファイル名とTitle1=NHK FMは一致したほうが間違いが無いと思います。

"/var/lib/mpd/music/RADIO/NHK FM.pls"
[playlist]
numberofentries=1
File1=https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8
Title1=NHK FM
Length1=-1
version=2


完了したらRADIOのデバイスアイコンをクリックして、”Update this folder”をクリック
RADIOのリストには載っているはずです。ここからplayすれば聴取可能です。

画像ファイルを用意

画像ファイル名も正確に一致する必要があります。

$ mv NHK-FM.jpg "NHK FM.jpg"

画像は適当に転送、sshで送ってみます。

$ scp NHK* moode:/tmp
pi@moode's password
NHK FM.jpg                                    100%   16KB 872.3KB/s   00:00    
NHK R1.jpg                                    100%   16KB 862.8KB/s   00:00    
NHK R2.jpg                                    100%   15KB 947.4KB/s   00:00

moodeにログイン

# cp /tmp/NHK* /var/www/images/radio-logos
# cd /var/www/images/radio-logos
# chmod 777 NHK*
# ls
# cp NHK* ./thumbs

ロゴ画像はwebから拾って300×300で適当に作成

データベース登録


フォーラムの手順どおり実行していくとradioの登録idは185まであります。
186から入力していきます。
id,’station url’,’station name’を入力
‘station url’,’station name’は作成したplsに合わせて
データベースはバックアップを取って自己責任で!

# cd /var/local/www/db
# cp moode-sqlite3.db moode-sqlite3.db.bak
# sqlite3 moode-sqlite3.db
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> select * from cfg_radio;
----
185|http://lb.zenfm.be/zenfm.mp3|Zen FM||local
sqlite>
sqlite> insert into cfg_radio VALUES(186,'https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8','NHK FM','if exists:permalink otherwise:empty','local');
sqlite> insert into cfg_radio VALUES(187,'https://nhkradiohkr1-i.akamaihd.net/hls/live/512075/1-r1/1-r1-01.m3u8','NHK R1','if exists:permalink otherwise:empty','local');
sqlite> insert into cfg_radio VALUES(188,'https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8','NHK R2','if exists:permalink otherwise:empty','local');
sqlite> .exit


再度確認 登録されていますね。

ここでリブート


サムネイルは/var/www/images/radio-logos/thumbsの画像が使われます。
パーミッションを777にしておけばmoode側で作ってくれると思いますが一応前の段階でコピーしています。
画像関連はブラウザのキャッシュが効いているのでクリア、再読込が必要です。


ちょっとロゴが派手な感じもしますがこんなもんでしょう。
(かっこいいロゴは作れない)
画像はファイル名を合わせれば変更可能です。
Streaming sourceとしか表示しませんが配信元の仕様と思います。

playlistからステーション名がいつも表示してくれればやっと常用する気になります。

moOde audio 4.3 インストール

ちょっとmoOde audioのページを覗いたらmoOde audio 4.3がリリースされています。

早速ダウンロードしてみると ん! かなり大きいですね。

展開してみると今回はバイナリイメージで配布されています。

最初はchromium-browserからダウンロードしたらなぜか失敗していました。ダウンロードボタンを右クリックしてURLを取得、wgetでダウンロード。無事落とせました。

$ wget https://github.com/moode-player/moode/releases/download/r43prod/moode-r43.zip
$ md5sum moode-r43.zip
5a3f3bf85fd191372625e0101763b818  moode-r43.zip
$ unzip moode-r43.zip
Archive:  moode-r43.zip
  inflating: moode-r43.img

作業はいつもの通りRaspberry pi 3

$ lsblk
カードは8GB /dev/sdaで認識しています。

# dd if=moode-r43.img of=/dev/sda bs=1M


古いカードなので書き込み速度が遅い


3GBのイメージに約2GB使われているのでほぼフルイメージで作成されていると思います。
bootにはsshの空ファイルを作成しておきます。
wifi接続の際はこの時点で/etc/wpa_supplicant/wpa_supplicant.confに接続情報を書き込んでおくといいかもしれません。あとはdhcpで取得してくれます。(要root)


sshは pi moodeaudio


最初の画面はこんな感じ


中央上部にまたひとつタブが増えています。


ブラウザはキャッシュのクリアが必要です。
時間と音量の枠は色の指定をするとすぐ変わるのですが文字がなかなか変わりません。
やはりキャッシュのクリアが必要でした。

当サイトではPi1Bにmoode audioを搭載しています。
必要最低限の設定箇所以外はほとんどデフォルトで運用してしています。
ロースペックなPi1Bでもなんら問題なく頑張っています。

派手さはありませんが変わらぬ基本スタイルと着実なグレードアップ、やはりmoode audioは最高ですね。今回の配布形式で一段と導入に対する敷居が下がってファンも増えるものと思います。

Top