「Chan console」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(ページの作成:「こんなもの誰が使っているのかわかりませんが、使っている人もいるかもしれない&ハマりポイントがあったのでメモ<br> chan_als...」)
 
 
(同じ利用者による、間の11版が非表示)
1行目: 1行目:
 
こんなもの誰が使っているのかわかりませんが、使っている人もいるかもしれない&ハマりポイントがあったのでメモ<br>
 
こんなもの誰が使っているのかわかりませんが、使っている人もいるかもしれない&ハマりポイントがあったのでメモ<br>
 
chan_alsa、chan_oss等はもともとPBX自体にヘッドセット等を付けて『交換台』代わりに使うための機能ではなかったかと思われます。それ以外にPC(サーバ)にスピーカーを付けてページングに使うとか、PCのサウンド機能を使うことで出来ることは色々あります。<br>
 
chan_alsa、chan_oss等はもともとPBX自体にヘッドセット等を付けて『交換台』代わりに使うための機能ではなかったかと思われます。それ以外にPC(サーバ)にスピーカーを付けてページングに使うとか、PCのサウンド機能を使うことで出来ることは色々あります。<br>
 +
これまでAsteriskが直にALSAを叩いてた(chan_alsa)のをやめて、間にpulseaudioを使うようにしたのではないかと思われます(もともとそうだったのかもですがALSA直はやめたかったのかも)。<br>
 
Asteriskのチャネルとしてはextended扱い。なおAsterisk 20.x系で確認しています。
 
Asteriskのチャネルとしてはextended扱い。なおAsterisk 20.x系で確認しています。
 
==必要パッケージ==
 
==必要パッケージ==
7行目: 8行目:
 
                             Asterisk Module and Build Option Selection
 
                             Asterisk Module and Build Option Selection
 
                         **************************************************
 
                         **************************************************
 
+
 
                                 Press 'h' for help.
 
                                 Press 'h' for help.
 
+
 
                                 --- Core ---
 
                                 --- Core ---
 
                             [*] chan_bridge_media
 
                             [*] chan_bridge_media
26行目: 27行目:
 
                             [ ] chan_sip
 
                             [ ] chan_sip
 
                             [ ] chan_skinny
 
                             [ ] chan_skinny
 
+
 
+
 
                         Console Channel Driver
 
                         Console Channel Driver
 
+
 
+
 
                         Depends on: portaudio(E) <=**
 
                         Depends on: portaudio(E) <=**
 
portaudioが必要とされます。Debianだと
 
portaudioが必要とされます。Debianだと
40行目: 41行目:
 
  # apt install pulseaudio
 
  # apt install pulseaudio
 
してpulseaudioも入れてください。
 
してpulseaudioも入れてください。
 +
==pulseaudioの設定==
 +
通常、pulseaudioは非rootで個別にデーモン起動するため、サーバで使うために設定してやる必要があります。まず、asteriskがpulseaudioにアクセスできるようにグループに足してやります。ユーザ/グループ pulseaudio はpulseaudioのインストール時に作成されます。<br>
 +
/etc/group のpulseaudio に asteriskを足します。コマンドでやってもOK。
 +
pulse:x:124:asterisk
 +
pulse-access:x:125:asterisk
 +
pulseaudioをデーモンとして起動するため /etc/systemd/system に pulseaudio.service という名前で以下の内容のファイルを作ります。
 +
[Unit]
 +
Description=Pulse Audio
 +
 +
[Service]
 +
Type=simple
 +
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
これで systemctl daemon-reload して systemctl start pulseaudio すれば起動します。システム再起動時に自動起動されるように systemctl enable pulseaudio も行っておきましょう。
 +
==ALSAの設定==
 +
pulseaudioはバックエンドにALSAを使う(他も使える?)ので、もし、サウンドカードが複数あったりオンボード+USBのような構成をしている場合にはALSA側で、どれがdefaultになるか設定しておきます。<br>
 +
参考 : https://www.alsa-project.org/wiki/Setting_the_default_device<br>
 +
以下の例は環境によって異なりますので注意してください。<br>
 +
# cat /proc/asound/cards
 +
  0 [PCH            ]: HDA-Intel - HDA Intel PCH
 +
                      HDA Intel PCH at 0xf7c00000 irq 32
 +
  1 [Device        ]: USB-Audio - USB Audio Device
 +
                      C-Media Electronics Inc. USB Audio Device at usb-0000:00:1d.0-1.4, full speed
 +
例ではデバイス0がオンボード(intel)で、デバイス1がUSBのC-Mediaサウンドです。もし、デバイス1をデフォルトにしたければ、/etc/asound.conf ファイルを作成し、以下のようにします。
 +
defaults.pcm.card 1
 +
defaults.ctl.card 1
 +
これでデバイス1がデフォルトになります。(おそらく再起動しないとダメ)
 +
==動作確認==
 +
ここまでの設定でたぶん大丈夫だと思いますが、Asteriskではない部分で動作を確認しておきます。まず alsamixer を何も指定せずに起動すると pulseaudio を制御対象として扱うはずです。<br>
 +
[[画像:Alsamix-01.png | 320px]]<br>
 +
alsamixer -c 1 と明示的にデバイス1を指定すれば、ここの例ではUSB Audioのコントロールになります。<br>
 +
[[画像:Alsamix-02.png | 320px]]<br>
 +
これで準備は大丈夫なはずです。
 +
==Asteriskの設定==
 +
Asteriskを ./configure からやりなおし make manuselect で chan_console をコンパイルするように指定してから、再度コンパイル/インストールを行います。<br>
 +
chan_consoleの設定ファイルは configs/samples の下にありますが、console.conf は以下のような内容です。ジッタバッファが要るのか要らないのか調整中ですが・・・
 +
[general]
 +
jbenable = yes
 +
jbmaxsize = 200
 +
jbresyncthreshold = 1000
 +
jbimpl = fixed
 +
jbtargetextra = 40
 +
jblog = no
 +
 +
[default]
 +
input_device = pulse
 +
output_device = pulse
 +
 +
autoanswer = yes
 +
context = default
 +
extension = s
 +
callerid = Console<9999>
 +
language = ja
 +
overridecontext = no
 +
mohinterpret = default
 +
active = yes
 +
 +
ダイヤルする場合は他のテクノロジと同じです。
 +
exten => 9999,1,Dial(CONSOLE/default)
 +
とすればコンソールデバイスに対してダイヤルできます。<br>
 +
上の例では autoanswer を yesにしているのでコンソールに対してダイヤルすると即応答します。ページングスピーカー代わりに使うならこの方法で良いかも。
 +
 +
==WIP==
 +
音がブチブチするのが時々発生して完全な解決に至ってません。aplay とかで再生するときれいに再生されるが、Asteriskから使うとブチブチします。<br>
 +
→環境依存あるいはオーディオインタフェース依存かもしれない。よくわからん!状況としてはAsteriskがRTPのタイミングがうまく取れていないような挙動の音になるようなならないような・・・

2024年9月12日 (木) 11:45時点における最新版

こんなもの誰が使っているのかわかりませんが、使っている人もいるかもしれない&ハマりポイントがあったのでメモ
chan_alsa、chan_oss等はもともとPBX自体にヘッドセット等を付けて『交換台』代わりに使うための機能ではなかったかと思われます。それ以外にPC(サーバ)にスピーカーを付けてページングに使うとか、PCのサウンド機能を使うことで出来ることは色々あります。
これまでAsteriskが直にALSAを叩いてた(chan_alsa)のをやめて、間にpulseaudioを使うようにしたのではないかと思われます(もともとそうだったのかもですがALSA直はやめたかったのかも)。
Asteriskのチャネルとしてはextended扱い。なおAsterisk 20.x系で確認しています。

必要パッケージ

make menuconfigすればわかりますが

                       **************************************************
                           Asterisk Module and Build Option Selection
                       **************************************************

                                Press 'h' for help.

                                --- Core ---
                            [*] chan_bridge_media
                            [*] chan_dahdi
                            [*] chan_iax2
                            XXX chan_motif
                            [*] chan_pjsip
                            [*] chan_rtp
                                --- Extended ---
                            [*] chan_audiosocket
                            [*] chan_console
                            [*] chan_unistim
                                --- Deprecated ---
                            [ ] chan_alsa
                            [ ] chan_mgcp
                            [ ] chan_sip
                            [ ] chan_skinny


                       Console Channel Driver


                       Depends on: portaudio(E) <=**

