Asterisk AudioSocket

提供: VoIP-Info.jp
2026年9月24日 (木) 05:11時点におけるTakahashi (トーク | 投稿記録)による版 (ページの作成:「Asterisk 18~で実装されたTCPベースの『簡単な』オーディオ・ストリーム入出力。<br> <br> アプリケーション(app_audiosocket)とチャネルドライバ(chan_audiosocket)があるので注意。CODEC指定が可能なのはチャネルドライバのみ。<br> ==データフォーマット== 0 1 2 3..... PT LEN LEN Payload PT-ペイロードタイプ<br> LEN-ペイロード長(2byte)<br> Payload-ペイロード本体<…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Asterisk 18~で実装されたTCPベースの『簡単な』オーディオ・ストリーム入出力。

アプリケーション(app_audiosocket)とチャネルドライバ(chan_audiosocket)があるので注意。CODEC指定が可能なのはチャネルドライバのみ。

データフォーマット

0    1    2    3.....
PT   LEN  LEN  Payload

PT-ペイロードタイプ
LEN-ペイロード長(2byte)
Payload-ペイロード本体

最小のデータは切断(0x00,0x00,0x00)の3byte

ペイロードタイプ

注意:appで使えるのはPT=0x10の16bit 8kHzのみ。

0x00 – 切断(ソケットのクローズでも可)
0x01 – ペイロードはUUID(16byteバイナリ)
0x03 – ペイロードは1byte の DTMF(ASCII)
0x10 – ペイロードは符号付リニア, 16-bit, 8kHz, モノラル PCM
0x11 – ペイロードは符号付リニア, 16-bit, 12kHz, モノラル PCM
0x12 – ペイロードは符号付リニア, 16-bit, 16kHz, モノラル PCM
0x13 – ペイロードは符号付リニア, 16-bit, 24kHz, モノラル PCM
0x14 - ペイロードは符号付リニア, 16-bit, 32kHz, モノラル PCM
0x15 - ペイロードは符号付リニア, 16-bit, 44.1kHz, モノラル PCM
0x16 - ペイロードは符号付リニア, 16-bit, 48kHz, モノラル PCM
0x17 - ペイロードは符号付リニア, 16-bit, 96kHz, モノラル PCM
0x18 - ペイロードは符号付リニア, 16-bit, 192kHz, モノラルPCM
0xff – エラー:ペイロードはエラーコードを含む

app_audiosocket

サンプル

exten => 7000,1,NoOp
exten => 7000,n,Answer()
exten => 7000,n,Set(MYUUID=${UUID()})
exten => 7000,n,Audiosocket(${MYUUID},127.0.0.1:9093)
exten => 7000,n,Hangup

UUID形式で識別子を送出する必要がある。
app_audiosocketはオートアンサしないので明示Answer()する必要がある。

chan_audiosocket

サンプル

exten => 7000,1,NoOp
exten => 7000,n,Set(MYUUID=${UUID()})
exten => 7000,n,Dial(Audiosocket/127.0.0.1:9093/${MYUUID}/c(slin48))
exten => 7000,n,Hangup

テストコード

Audiosocketで受信し、単純エコーバックするだけのコード。
https://github.com/takao-t/asterisk-experimental/tree/main/audiosocket

ヘッダを正しく処理すれば何の問題もなく簡単に使える単なるTCPのストーリームオーディオ。ただし、実際に試した範囲では以下の制限がある模様。

  • Asterisk「が」受け取るストリームはUUIDやDTMFは受け付けられず、オーディオストリームだけの模様。
  • つまりAsteriskはAudioSocketでDTMFは受け取れない(みなし音声、インバンドならいけるかも?)。
  • uLawの電話機からAudiosocketのSlin 48kHz等もできるが、当然、音質は良くならないはず。