Orange Pi PCには、デフォルトでマイク・IR受光部が備わっています。これを活用したIP電話をOrange Pi PCで構築します。ここではインストールから稼働するまでの問題とその対処法を時系列で掲載します。VoIPサービスにはLinphoneを採用します。
linphone-cli
https://pkgs.org/download/linphone-cli
Linphone is an open source SIP Phone, available on mobile and desktop environments (iOS, Android, Windows Phone 8, GNU/Linux, Windows Desktop, MAC OSX) and on web browsers.
オープンソースで各OSに対応していること、ターミナル上でのコマンド制御ができること、サービスの歴史などが採用理由です。
VoIP LinphoneをOrange Pi PCにインストール
sudo apt-get install linphone
起動コマンド
linphonec
以下エラーメッセージへの対応。
https://lists.nongnu.org/archive/html/linphone-developers/2009-07/msg00018.html
ortp-error-snd_pcm_avail_update: Broken pipe
ortp-error-*** alsa_can_read fixup, trying to recover
ALSA lib pcm.c:7843:(snd_pcm_recover) overrun occurred
設定ファイル ~/.linphonerc 内の
各コーディックセクション (pcmu、pcmaは除く) named audio_codec_%i を enable=0 とします。
.linphonerc設定ファイルのヒント
SIPセクション
ポートの設定によりSIPによるユーザ認証ができない場合があります。
[sip]
sip_port=0 --->"0" means inactive
sip_tcp_port=5060
sip_tls_port=0
または、
[sip]
sip_port=5060
sip_tcp_port=0
sip_tls_port=0
デーモンでの起動に設定ファイルを使用する場合。
linphonecsh init -c <path to config file>
参照マニュアル
http://www.linphone.org/technical-corner/linphone/documentation
サウンドセクションヒント
オーディオ再生中にリングトーンが再生しない場合に注意。
ALSAのミキサーセッティングも必要。
<— … の箇所はコメントのため削除して下さい。
[sound]
ringer_dev_id=ALSA: default device
playback_dev_id=ALSA: audiocodec <--- default device or audiocodec
capture_dev_id=ALSA: audiocodec
echocancellation=0
ec_delay=0
ec_tail_len=60
ec_frame_size=128
#alsadev=audiocodec <----コメントアウト
remote_ring=/usr/share/sounds/linphone/ringback.wav
local_ring=/usr/share/sounds/linphone/rings/nokia_tune_2014.wav
playback_gain_db=10 <--- arbitrary value
mic_gain_db=10 <--- arbitrary value
ALSAマルチ音声出力対応
/etc/asound.conf を作成してマルチ音声に対応します。
まず以下コマンドでサウンドデバイスを確認します。
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: SUNXI-CODEC sndcodec-0 []
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: sndhdmi [sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
3.5mmオーディオジャック出力はデバイス名がaudiocodec, card 0, device 0 となります。
この場合、以下のasound.confにはhw:0,0と指定します。hw:[card],[device]
HDMIの場合はhw:1,0となります。
3.5mmオーデイオジャックのみで音声の同時再生をする場合は、/etc/asound.confは以下のようになります。
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:1,0" # "hw:1,0" means HDMI change to "hw:0,0" for analog lineout jack output
period_time 0
period_size 1024
buffer_size 4096
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.dmixer {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
ソフトボリュームの追加
https://wiki.archlinuxjp.org/index.php/Advanced_Linux_Sound_Architecture/トラブルシューティング
pcm.!default {
type plug
slave.pcm "softvol"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,0"
period_time 0
period_size 4096
buffer_size 131072
rate 50000
}
bindings {
0 0
1 1
}
}
pcm.dsnooper {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,0"
channels 2
period_time 0
period_size 4096
buffer_size 131072
rate 50000
}
bindings {
0 0
1 1
}
}
pcm.softvol {
type softvol
slave { pcm "dmixer" }
control {
name "Master"
card 0
}
}
ctl.!default {
type hw
card 0
}
ctl.softvol {
type hw
card 0
}
ctl.dmixer {
type hw
card 0
}
Linphone起動スクリプト作成
sudo pico /etc/init.d/linphonecsh
#!/bin/sh
### BEGIN INIT INFO
# Provides: linphone
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts Linphone daemon.
# Description: Linphone is used to call and receive message on VoIP System.
### END INIT INFO
sudo linphonecsh init -c /to_configfile_dir/.linphonerc
実行権の付与
sudo chmod +x /etc/init.d/linphonecsh
起動時スクリプトの登録
sudo update-rc.d linphonecsh defaults