ffmpeg(HLS) を QNAP にインストール

ffmpeg のコンパイル

QNAP TS-119PII で ffmpeg(HLS) をインストールする必要が出てきたので「QNAPにffmpegをインストール」を参考にしてやってみた.
一部うまくいかなかったので備忘録として残しておく.

事前準備

ipkg install gcc
ipkg install make
ipkg install autoconf
ipkg install coreutils
ipkg install pkgconfig
ipkg install lame
ipkg install libvorbis
ipkg install git

vi ~/.bashrc
(/opt/bin をpathに加える)
exec bash

コマンド差し替え

(※QNAPでコンパイル環境を作るにはを参考にした.ありがとうございます!)
標準の awk だと make で失敗する.
(今回,grep は変更の必要はないが...)
cd /bin
mv grep grep-
mv awk awk-
mv sed sed-
ipkg install grep
ipkg install gawk
ipkg install sed
ln -s /opt/bin/grep .
ln -s /opt/bin/awk .
ln -s /opt/bin/sed .

openssl のインストール

cd /share/HDA_DATA/homes/admin
wget http://www.openssl.org/source/openssl-1.0.1p.tar.gz
tar xvzf openssl-1.0.1p.tar.gz
cd openssl
./config --prefix=/opt
make
make install

rtmpdump のインストール

cd ..
wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
tar xvzf rtmpdump-2.3.tgz
cd rtmpdump-2.3
make SYS=posix prefix=/opt
make install

ffmpeg のインストール

cd ..
git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
vi /usr/local/lib/pkg-config/librtmp.pc
(URLの行を削除)
./configure --prefix=/opt --enable-libmp3lame --enable-openssl --enable-librtmp --enable-libvorbis --disable-asm
WARNING: gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler.
などと言われるが無視.

make
make install

/etc/ld.so.conf
を以下のように設定
/opt/lib
/opt/local/lib
/usr/local/lib

ldconfig
を実行.

結果
# ffmpeg
ffmpeg version N-76506-g3d20f8e Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.2.3 (GCC)
configuration: --prefix=/opt --enable-libmp3lame --enable-openssl --enable-librtmp --enable-libvorbis --disable-asm
libavutil 55. 5.100 / 55. 5.100
libavcodec 57. 15.100 / 57. 15.100
libavformat 57. 14.100 / 57. 14.100
libavdevice 57. 0.100 / 57. 0.100
libavfilter 6. 14.101 / 6. 14.101
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.100 / 2. 0.100
Hyper fast Audio and Video encoder

再起動で消えてしまうことへの対策

vi /share/HDA_DATA/.qpkg/autorun/autorun.sh
に以下のスクリプトを追加.
chmod +x /share/HDA_DATA/.qpkg/autorun/autorun.sh

あらかじめ,path を追加した .bashrc や先ほどの ld.so.conf を
/share/HDA_DATA/config/ に作っておく.
#!/bin/sh
cp /share/HDA_DATA/config/.bashrc /root
cp /share/HDA_DATA/config/ld.so.conf /etc
/sbin/ldconfig

起動時に autorun.sh が呼び出されて,先ほどの設定が復活する.

参考サイト)
QNAPのNAS(TS-419P+)のカスタマイズ
Running Your Own Application at Startup

crontab

備忘録(ffmpegとは無関係)
(※QNAP_cronを使うを参考にした.ありがとうございます!)

/etc/config/crontab
/tmp/cron/crontabs/admin
の両方を変更.起動時に上から下にコピーされるらしい.

再起動しないのであれば両方のファイルを同時に変更してcronを再起動
/etc/init.d/crond.sh restart

パソコンからQNAPのasteriskに収容した050Plusで電話

自宅には光が引いてあるが,自宅からする仕事の電話では番号が伝わってしまう関係で別の番号を使いたい.
OCN モバイル one を会社で契約している関係で 050Plus も試しに契約していたが,音質が悪くて,とても仕事の電話では使えない.
PHS もイマイチ回線品質が悪くて微妙なのでやむを得ず自宅で個人契約の光回線の電話で電話していた.

