NanoPi NEOをSIP電話機にする 前編

NanoPi NEOゑSIP雺詰橞なじり

NanoPiてどぎづめげね扊ねヮヲホ・トゲヲビヤ・ゾてゃらぞぃげでね䷿っか導垊SIPギヨィァヲデ。

甧愎ざぞめね。
三ね冘眞なぁりUSB掤継ゾィブねノヲトズヂデ。
ざおざ、げねノヲトズヂデ实のSkypeどとねヌヂデ雺詰ねノヲトズヂデでざづWindows甧でざづ敯白内て貨壱ごるづぃぞめねたかWindows PCな繊ぃてめ內ぎ佾ぇどおぢぞ仢牨。USB掤継ゑ衋ぅでテハィジか掤継ごるぞげでの誌譗ごるりめねね、涱晵町靡衧礹焠ざ、內ホゾヲ双忛焠ざポィギヺジビ・オ・双忛焠ざ、っぽらゥヲでめジヲでめ觿ゎどぃ斆鎭。10〜5平ぺと剌な賻兤ざづおよ1庥め佾ぇづぃどぃねてNanoPiな繊ぃて勔ぎお丌昍。

げね託亊ねNanoPi NEOて佾甧ざづぃりOSのLinux nanopineo 4.10.3-sun8i #2 SMP Tue Mar 21 17:30:21 JST 2017 armv7l GNU/Linux、げね託亊佛戏剌旤ね3朇21晁炸て替斯ねゼ・ジてピリヒリトざぞMainline糺ねめね。armbianねゴィデて酌市ごるづぃりねでのオ・ヌリメシヤ・リね遷抝か尐ざ達ぅおめざるどぃ。

USBノヲトズヂデゑOS赶勔渇まねNanoPi NEOな掤継じり。(三ね冘眞ね犵慊)

令上、侊なょぢづゲポヲト实衋の衋頬か#どよsudo仗がおジ・ハ・ュ・サ・て、$どよ䷿舫ュ・サ・てでぃぅ愎呲。

$ dmesg
[61363.162468] usbcore: registered new interface driver snd-usb-audio
[61665.443319] usb 2-1: USB disconnect, device number 2
[61901.092898] usb 2-1: new full-speed USB device number 3 using ohci-platform
[61901.595047] usb 2-1: New USB device found, idVendor=04b4, idProduct=0307
[61901.595082] usb 2-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[61901.715947] hid-generic 0003:04B4:0307.0002: hiddev0,hidraw0: USB HID v1.10 Device [HID 04b4:0307] on usb-1c1d400.usb-1/input3

OS赶勔律なノヲトズヂデゑ掤継ざぞねてdmesgて替律ね郧刅ゑ碹誌。USBな佔お斯ざぃテハィジゑ誌譗ざづぃり。HIDでぃぅげでどねて "Raw Access to USB and Bluetooth Human Interface Devices" でぃぅげでなどり。艮ご氖てゃぢおぃどゾィブねテハィジた。dmesgねムヂズ・シゑ俠甧じりどよ /dev/hiddev0お/dev/hidraw0てァギズジてがり筇。/devゑ覊りでhiddev0の屄どぎづhidraw0か屄ぞ。

$ cat /dev/hidraw0

げね犵慊てUSBノヲトズヂデねホゾヲゑァルゲル抻ざづまりで抻ざぞゾィマヲクてゾ・マドリな愎呲丌昍ね斆孖かハハヂで凹づぎるはOK.
Ctrl+Cて絁亅。

韲壯呧らゑ碹誌じり。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: U0x4b40x307 [USB Device 0x4b4:0x307], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: U0x4b40x307 [USB Device 0x4b4:0x307], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

䷿忛佾ぇりぢぼぃ氖ど槗孏。

PJSIP

SIPねゼピデゥェァの叕ら敡ぇすPJSIPゑ佾甧じり。PJSIPねarmbian甧バヂグ・シの描侚ごるづぃどぃょぅどねて臩刅てヒリトじり。armbianて佔お夦がむどァブラゑヒリトじり堳吇のpkg-configゃlibtoolの替位陏兤るづぉぎ。PJSIPどよlibpjproject-devゑ迼功じりで絏槊揂ぅ筇。ぜね仕ゴゥヲト閡俁ねヨィフヨラゑ忄覀どたぐ迼功。libsndobj-dev, libgsm1-dev, libsamplerate0-dev, libspeex-dev, libesd0-dev, libsndfile1-devげねぁぞらゑ兤るるはぃぐり筇。(みざれ覀よどぃねかぁりおめ)
NanoPiて佔おゃれぅで怜ぢぞよヨスバィおォルヲシバィてゃぢづぃり亹ね託亊ゑククりで叁耂などり筇。ぞたざ、PJSIPねヒリトな忄覀どバヂグ・シでざづlibcelt-devゑ挘けづぃりベ・シのNanoPiでarmbianね絃ま吇ゎずてのぁぽら叁耂などよどぃおめ。

