Asterisk chan websocketのソースを表示
←
Asterisk chan websocket
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます: メール確認された利用者、
管理者
。
このページのソースの閲覧やコピーができます。
[[カテゴリ:Asterisk]] [[カテゴリ:websocket]] Asteriskの新しいチャネルとしてWebsocketチャネルが追加された。<br> 使用可能なバージョンは 23.0.0,22.6,0, 21.11.0, 20.16.0 のそれぞれ以降のバージョン。メジャーバージョンによる追加ではなく、マイナーバージョンの途中から追加されているので注意。<br> 従来からあるPjSIPのws/wssではなく、チャネルドライバとしてのWebsocket。 :https://docs.asterisk.org/Configuration/Channel-Drivers/WebSocket/?h=chan_websocket ==関連するモジュール== chan_websocket<br> res_websocket_client<br> *CLI> core show channeltype WebSocket -- Info about channel driver: WebSocket -- Device State: no Presence State: no Indication: no Transfer : no Capabilities: (codec2|g723|ulaw|alaw|gsm|g726|g726aal2|adpcm|slin|slin12|slin16|slin24|slin32|slin44|slin48|slin96|slin192|lpc10|g729|speex|speex16|speex32|ilbc|g722|siren7|siren14|g719|opus|jpeg|png|h261|h263|h263p|h264|h265|mpeg4|vp8|vp9|red|t140|t38|silk8|silk12|silk16|silk24) Digit Begin: no Digit End: yes Send HTML : no Image Support: no Text Support: no *CLI> module show like res_websocket_client.so Module Description Use Count Status Support Level res_websocket_client.so WebSocket Client Support 2 Running core ==注意点== Websocket接続ではあるものの、リアルタイムの場合には、RTPと同様に20ミリ秒のペーシング(1フレームあたり20ミリ秒)の送出間隔を守ること。AsteriskからWebsocketへの送出はこの20ミリ秒フレームで送られるが、外部からAsteriskに送りつける場合にも20ミリ秒を守る必要がある。これが乱れると音声の品質低下、あるいは再生されないといった問題が発生する。この問題は割とハマるので注意。<br> 20ミリ秒が守れない場合にはバッファリングモードで使用すること。<br> ==設定== AsteriskからWebsocketに対して発信する場合の例。<br> websocket_client.conf に以下のように記述する。"ws-connection1"が識別名。 [ws-connection1] type = websocket_client uri = ws://127.0.0.1:8765 protocols = media connection_type = per_call_config connection_timeout = 500 reconnect_interval = 500 reconnect_attempts = 5 tls_enabled = no websocket_client.conf を変更した場合には CLI から module reload res_websocket_client.so を実行すると設定が反映される。<br> <br> Websocketに対して発信する場合には以下のように書く exten => 9805,1,NoOp exten => 9805,n,Dial(Websocket/ws-connection1/c(slin16)) exten => 9805,n,Hangup テクノロジにWebsocket、/の後に識別名、その後にCODECを指定。c(slin16)はCODECにslin16(16kHzサンプリング 16bit LEのリニアPCM)の意味。CODECはチャネルで指定できるものが使えるが、Websocketのアプリケーション側で解釈できるものを使うこと。<br> なお、AudioSocketではslin(8kHz 16bit LE)しか使えないが、Websocketではslin16の16kHzが使える。<br> <br> Asteriskを着信側に使う場合はちょっと面倒なので省略。使い勝手はあまりよくない。 ==Websocket側サンプルコード== Websocketで待ち受け、ALSAデバイスで通話するサンプル。<br> https://github.com/takao-t/asterisk-experimental/blob/main/websokect/ws_audio_server.py<br> Websocketで待ち受け、音声をエコーバックするサンプル。<br> https://github.com/takao-t/asterisk-experimental/blob/main/websokect/ws_echo.py<br> <br> AsteriskのWebsocketチャネルではバイナリ(音声)データとテキストをサポートしている。テキストデータではステータスやコマンド等をやりとりできるので、サンプルコードに入れてあるが、この挙動(ANSWER)は今のところ効かない。Asterisk側の問題ではないかと思われる。<br> Dial時オプションに'n'を付けるとAuto Answerしないとドキュメントに書かれているものの、Dial(Websocket/ws-connection1/c(slin16)n) のように書いてもAnswerしてしまうので、サンプルコード中の"ANSWER"送信は実際には効かないが、コマンド送りの例として残してある。<br> <br> ペーシングに関する参考情報:<br> :ALSAオーディオを使用している場合、送出のタイミングはオーディオデバイスに依存しているので20ミリ秒が守られる :エコーバックの場合にはAsteriskが送出してくる音声をそのまま返すのでAsteriskのタイミングで動作している ==バッファリングモード== 20ミリ秒のペーシングが行えない場合には、Asteriskのバッファを使う手段が使える。この場合、以下の手順で送信する(Websocket->Asterisk)。要するにXON/XOFFによる制御なのでシリアル制御に慣れている人にはおなじみの方法。 WS->Asterisk TEXTでSTART_MEDIA_BUFFERINGを送信 Asteriskがバッファリング開始 WS->Asteriskに音声データ送信 Asterisk->WS バッファが9割になるとXOFF送出 WS->Asteriskは送出を停止 Asterisk->WS バッファが減ったらXON送出 Asterisk->WSは送出を再開 バッファリングモードのサンプルコード :https://github.com/takao-t/asterisk-experimental/blob/main/websokect/ws_buffer_test.py 使用例としてはAIが生成した音声ファイルを送り付けて再生する場合など。基本XON/XOFFに従って制御すれば大丈夫そうである。<br> <br> ドキュメントによれば内部バッファは1,000フレーム。バッファのXON/XOFFの閾値はGET_STATUSでみると STATUS queue_length:2 xon_level:800 xoff_level:900 queue_full:false bulk_media:false media_paused:false 900でXOFF、800でXONするので、100フレーム以上をまとめて送るのはあまり良くなさそうな気がする。そもそもまとめて送るというよりも、ペーシングに配慮しないための機能が本来なのかも。 ==DTMF== AsteriskからWebsocketにDTMFはTEXTで送られる。エコーバックのサンプルプログラムで試してみるとわかるが、以下のようなテキスト情報が得られる。 --- WebSocket エコーサーバ --- サーバ: ws://0.0.0.0:8765 ---------------------- Ctrl+C で停止します。 クライアント ('127.0.0.1', 52856) が接続しました。 受信 (TEXT): MEDIA_START connection_id:ws-connection1 channel:WebSocket/ws-connection1/0x7f46e8024170 format:slin16 optimal_frame_size:640 ptime:20 受信 (TEXT): DTMF_END digit:9 受信 (TEXT): DTMF_END digit:6 受信 (TEXT): DTMF_END digit:5 受信 (TEXT): DTMF_END digit:1
Asterisk chan websocket
に戻る。
ナビゲーション メニュー
個人用ツール
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
ヘルプ
広告
サイトコンテンツ
コミュニティ
Asterisk
Asterisk 20
Asterisk 22
IP電話機
購入情報
導入事例
回線接続
ベンダー
ひかり電話
セキュリティ
イベント情報
スペシャル
Asterisk pjsip
ABS
黒電話 ハック
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報