なんとか自宅からの仕事関連の電話を会社契約の 050Plus で使えないかと試行錯誤した結果,まあうまくいったので備忘録として残しておく.

先ほども書いた通り,050Plus は Nexus7 で使うと音がいまいちで,特に相手側にかなり不評でエコーがかかっているとか雑音が入るとか散々である.

そのためにまず,050Plus を asterisk に収容するところから始める.
最初,raspberry pi に asterisk を入れて,050Plus を収容する設定をして動かしていた.
asterisk に050plus収容」や「asterisk をインストールして初期設定&050plus を外線に使う」の辺りを参照.いつもながら感謝.

ところが,これでも音質が悪い.
やっぱりダメかと諦めかけたとき,回線は光だし,wifi は十分スピード出ていると思うので,パソコンでやってみることにした.
(いや,Nexus7だって十分なスピードでネットにつながっているはずなのだが.)
実験してみると AGEPhone を使えば実用レベルの音質になることがわかった.zoiper も音質は悪くなかったが,なぜか着信ができなかったので途中で断念した.

また,別の件で QNAP の管理画面を触っているときに qpkg の中に asterisk が存在することに気づいたので,QNAP で動かすことにした.
これならわざわざ電話のためだけに raspberry pi をつけておく必要がなくなるからである.

ところが,qpkg の asterisk だとなぜか電話出来ない.
(というか,GUIの画面の設定方法がよく分からない.)

よく分からないが,ipkg で asterisk を install してみると動いた.
(QNAP に ssh でログインして,ipkg install asterisk18)
結果オーライである.

なお,/opt/ の下に入る.
設定ファイルは
/opt/etc/asterisk/sip.conf

[general]
context=default
port=5060
bindaddr=0.0.0.0
language=ja

; 050plus and tls
maxexpirey=3600
defaultexpirey=3600
context=default

tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/opt/etc/asterisk/keys/asterisk.pem
tlscafile=/opt/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
register => tls://<nicNm>:<sipPwd>:<sipID>@60.37.58.170:5061/100
;着信したら内線100を鳴らす

[050plus]
type=friend
secret=<sipPwd>
port=5061
defaultuser=<sipID>
fromuser=<nicNm>
host=60.37.58.170
;host=kar-f2fcp.050plus.com
fromdomain=050plus.com
context=default
insecure=invite,port
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw
callgroup=1
transport=tls
encryption=yes
nat=yes

[101]
type=friend
defaultuser=101
secret=<password>
canreinvite=no
host=dynamic

[102]
type=friend
defaultuser=102
secret=<password>
canreinvite=no
host=dynamic

リンク先とほぼ同じである.
<nicNm> <sipPwd> <sipID> は 050Plus の自分の数字.
探し方はAsteriskサーバで050plus収容などを参考に決めればよい.(感謝です.)
<password>は自分で適当に決める.

/opt/etc/asterisk/extenstions.conf

[globals]
;For 050plus 自分の電話番号
MYNUMBER=050xxxxxxxx

[default]
; Ring phones 100
exten => 100,1,Dial(SIP/101&SIP/102)
exten => 100,n,Hangup

;050plus
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(SIP/${EXTEN}@050plus,120,T)

exten => 101,1,Dial(SIP/101,30,r)
exten => 101,2,Hangup()

exten => 102,1,Dial(SIP/102,30,r)
exten => 102,2,Hangup()

/share/HDA_DATA/.qpkg/autorun/autorun.sh
の自動実行シェルに

/opt/sbin/asterisk -vvv &

を追加した.

これにより,050Plus も AGEPhone で外に電話がパソコンからかけられるようになった.
ちなみにマイクはアナログのマイクをUSBオーディオ変換ケーブルを通して使い,音はスピーカーから出している.
耳が痛くなることもなく快適だ.

スマホで外から家電話

外から家電話?

家の中からスマホでひかり電話が使えるなら,当然,外からだって使えるわな.
と思い,ちょっと検索してみたら,当然出てくる.