portaudioが必要とされます。Debianだと

portaudio19-dev - Portable audio I/O - development files

なので

# apt install portaudio19-dev

してから ./configure しなおせば chan_console が選択できるようになります。 が、しかし実はこれだけでは動かず、pulseaudioがないとダメなようです。もし、要らない方法を見つけた人がいたら教えてください。

# apt install pulseaudio

してpulseaudioも入れてください。

pulseaudioの設定

通常、pulseaudioは非rootで個別にデーモン起動するため、サーバで使うために設定してやる必要があります。まず、asteriskがpulseaudioにアクセスできるようにグループに足してやります。ユーザ/グループ pulseaudio はpulseaudioのインストール時に作成されます。
/etc/group のpulseaudio に asteriskを足します。コマンドでやってもOK。

pulse:x:124:asterisk
pulse-access:x:125:asterisk

pulseaudioをデーモンとして起動するため /etc/systemd/system に pulseaudio.service という名前で以下の内容のファイルを作ります。

[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target

これで systemctl daemon-reload して systemctl start pulseaudio すれば起動します。システム再起動時に自動起動されるように systemctl enable pulseaudio も行っておきましょう。

ALSAの設定

pulseaudioはバックエンドにALSAを使う(他も使える?)ので、もし、サウンドカードが複数あったりオンボード+USBのような構成をしている場合にはALSA側で、どれがdefaultになるか設定しておきます。
参考 : https://www.alsa-project.org/wiki/Setting_the_default_device
以下の例は環境によって異なりますので注意してください。

# cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf7c00000 irq 32
 1 [Device         ]: USB-Audio - USB Audio Device
                      C-Media Electronics Inc. USB Audio Device at usb-0000:00:1d.0-1.4, full speed

例ではデバイス0がオンボード(intel)で、デバイス1がUSBのC-Mediaサウンドです。もし、デバイス1をデフォルトにしたければ、/etc/asound.conf ファイルを作成し、以下のようにします。

defaults.pcm.card 1
defaults.ctl.card 1

これでデバイス1がデフォルトになります。(おそらく再起動しないとダメ)

動作確認

ここまでの設定でたぶん大丈夫だと思いますが、Asteriskではない部分で動作を確認しておきます。まず alsamixer を何も指定せずに起動すると pulseaudio を制御対象として扱うはずです。
Alsamix-01.png
alsamixer -c 1 と明示的にデバイス1を指定すれば、ここの例ではUSB Audioのコントロールになります。
Alsamix-02.png
これで準備は大丈夫なはずです。

Asteriskの設定

Asteriskを ./configure からやりなおし make manuselect で chan_console をコンパイルするように指定してから、再度コンパイル/インストールを行います。
chan_consoleの設定ファイルは configs/samples の下にありますが、console.conf は以下のような内容です。ジッタバッファが要るのか要らないのか調整中ですが・・・

[general]
jbenable = yes
jbmaxsize = 200
jbresyncthreshold = 1000
jbimpl = fixed
jbtargetextra = 40
jblog = no

[default]
input_device = pulse
output_device = pulse

autoanswer = yes
context = default
extension = s
callerid = Console<9999>
language = ja
overridecontext = no
mohinterpret = default
active = yes

ダイヤルする場合は他のテクノロジと同じです。

exten => 9999,1,Dial(CONSOLE/default)

とすればコンソールデバイスに対してダイヤルできます。
上の例では autoanswer を yesにしているのでコンソールに対してダイヤルすると即応答します。ページングスピーカー代わりに使うならこの方法で良いかも。

WIP

音がブチブチするのが時々発生して完全な解決に至ってません。aplay とかで再生するときれいに再生されるが、Asteriskから使うとブチブチします。
→環境依存あるいはオーディオインタフェース依存かもしれない。よくわからん!状況としてはAsteriskがRTPのタイミングがうまく取れていないような挙動の音になるようなならないような・・・