USBメモリをRaspberryPiに挿して、中のmp3をiPhone上で再生する
日経Linuxに載っていたDLNAサーバ化が便利そうだったのでやってみました。
実現にあたり、
1)外付けで容量を増やしたい
2)可能な限りゴロゴロしながら作業したい
ということで、その辺に転がっていたUSBメモリ(1GB、Windows機で使用済み)で試しに挑戦。寒いのでこちらのアプリをiPhoneに入れて布団でゴロゴロ作業してました。
Mobile SSH client | Serverauditor
作業効率を求める場合は普通に物理的なキーボードを使った方が早いですが、このアプリ上でもctrlやEsc、Tabは使えるので、慣れたコマンドを入れたりviで一行だけ書き換えて再起動するといった作業だけならこれだけでも十分できました。
以下、作業内容です。
1. minidlnaインストール
apt-get install minidlnaでおしまい。
これだけで同一LAN上のマシンからRaspberryPi見えます。
2. minidlnaのデータ置き場にディレクトリ作成&テストデータ投入
デフォルトの/var/lib/minidlna以下に、piなど一般ユーザ所有で権限755のディレクトリ作ります。
権限755でも所有者rootだと、クライアントから見えない→再生できない場合があるので、一般ユーザにchownしておくのが良いです。
ディレクトリは後でUSBメモリをマウントする用に一つと、テストとしてmusicとかpictureとか作ってみたり。(Windows Media PlayerとかでRaspberryPi覗くと、WMP等クライアントソフトが勝手に該当ディレクトリ内を検索して再生可能なデータをまとめてきてくれるのですが、RaspberryPi内のデータを整理するという観点では/var/lib/minidlna以下に適宜ディレクトリを作っておいた方が便利だと思います)
テスト用のデータはWindows機から、たまたま入っていたWinSCP経由でRaspberryPiに飛ばしました。
データを仮置きした後は、念のためデータベースを手動で更新しておくと、曲が無いと慌てずにすみそうです。
minidlna -Rでデータベース再構築らしいのですが、ディレクトリを作ったりファイルを移動させたりした時はservice minidlna force-reloadの方が効きました。
Ace PlayerでDLNAサーバー(MiniDLNA)上のフォルダが更新されないときのメモ : 或る阿呆の記
3. iPhoneにクライアント用アプリをダウンロード
日経Linuxで紹介されていたMedia Link Player Liteはmp3の再生こそできるものの、バックグラウンド再生やプレイリスト作成はできないので、こちらに変えました。
ディレクトリ名の日本語表記には対応していませんが、mp3のプロパティの日本語表記には対応しています。RaspberryPi上のファイル名は半角英数にして、プロパティは日本語の曲名そのままにしておく感じになりそう。
4. RaspberryPiにUSBメモリをマウント
後々容量の大きい、外部電源のあるディスクでやるとして、今回はボロいUSBメモリで。
ざくっと挿してfdisk -lで/devのどこか調べます。今回は/dev/sda1だった。
これを/var/lib/minidlna以下の任意ディレクトリにマウントさせたいのですが、前述の
「一般ユーザが所有していて読み書き権限があるディレクトリじゃないとクライアントからデータが見えない問題」
があるので、ちょっと工夫が必要です。具体的には-oオプションでuid=1000,gid=1000,rwを指定。
mount -o uid=1000,gid=1000,rw /dev/sda1 /var/lib/minidlna/マウントしたいディレクトリ
念のためDB再構築してからiPhoneで見てみると、USBにしか入れていないはずの曲が見えて再生できました。
/etc/fstabにrw,userで書いておくのも便利ですが、その場合再起動後はrootでマウントされているので、一旦umountしてから一般ユーザでマウントするのが良さそうです。
本当はCDのリッピングもRaspberryPiでやりたかったのですが、流石にオーバーワークかと思って断念しました。。
レンタルの方が安いですが、iTunesで買ってすぐ聴ける楽さを知ってしまうと、リッピングのためにPCを起動するのが手間で手間で。
リッピング→(適宜全角文字を半角にリネーム→)WinSCPでRaspberryPiに転送、という流れでやってみようと思います。iPhone上のデータはdropboxのフォルダからWinSCPかな。
iPhone 5からRaspberryPiでAirPlay
そういやAirPlayできたはずと思って挑戦しました。
Raspberry PiをAirPlay端末にするまでの手順のメモ(OSのインストールと各種設定編) | どうのこうの
こちらを参考に自動起動前まで。
大きなトラブルとしては、音がスピーカーから出ない&RaspberryPiのコンソールにデバイス見つからないっぽいエラーが出る、でした。最初スピーカー直挿し(DACなし)が原因かと思っていたのですが、そんな事はなかったです。PCMの出力先設定を変更して解決しました。ちなみに出たメッセージはこちら。
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
Raspberry PI - getting audio working - CAGE Web DesignCAGE Web Design
上記参考に/usr/share/alsa/alsa.confを書き換えて、念のためsudo reboot。
再起動後はspeaker-testで音が出ることを確認しました。
実行時スクリーンショット。何曲か連続して再生できたのでctrl+Cで落としました。
これであとはAirPlay対応のiPod touchを購入できれば言うことなしです。(動作確認で使ったiPhoneは容量が常に音楽以外でカツカツ、手持ちのiPodはAirPlay非対応の旧型)
RaspberryPiを居間に置いてクリスマス感を出してみる
PiNOIRを使って動画/静止画を撮りたいと思っていたのですが、当初予定の「暗い所でも撮れる」ためにすることが面倒すぎて、結局カメラはあまり有効活用せず居間に置いています。
一番の原因は配線で、二番目は排熱処理です。USB接続のRaspberryPi用無線モジュールは一瞬使えたのですが、繋ぎっぱなしでしばらく使うと何故か使えなくなってしまいました。しょうがないので今は有線で、居間のルーターと繋いでいます。排熱処理というのはRaspberryPi本体もそうなんですが、夜間の光源となる赤外線ライトも中々ホカホカになってしまうためです。結局のところTimeLapse的な絵を撮りたい場所で、日頃の動きを邪魔しない位置にRaspberryPiを置いて楽しむには、我が家の間取りはあまり向いていなかったようです。。ケーブルが短すぎたり、長すぎたり、ハードを固定できるような場所がなかったり。
というわけで居間に陣取るRaspberryPiですが、目下のところmplayerでクリスマスソングを奏でています。
適当に検索してひっかかったチャンネルを-playlistつきで実行。
mplayer -playlist http://panel5.serverhostingcenter.com:2199/tunein/fcradio.pls
mplayerはネット上のmp3も、plsやm3u形式のリストも再生できるみたいですね。それ以外の拡張子は未確認ですが。とりあえず、毎回アドレス直打ちは面倒なので.shにしときました。
いくつかクリスマス用チャンネルを集めといて、ランダムで1局選ぶスクリプトでも書くかな。
そうそう、面倒くさがりなので朝起きたらこれ携帯に入れておこうと思います。
VNC入れる&無線LAN導入
Raspberry Pi買ってから監視カメラ的な機能を実装するまでにしたことをまとめた | ikoana日記
こちら参考にしてLANケーブル外しました。
VNC Viewerはここから。
Remote access & control software for desktop & mobile platforms - RealVNC™
Raspberry Pi側でsudo vncserverした後、Windows側のVNC Viewerを起動してrootのパスでログイン。
wpa_gui経由で無線のパス入れてからLANケーブル外すと、ドングルのランプが光って無事接続完了。eth0とwlan0で割り振られるIPアドレスが違ったので、一瞬焦りました。
これでモバイルバッテリーを使えば、数時間だけですがRaspberryPiがワイヤレスに。何かバッテリ切れor残量低下を検知できる方法があると良いのですが。
暗い部屋で動かしてみての感想
raspividで起動させたカメラの映像をWindows側nc.exeで見ての感想。
位置取り
カメラの位置と赤外線ライトの位置を工夫しないと、明るすぎor暗すぎになる。あと意外にカメラ横の赤ランプが強く光るので、寝てる人の近くに置くときは要注意。
余談ですが、色合いをあまり正確に求めない運用であれば、レンズの青い保護フィルム剥がしてなくてもまぁまぁそれっぽく映ります。
熱
手持ちの赤外線ライト(基盤に赤外線LEDごろごろついててコンセントから電源とるタイプ)だと、10分ぐらい照射した時点で結構ホカホカ。多分大丈夫だと思うけど、夜ずっとつけとく時は念のため周りに燃えやすいもの置かないようにしよう。RaspberryPi側は現時点でカメラ以外に何も動かしていないし、有線LAN接続なので特に心配はしてないです。
夜間運用
raspividの引数-tをかなり大きい値にして数時間動かすっていうのが、RaspberryPi側のスペック的に(暴走・強制終了なしで)可能か気になります。あとスクリーンショットの撮り方と画像置き場。raspividを&つきで実行しておいてraspistillでとるか、Windows側でとるか。前者の方が色々細かく指定できそうですが、SDカードへの負荷が気になるところ。
こんな感じです。とりあえず何が映るか無視で、引数-tで数時間相当(例えば、6時間=6*60*60*1000=21600000ミリ秒)指定して落ちないかどうかはすぐ試せそう。ハードの位置取りはおいおい考えるとして、静止画撮影はもうちょいやり方を調べます。
mplayerとNetCatでPiNOIRストリーミング視聴@Windows
できました!とりあえずできた。参考URLはこちら
Raspberry piのカメラモジュールでWebカメラ的なストリーミング配信する - how to code something
Raspberry Piカメラのセットアップ方法 » DesignSpark
Windows機で視聴するためにNetCatとmplayer探すのが少し面倒だったかもしれない。mplayerはSMPlayerで代用、NetCatはここから。
意図せず前段でmplayer入れてたこともあり、RaspberryPi側の設定はあっさりでした。カメラをLAN背後に挿して、sudo raspi-configでカメラ有効化して、再起動したぐらい。
流れとしては、
Windows側でクライアント立ち上げ→
[Path to nc.exe]\nc.exe -L -p 5001 | [Path to mplayer.exe]\mplayer.exe -fps 31 -cache 1024 -
RaspberryPiでカメラ起動→
$ raspivid -t 999999 -o - | nc [insert the IP address of the client] 5001
(映像をWindowsで楽しむ)→クライアントをCtrl+Cで落とす→カメラ落とす、の流れが良いのかなと思います。何となくですが。
映像にブラウザ経由でアクセスしたい場合はMJPG-streamerの出番かと。
先人達の知恵のおかげでやりたいことが、ざっくりとですが出来てしまいました。ありがたいことです。もう少し理想に向けて詰めていこうと思います。
mplayerでHitcast再生@RaspberryPi
再生だけなら案外さくっといけました。
pi@raspberrypi ~ $ mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=528480
Resolving yp.shoutcast.com for AF_INET...
Connecting to server yp.shoutcast.com[37.59.25.124]: 80...Cache size set to 320 KBytes
Unknown entry type Version=2
MPlayer svn r34540 (Debian), built with gcc-4.6 (C) 2000-2012 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.Playing http://80.86.106.136:80.
Connecting to server 80.86.106.136[80.86.106.136]: 80...Name : KissFM Romania - www.kissfm.ro
Genre : Top 40
Website: http://www.kissfm.ro
Public : yes
Bitrate: 32kbit/s
Cache size set to 320 KBytes
Cache fill: 2.50% (8192 bytes)
ICY Info: StreamTitle='';StreamUrl='';
Cache fill: 17.50% (57344 bytes)AAC file format detected.
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 44100 Hz, 2 ch, s16le, 0.0 kbit/0.00% (ratio: 0->176400)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
AO: [pulse] Init failed: Connection refused
Failed to initialize audio driver 'pulse'
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: 268.5 (04:28.4) of 0.0 (unknown) 16.3% 31%
リモコンとDACは現在繋いでいないので、その分のエラーは出ていますが、RaspberryPiに直接繋いだヘッドホンから音が出てます。ラジオ実行中は上記ログの一番最後の行がべこべこ数値切り替わってる感じ。&をコマンド末尾につけてバックグラウンドにやっても良いかもです。
ラジオ関連としては音量調整用つまみとチャンネル切り替えつまみが物理的に欲しいほか、どこかに再生中の曲名を表示させたいと思っています。plsの自動取得もできるともっと良いですが。とりあえず前準備としてRaspberryPiにphp入れときます。
pi@raspberrypi ~ $ sudo apt-get install apache2 php5
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libonig2 libqdbm14 lsof php5-cli php5-common ssl-cert
提案パッケージ:
apache2-doc apache2-suexec apache2-suexec-custom php-pear openssl-blacklist
以下のパッケージが新たにインストールされます:
apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libonig2 libqdbm14 lsof php5 php5-cli php5-common ssl-cert
アップグレード: 0 個、新規インストール: 17 個、削除: 0 個、保留: 13 個。
7,398 kB のアーカイブを取得する必要があります。
この操作後に追加で 21.7 MB のディスク容量が消費されます。
続行しますか [Y/n]? Y
めんどくさがりなので提案パッケージも後から入れときました。
次はカメラをとりあえずつけて動作確認か、ラジオつめるかのどちらかで。