VPN を使えばいいのだが,なんと NTT から借りているホームゲートウェイ(VOIPゲートウェイやONU,ルーターが一体化したもの)に最近のものは VPN までついているようだ.

これは使わない手はない.
OCN モバイル one で外でも低速だがインターネットし放題状態だし.

で,早速 VPN の設定をしてみた.
例えば,「スマホの通話料を安く抑える方法。」などが参考になる.感謝.

ただ,AGEPhone で外から電話する時の IP アドレスが最初分からなくて,グローバルアドレスを指定してたりしたのだが,正解はローカルアドレス(ルーターの)であった.
当初プロファイルはローカルアドレスの一つでいいと思っていたのだが,そのままだとつながらなくて四苦八苦していた.

試行錯誤して分かったのは,同じプロファイルを使うとプロファイル管理画面で「再接続」しなくてはならないようだ.

中身の同じプロファイルを二つ用意する.

で,結局,プロファイルの管理画面で
ひかり電話(外)
ひかり電話(家)
と全く同じものをコピーして2つ用意するのが正解のようだ.
(名前だけ変えて中身は同じものである.)

外で VPN 接続した後は必ず,「ひかり電話(外)」を使い,家の中では VPN を外して,「ひかり電話(家)」を使う.
そうすれば,「再接続」させられることなく,普通に使える.

VPN でホスト名を指定する方法

通常のフレッツ光はIPアドレスが固定ではない.
つまりIPアドレスが変わるたびにVPNの設定を変更しなければならない.
これは面倒.
こういう場合は,Dynamic DNS を使うのだが,無料のサービスはほとんどないに等しいようだ.

幸い,「お名前.com」でドメインを取っているので「お名前.com」にDDNSサービスがないかを確認してみるとやっぱりあった.
ただし,専用の windows のクライアントソフトを使えとある.
家のパソコン使っているときに代わった場合はいいが,外出中に代わったらアウトである.

「なんて使えないんだ?」と思ったら,NECのルーターでも使えるらしい.
早速調べてみたら,私の持っているWR8700では使えないらしい...
WR8750から使えるとある.
「なんて使えないんだ?」

仕方ないのでいろいろ探したところ,「捨てる神あれば拾う神あり」である.
ググってみると,php でクライアントソフトを作って,2ch に投稿してくれている人がいた.

「ありがたや,ありがたや」
これさえあれば,raspberry pi から,レコードの更新が出来る!と思ったが,もっといいことに気が付いた.
持っている QNAP の TS-119PII にこの php のプログラムを入れれば勝手にやってくれるはずである.

ここで新たな問題発生.ipkg で php を入れてみたのだが,これがバージョンが古くて(5.2.x)で動かない.プログラムの修正をしてもいいが,どうしようかなとしばし考えていると,qpkg に入っている php が 5.5.21 になっている.「これ使えばいいじゃん.」ということで,ipkg からインストールしたものをアンインストールして,qpkg 版をインストール.
「おぉ,動くわ.」
当たり前だが,うれしい.

後は自動起動させてやれば完璧である.
これもググって,自動起動の設定も出来た.
(うちの場合は /share/HDA_DATA/.qpkg/autorun/autorun.sh で設定する.)

autorun.sh の内容

#!/opt/bin/bash
/opt/bin/nohup /usr/local/bin/dice/dice.php < /dev/null 2>&1 >> /var/log/ddnsupdate.log &

あ,nohup はないので,ipkg install coreutils で入れておく.

これで外にいる場合はVPNで使えば家の固定電話を外で携帯のように使うことが可能になった.

CuBox と QNAP TS-119PII を購入

(前回の「簡単にいい音で音楽を聴きたい.」の続きです.ハードウェア編.)

さて,DDC は手に入れたし,アンプとスピーカーもある.
後はパソコンと NAS があればほぼ完了である.

CuBox


まず,voyage MPD という Linux のディストリビューションがあることに気付いた.音楽再生する MPD(Music Player Daemon) というソフトにあわせて,OS 自体もチューニングしたものらしい.