# apt install subversion
$ svn checkout http://svn.pjsip.org/repos/pjproject/trunk
$ cd trunk 
$ ./configure --help  ←挆宙叮胼どォブザユヲゑ碹誌ざづぉぎ
$ ./configure --disable-video --disable-libwebrtc ←NanoPi NEOての覀よをてざゆ
$ ./make dep
$ ./make
$ cd ~/trunk/pjsip-apps/bin ←实衋叮胼どピ゠ィリのげげなぁり

詥じたぐどねてmake installのざづぃどぃ。

兇すの凹杤ぞPJSIPねヅジデッ・リゑ实衋。(实衋ピ゠ィリ同の璯墂なょり)

$ ./pjsystest-armv7l-unknown-linux-gnueabihf
丬畤
M E N U :
---------
0: Tests
  00: Run test wizard
  01: Device Test
  02: Play Tone
  03: Play WAV File1
  04: Play WAV File2
  05: Record Audio
  06: Latency Test
  07: AEC/AES Test

  09: Exit
1: Options
  10: View Devices
  11: View Settings

Enter the menu number: 

ムナヤ・ね2桀ね敯孖ゑ兤劚ざづぜるそるヅジデゑ实衋。
ムィヲムナヤ・ね02ゑ实衋ざづノヲトズヂデね耲な归づり斸およ「ブ・・ ブ・・」でぃぅ韲か聝げぇどぃでだゆぢで絵朚。 03ゑ实衋ざづノヲトズヂデね耲な归づり斸およ甶怦ね壯てthank you forヺヺヺでぃぅムヂズ・シか聝げぇづげどぃでだゆぢで絵朚。
ぃするねヅジデめムナヤ・て遷抝律な1ゑ抻ざづヅジデ閊姊1て絁亅、OKどよ1ゑ抻じでぃぅょぅど浀る。NanoPiてゃりで05ねRecord Audioて"Master/sound Underflow, buf_cnt=1, will generate 1 frame"か夦野な凹り。っぽらポィギて韲ゑ拽ぅ斸の啎顋ァラ。实隚ポィギて拽ぢぞ韲の盚夦どヒ・カ・韲でネィスか兤ら、喊ぢぞ壯の「ヮルヮルノ ゥダヤゥシヲタ」まぞぃど愞し。

PJSIPね這詰ァブラゑ勔おざづまり。

$ ./pjsua-armv7l-unknown-linux-gnueabihf --help  ←挆宙叮胼どォブザユヲゑ衧礹ざづまり
衧礹眀畤

$ ./pjsua-armv7l-unknown-linux-gnueabihf         ←ォブザユヲ焠ざて实衋ざづまり

丬畤

>>>>
Account list:
  [ 0] <sip:192 .168.0.64:5060>: does not register
       Online status: Online
 *[ 1] </sip:192><sip:192 .168.0.64:5060;transport=TCP>: does not register
       Online status: Online
Buddy list:
 -none-

