RaspbmcのAirPlayでハマったでござる
MacBook Airを買ったぜわっしょい!
さっそく今までヨダレ垂らして指くわえて見てたステキ機能を堪能するぜ!
まずはAirPlayだ!手元の動画をRegzaで見るぜ!
ああ、でもAppleTV持ってないぞ。でもきっとオプソ界にはニートな解が転がってるはず!
パスっ!タスタスタス!(SpotlightでWeb検索)
よし、Raspberry Pi向けのXBMC(Raspbmc)はAirPlayがしゃべれるぞ!!!
と、言うわけでRaspbmc導入スタート!
通信の状況を調べる
まずはMBAとRaspbmcの通信の状況を確認してみる。
まずはhomebrewでtcpdumpを・・・ってデフォルトで入ってるの!?
何このOS!超いいじゃん!
Alicia:~ moguno$ sudo tcpdump | grep raspbmc ・・・ 18:36:41.308272 IP6 alicia.local.49174 > raspbmc.local.36666: Flags [S], seq 105655457, win 65535, options [mss 1440,nop,wscale 4,nop,nop,TS val 744813686 ecr 0,sackOK,eol], length 0 18:36:41.312502 IP6 raspbmc.local.36666 > alicia.local.49174: Flags [R.], seq 0, ack 105655458, win 0, length 0
ポート36666に対してコネクションしようとしてるけど拒否られてる。
てことは、Raspbmc側で必要なサーバが起動してないってことか。
ほーらやっぱり・・・あれ?
と、言うわけでRaspbmc側でポートが開いてないことを確認。
(ちなみにRaspbmcはRaspbianと同じく、ユーザ名:pi、パスワードraspberryでsshログイン可能です。)
pi@raspbmc:~$ netstat -a | grep LISTEN ・・・ tcp 0 0 *:36666 *:* LISTEN tcp 0 0 *:36667 *:* LISTEN tcp6 0 0 [::]:sunrpc [::]:* LISTEN ・・・
あれ?開いてるじゃん??
繋がる・・・だと?
一旦MBAに戻って、telnetを汎用TCPクライアントとして導通確認をば。
このMBAさん、telnetもばっちりデフォルトで完備です。
sshも入ってないのにtelnet消しちゃった某OSに、りんごのヘタを煎じて飲ませてやりたいですよ。
Alicia:~ moguno$ telnet raspbmc.local 36666 Trying 192.168.11.14... Connected to raspbmc.local. Escape character is '^]'. RTSP/1.0 200 OK Audio-Jack-Status: connected; type=analog CSeq: ^] telnet> quit Connection closed.
えー、なんで繋がるん???
IPv6だ!
よく分からなくなってきたので、もっかいtcpdumpログを見なおしてみる。
18:36:41.308272 IP6 alicia.local.49174 > raspbmc.local.36666: Flags [S], seq 105655457, win 65535, options [mss 1440,nop,wscale 4,nop,nop,TS val 744813686 ecr 0,sackOK,eol], length 0 18:36:41.312502 IP6 raspbmc.local.36666 > alicia.local.49174: Flags [R.], seq 0, ack 105655458, win 0, length 0
IP6・・・だと?
tcp 0 0 *:36666 *:* LISTEN tcp6 0 0 [::]:sunrpc [::]:* LISTEN
あー、ポート36666はIPv4のINADDR_ANYにしかバインドされてない!これだ!!
つまり、こういうことでした。
・RaspbmcはIPv4、IPv6両方のアドレスを持つので、avahiで両方のアドレスが他のノードにアナウンスされる。
・でも、RaspbmcはIPv4の36666ポートしか接続を受け付けない。
・MBAはIPv6を優先でIPv6の36666ポートにアクセスしに行くけど、RaspbmcはIPv4の36666ポートしか見てないから繋がない。
お兄ちゃん!いつまで寝てるの!!
と、言うわけでこの話のオチ。
RaspbmcのIPv6を無効にすることで対処しました。
pi@raspbmc:~$ sudo vi /etc/sysctl.d/ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
そしてリブート・・・
通った。(エルクゥ風に)
256MB版Raspberry Piだけども、動作は超良好。
AirPlayサーバが欲しいだけならRaspberry Piで十分だわ。