ならば,「ファンレスの小さいパソコン買っておいとけばいいじゃない」と考え,小さいパソコンを探し始めると,PCオーディオ実験室というサイトを見つけた.
ここを熟読して,Voyage MPD Starter Kit を買う寸前まで行ったが,他のサイトなどもよくよく見比べているうちに CuBox というさらに小さいマシンを見つけた.
これにはピン!と来た.
(何度も出てくるが,直感的にピン!と来ないと行動できない人間なのである.)

CuBox
Cubox はイスラエルの会社が作っていて,直輸入するしかないらしい.一度浄水器を直輸入したことがあり,かなり満足度は高かったので,直輸入自体は問題ない.
ペイパル決済ということだが,口座もあって問題ない.
これは買うしかないなと思い,早速購入.(CuBox Pro の方.購入時は$177.99 USDであったが,現在$159.99(2013/6/6追記)に値下げされている.)
2月28日にサイトで購入して,届いたのは3月16日.
途中で追跡システムが動いていないようだったことにはちょっと焦ったが,全体としては問題はなかった.

梱包はこんな感じ.
CuBox

CuBox

全く問題ない.小さくて軽い.これはいい!!

普通に起動して,初期不良のないことだけは確かめ,音楽サーバー用の Linux を入れることにした.

NAS の選定


さて,前後して NAS の選定もした.
そもそも,なぜNASを買おうと思ったかというと,普通の Windows パソコンでも聴けて,かつオーディオ専用の CuBox の方でも同じ曲を聴きたいと思ったからである.
音楽はとにかく一つの場所に集中させてやり,聴きたい時は別の場所で別の機械でも聴けるようにすると管理が楽だからだ.

コンピュータがファンレスであるので,ここは当然ファンレスのNASかなと探してみると,どうも QNAP TS-119 が定番らしい.
HDD はうるさいし振動するので,SSDに変更しようとすると,61800円する.
いろいろノウハウが詰まっているらしいのだが,部品をバラバラで買うことを考えるとちょっと高い.
よく考えたら無線で繋げば別の場所におけるので少しぐらいうるさくても気にならないと考え,
QNAP TurboNAS TS-119PII をアマゾンで2万円弱で購入.
SSD は推奨されている中から安いものを探して,TS256GSSD25S-M [256GB/SSD/2.5インチ/MLC/SATA] をネットでこれも2万円弱で購入.
ファン付きだが,ファンレスよりも2万円安く購入できた.別の部屋に置けば問題ない.
実際,パソコンの近くにおいているとパソコンのファンの音の方がうるさいので気にならない.
オーディオは別の部屋でも聴けるようになっているので,そっちでは全く問題がない.

USBケーブル


短いUSBケーブルがちょうどなかったのだが,HiVi (ハイヴィ) 2013年 3月号 についているUSBケーブルはかなりお徳だとお店の人に教えてもらったのでとりあえず買ってみた.
正直,音が変わるとか変わらないとか分からないが,短くないと邪魔なのでちょうど良かった.

ハードウェア総括


さて,ここまででハードウェアはそろった.

DDC(hiFaceEvo) 4万5千円弱
パソコン(CuBox Pro) $177.99 USD
(上記リンク先で値段要確認.2013/6 時点で $159.99 USD)
NAS(TS-119PII) 2万円弱
SSD(TS256GSSD25S-M) 2万円弱
USBケーブル2000円弱

ここまでで10万ぐらい.NASとSSDを除いて実質6万ぐらい.

cubox4
これでネットワークプレーヤーの出来上がり.(ホコリが汚くてすみません.)

LINN の MAJIK DS (アンプなしモデル)がだいたい35万円弱なので,似たようなことが6万ぐらいで出来た.(LINN 使っても NAS と SSD は必要だから.)
さらにLINNより,小さくて軽いのがよい.

もちろん音は違うかもしれないが,その場で聴き比べないと私の耳では分からないので,十分満足

さて,次はソフトだが記事を分けることにする.