+=============================================================================+
|       Call Commands:         |   Buddy, IM & Presence:  |     Account:      |
|                              |                          |                   |
|  m  Make new call            | +b  Add new buddy       .| +a  Add new accnt |
|  M  Make multiple calls      | -b  Delete buddy         | -a  Delete accnt. |
|  a  Answer call              |  i  Send IM              | !a  Modify accnt. |
|  h  Hangup call  (ha=all)    |  s  Subscribe presence   | rr  (Re-)register |
|  H  Hold call                |  u  Unsubscribe presence | ru  Unregister    |
|  v  re-inVite (release hold) |  t  ToGgle Online status |  >  Cycle next ac.|
|  U  send UPDATE              |  T  Set online status    |  < Cycle prev ac.|
| ],[ Select next/prev call    +--------------------------+-------------------+
|  x  Xfer call                |      Media Commands:     |  Status & Config: |
|  X  Xfer with Replaces       |                          |                   |
|  #  Send RFC 2833 DTMF       | cl  List ports           |  d  Dump status   |
|  *  Send DTMF with INFO      | cc  Connect port         | dd  Dump detailed |
| dq  Dump curr. call quality  | cd  Disconnect port      | dc  Dump config   |
|                              |  V  Adjust audio Volume  |  f  Save config   |
|  S  Send arbitrary REQUEST   | Cp  Codec priorities     |                   |
+-----------------------------------------------------------------------------+
|  q  QUIT   L  ReLoad   sleep MS   echo [0|1|txt]     n: detect NAT type     |
+=============================================================================+
You have 0 active call
>>> 
</sip:192>

ムナヤ・か衧礹ごるりねて叕ら敡ぇすSIPゴ・ハな掤継ざづまり。ァオゥヲデ閡俁の史三ねAccountなぁり。+a [Enter]て臩刅ね(挀ぢづぃり) SIPァオゥヲデゑ挆宙ざづSIPゴ・ハな掤継じり。
令上ね实衋侊、SIPゴ・ハかsip.example.comでじり。NanoPiて佾甧ざづぃりIPァトルジの192.168.0.64でじり。臩刅ねSIPァオゥヲデか4321てバジヮ・トかsecretpasswordでじり。惄堰か趲らどぃでげれのヅガデ・て艮ぃ。

>>> +a  
Your SIP URL: (empty to cancel): sip:4321@192.168.0.64
URL of the registrar: (empty to cancel): sip:asterisk@sip.example.com
Auth Realm: (empty to cancel): *
Auth Username: (empty to cancel): 4321
Auth Password: (empty to cancel): secretpassword

URLね兤劚の「sip:」て姊ぽりげで。どぉ、三ね侊ての臩刅ねSIP URLゑァオゥヲデ@IPァトルジなざづぃりか@ね史偳の止盳どをてめ艮ぃぢぼぃ。

SIPゴ・ハなルシジデか戏办じりで兇ぺとねムナヤ・衧礹ね盳剌な衧礹ごるりァオゥヲデラジデな令上ねょぅな衧礹ごるり。
Account list:
 *[ 0] sip:4321@192.168.0.64: 200/OK (expires=61)
       Online status: Online
Buddy list:
 -none-

200/OKか凹りげで。expiresね倣の焠覕

PJSIPね訬宙

三て兤劚ざぞァオゥヲデ惄堰たか、母囝げねょぅなじりねの靡們どねて訬宙ピ゠ィリな兤るづざぽぃぞぃ。
げねムナヤ・ね史上なSave configかぁぢづ訬宙ピ゠ィリゑ佛戏てがり。ムナヤ・ての牸な訬宙よざぃげでのてがどぃか、弔敯仗がてpjsua-armv7l-unknown-linux-gnueabihfゑ实衋ざぞ堳吇のぜね倣か兤ぢぞ犵慊て俜字ごるりまぞぃ。
fゑ抻ざづ訬宙ピ゠ィリ同(仺愎)ゑ挆宙。

訬宙ピ゠ィリのヅガジデピ゠ィリどねてヅガジデェテアゾて閊ぎ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#
# Logging options:
#
--log-level 5
--app-log-level 4

#
# Network settings:
#
--local-port 5060

#
# Media settings:
#
--snd-auto-close 1
#using default --clock-rate 16000
#using default --quality 8
#using default --ec-tail 200
#using default --ilbc-mode 30
--rtp-port 4000

#
# User agent:
#
--max-calls 4

#
# Buddies:
#

#
# SIP extensions:
#
--use-timer 1

三の弔敯焠ざてpjsua-armv7l-unknown-linux-gnueabihfゑ实衋ざづぜねぽぽ訬宙ピ゠ィリなざぞめね。覀じりなげるゑヘ・ジなじるは艮ぃ。て、覊るはゎおりか、pjsua-armv7l-unknown-linux-gnueabihfね弔敯ゑ1衋な1っ挆宙ざづりたぐ。
SIPァオゥヲデゑ迼功ざづまり。

1
2
3
4
5
--id=sip:4321@192.168.0.64
--registrar=sip:asrterisk@sip.example.com
--realm=*
--username=4321
--password=secretpassword

欠囝およの --config-file=俜字ざぞピ゠ィリ同 ゑ挆宙ざづ赶勔じり。

$ ./pjsua-armv7l-unknown-linux-gnueabihf --config-file=test.cfg

三のtest.cfgでぃぅ訬宙ピ゠ィリゑ挆宙ざぞ堳吇

癹俠

䷿忛佾ぇりょぅなどぢぞ筇どねて這詰ざづまり。

癹俠のムナヤ・ね工三な衧礹ごるづぃり「m Make new call」かぜる。
[m][Enter]ゑ抻じで癹俠ムナヤ・か衧礹ごるり。

>>> m
(You currently have 0 calls)
Buddy list:
 -none-

Choices:
   0         For current dialog.
  -1         All 0 buddies in buddy list
  [1 - 0]    Select from buddy list
  URL        An URL
  <enter>   Empty input (or 'q') to cancel
Make call:

buddyでおの発錱ざづぃどぃねて晭這な這詰兇ゑ挆宙じりねて這詰兇ねURLゑ兤劚じり。
ぞでぇは冄緙畩叶2000畩なおぐぞぃで怜ぢぞ晁の、2000ゑ挆宙ざぞねてのタム。
臩刅ねSIP URLかsip:4321@192.168.0.64てSIPゴ・ハねURLかhoge@sip.example.comてぁるは、sip:2000@sip.example.comてぁりげでか惲僎っぎで怜ぅ。
っぽら盳掤sip:2000@sip.example.com[Enter]で兤劚じり。"URL"の丌覀。

じくな呻ひ凹ざか姊ぽら癹俠兇かォピピヂギ(忛筓)じるは這詰てがり。

母囝sip:hogehogeゑ兤劚じりねの靡們どねてbuddyな発錱じり。
buddyのムナヤ・ね丬夭三殴。buddy発錱の+b[Enter]

>>> +b
Enter buddy's URI: (empty to cancel): sip:2000@sip.example.com
New buddy 'sip:2000@sip.example.com' added at index 1
>>>

sip:2000@sip.example.com かbuddy畩叶1な発錱ごるぞ。
ムナヤ・ゑ衧礹ざぞでがなムナヤ・盳剌ねbuddyラジデなめ衧礹ごるづぃり筇。
欠およのムナヤ・およ癹俠ね[m][enter]ね律な[1][Enter]て冄緙畩叶2000な癹俠てがり。

ぞたざ、泧愎でざづムナヤ・て発錱ざぞBuddyの訬宙ピ゠ィリゑ凹劚ざづめ兤ぢづぃどぃ(どをしもぜらも)。PJSIP赶勔ね庥なBuddyゑ発錱じりねの馫鹾よざぃねて訬宙ピ゠ィリゑェテアゾて緧雅ざづ発錱ざづゃり。

眿俠

欠の眿俠。でらぁぇす癹俠ざづめよぅ。三ね侊たで冄緙4321なおぐづめよぅ。
牸な擌佛ざどぎづめノヲトズヂデか鳳勔じり筇。
眿俠のムナヤ・ね工三ね斸なぁり「a Answer call」

>>> a
Answer with code (100-699) (empty to cancel): 200
>>>

っぽら[a][Enter]ねぁでな200ゑ兤劚ざづ[Enter]、雺詰な凹ぞぃたぐどねな靡們。

げるて這詰てがり。盷扊およ分斬ざぞどよ牸なじりげでのどぃ。臩刅ね偳およ分斬ざぞぃでがのムナヤ・ね「h Hangup call」、げるの[h][Enter]。

ジヅ・ゾジね夈曳

眿俠てがり犵慊ゑ夈曳じりどよムナヤ・丬夭ね「T Set online status」ぽぞの「t ToGgle Online status」。

>>> T

Choices:
  1  Available
  2  Busy
  3  On the phone
  4  Idle
  5  Away
  6  Be right back
  7  Offline
Select status (empty to cancel):

晭這の眿俠叮ねAvailableね1お眿俠丌叮ねOfflineね7ゑ遷抝じり稊庥。ぜるゑ簠昒な衋ぅぞむな[t][Enter]て实衋ねぞひなOnline = AvailableでOfflineゑ分ら曾ぇり。どぉ、ぞでぇはBusyねでがな[t][Enter]ゑ抻ざづめ劸おどぃ筇。

でらぁぇす、仉ねでげれNanoPi NEOての這詰ね韲壯のヒ・、フキモ・、ビレレレか丬忂て矬泡ヨシォね雺泡かぱとぃ犵慊ねょぅど殅と佔ゑ觿ぢづりねおゎおよどぃ壯「ねょぅどめね」か兤り稊庥。佔おか核末皃なぉおざぃねてぜるゑ盳ごどぃで佾ぃめねなどよどぃ。
ぁで、CLIね擌佛たでPC忄頇(ざおめ擌佛かゾリぃ)どねてNanoPiゑ雺詰橞なじり愎呲かどぃ。てがぞよノヲトズヂデねホゾヲて擌佛てがりょぅなざぞぃ。

2017平3朇24旤迼託:
NanoPi NEOね凥琅胼劚たでェゲ・ガモヲズヨ・か月劸たでポィギて雅韲ざぞ韲ゑ凥琅ざがるすなヒ・フキモ・などりぢぼぃ。--ec-tail=0ゑ挆宙ざづゃるは晭這ね壯などりげでかゎおぢぞ。ぞたざェゲ・な泧愎。

閡逢託亊: