เรามาทำความรู้จักกับ SIP กันก่อนนะครับ SIP softphone คือโปรแกรมหรือแอปพลิเคชันที่ช่วยให้คุณสามารถโทรศัพท์ผ่านระบบ IP (VoIP) ได้โดยใช้โปรโตคอล SIP (Session Initiation Protocol) ซึ่งเป็นโปรโตคอลที่ใช้ในการจัดการและควบคุมการเชื่อมต่อเสียงและวิดีโอในการสื่อสารผ่านเครือข่าย IP
โดย SIP softphone ทำงานคล้ายกับโทรศัพท์ธรรมดา แต่แทนที่จะใช้สายโทรศัพท์จริงๆ มันใช้การเชื่อมต่ออินเทอร์เน็ตในการส่งข้อมูลเสียงและวิดีโอ ทำให้คุณสามารถโทรศัพท์ไปยังเบอร์อื่นได้ทั่วโลกผ่านอินเทอร์เน็ต และมักจะมาพร้อมฟีเจอร์เพิ่มเติม เช่น การโทรวิดีโอ, การส่งข้อความ, และการจัดการผู้ติดต่อ
การใช้ SIP softphone ช่วยให้สามารถติดต่อสื่อสารได้อย่างมีประสิทธิภาพและคุ้มค่า เนื่องจากมักจะมีต้นทุนที่ต่ำกว่าการโทรศัพท์ผ่านสายโทรศัพท์ปกติ โดยเฉพาะอย่างยิ่งเมื่อทำการโทรระหว่างประเทศ
ก่อนที่จะทำการเชื่อมต่อ SIP เข้ามา เรามาดูภาพรวมกันก่อน
เรามี ระบบวิทยุ (Radio), ระบบโทรศัพท์ (Voice Over IP) และ ระบบ Intercom
ขั้นตอนการ Integrate SIP Server กับ Mumble server
เราจะใช้ตัวโปรแกรมชื่อ mumsi ในการช่วยเป็นตัวกลางเชื่อมต่อไปยัง SIP Server และ Mumble server โดยในตัวอย่างนี้ เราจะไม่ได้ลง SIP Server เอง เพื่อเป็นการไม่เสียเวลาแต่จะขอใช้บริการของ Linphone.org ซึ่งเราสามารถลงทะเบียนและใช้ฟรี เพื่อเป็นการทดสอบกันนะครับ
โดยจะติดตั้งด้วย container ซึ่งใน server ทำการติดตั้ง docker
ทำการสร้างไฟล์ nano docker-compose.yml
ดังนี้ครับ
version: ‘3.8’
services:
mumsi:
image: haocomcloud/ipptt-demo:mumsi
container_name: mumsi
restart: always
ports:
– “5060:5060”
volumes:
– ./mumsi/config:/config
ทำการสร้างไฟล์ nano /mumsi/config/config.ini ดังนี้ครับ
[general]
# valid values for log level are: ERROR, WARN, NOTICE, INFO, DEBUG
logLevel = NOTICE
[sip]
# list of valid SIP URIs for incoming connections separated by space
# supported wildcards: *
# if you want to allow calls from any URI, write *@*
validUriExpression = *@sip.example.com *@127.0.0.1
host = sip.linphone.org
port = 5060
user = <username>
password = <password>
# length of single voice frame in ms. Valid values are 10, 20, 40, 60 ms.
# Adjust it if you need to meet the specific bandwidth requirements of Murmur server
frameLength = 40
# Set the maximum number of SIP calls to allow simultaneously. This should be <= 32.
# If you need more, recompile PJSUA LIB and also modify the define in main.hpp.
max_calls = 1
[mumble]
#mumble.ipptt.co
host = mumble-demo.haocomm.com
port = 50000
user = <username>
password = <password>
channelNameExpression = <channel>
# When here is no SIP connection, the mumble state is set to self_mute/self_deaf
# so the other users can easily see whether the SIP is connected even when not
# in the same group
autodeaf = 1
# Bitrate of Opus encoder in B/s
# Adjust it if you need to meet the specific bandwidth requirements of Murmur server
opusEncoderBitrate = 16000
# Set to 1 to use client certificates. The certs must be named <user>-cert.pem and
# the private keys <user>-key.pem.
use_certs = 0
[app]
# Caller PIN needed to authenticate the phone call itself. The caller presses
# the PIN, followed by the hash ‘#’ key. On success, the caller is
# unmuted/undeafened. On failure, the SIP call is hung up.
channel = HAM-CB
pin = 9999
[files]
# These files are used for the caller and mumble channel audio clips.
# The paths below assume that you are running ./mumsi in the build/ dir.
#welcome = ../media/welcome.wav
#prompt_pin = ../media/prompt-pin.wav
#entering_channel = ../media/entering-channel.wav
#announce_new_caller = ../media/announce-new-caller.wav
#invalid_pin = ../media/invalid-pin.wav
#goodbye = ../media/goodbye.wav
#mute_on = ../media/mute-on.wav
#mute_off = ../media/mute-off.wav
#menu = ../media/menu.wav
welcome = /app/media/welcome.wav
prompt_pin = /app/media/prompt-pin.wav
entering_channel = /app/media/entering-channel.wav
announce_new_caller = /app/media/announce-new-caller.wav
invalid_pin = /app/media/invalid-pin.wav
goodbye = /app/media/goodbye.wav
mute_on = /app/media/mute-on.wav
mute_off = /app/media/mute-off.wav
menu = /app/media/menu.wav
การตั้งค่าหลัก ๆ จะมี 3 ส่วน ที่เป็นตัวหนาด้านบนครับ
[sip] => เป็นการกรอกข้อมูล Sip server และ username/password
[mumble] => เป็นการกรอกข้อมูล Mumble server, Channel name และ username/password
[app] => เป็นการกำหนด PIN ในการ Join ใน Channal ที่กำหนดไว้
ทำการรัน mumsi ขึ้นมาโดยใช้คำสั่ง
docker compose up -d
เพื่อสั่งให้ container ทำงาน หลังจากนั้นเราก็ทดสอบโทร ระหว่าง SIP softphone กับ Talkkonnect หรือ วิทยุ ที่ Join อยู่ใน Channel นั้น