RTP Packet Size ใน Asterisk และวิธีการปรับค่า

Asterisk Opensource IP Pbx

RTP Packet Size ใน Asterisk และวิธีการปรับค่า

โพสต์โดย nuiz » 16 ก.พ. 2011 11:47

ใน Asterisk เวอร์ชั่นแรกๆจนถึงเวอร์ชั่น 1.2 รองรับ Packet Size (หรือ Packetization) ค่าเดียวเท่านั้นคือ 20 ms เปลี่ยนในไฟล์คอนฟิกไม่ได้ (ถ้าอยากเปลี่ยนคงต้องแก้ Source Code เอา) และไม่เป็นแบบออโต้ด้วย เวลาคุยกับอุปกรณ์ปลายทางที่ใช้ Packet Size ค่าอื่นก็จะมีปัญหา ต้องปรับคอนฟิกอุปกรณ์ปลายทางให้ใช้ Packet Size ค่านี้เท่านั้น ถ้าอุปกรณ์ที่เราใช้มันคอนฟิกได้และเป็นของเราทั้งหมดก็จะไม่มีปัญหาอะไรครับ

แต่ตั้งแต่ Asterisk 1.4 เป็นต้นมา สามารถรับ Packet Size ได้หลายขนาดและเป็นแบบออโต้ด้วยนะครับ โดยเราอาจจะคอนฟิกไว้ในไฟล์คอนฟิก sip.conf หรือให้ Asterisk ดูเอาใน SIP Message เวลามันรับมาจากอุปกรณ์อื่นก็ได้ แต่ถ้ามันเป็นฝ่ายส่ง Call ออกไป มันจะใช้ Packet Size ตามที่เราเห็นเวลาเราใช้คำสั่ง sip show peers ครับ

มาดู SIP Invite Message ที่ส่งจาก Asterisk ออกไปครับ

INVITE sip:0851619439@192.168.137.25:5060 SIP/2.0..Via: SIP/2.0/UDP 192.168.124.35:5060;branch=z9hG4bK58dae273;rport..Max-Fo
rwards: 70..From: "0815892345" <sip:0815892345@192.168.124.35>;tag=as6a279e13..To: <sip:0851619439@192.168.137.25:5060>..Con
tact: <sip:0815892345@192.168.124.35>..Call-ID: 3dbed14a50d1553e68657c37195ae3ab@192.168.124.35..CSeq: 102 INVITE..User-Agent: Easy
CC v2.5.0..Date: Wed, 16 Feb 2011 04:53:46 GMT..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO..Suppo
rted: replaces, timer..Content-Type: application/sdp..Content-Length: 301....v=0..o=root 100510789 100510789 IN IP4 192.168.124.3
5..s=Asterisk PBX 1.6.2.10..c=IN IP4 192.168.124.35..t=0 0..m=audio 6938 RTP/AVP 18 4 101..a=rtpmap:18 G729/8000..a=fmtp:18 annexb=no..a=rtpmap:4 G723/8000..a=fmtp:4 annexa=no..a=rtpmap:101 telephone-event/8000..a=fmtp:101 0-16..a=ptime:20..a=sendrecv..

จาก SIP Invite ที่ผมเอามาเป็นตัวอย่างนะครับ ใช้ G.729 เป็น First Priority Code และ G.723.1 เป็น Second Priority Codec และ a=ptime:20 คือค่า Packet Size หรือ Packetization Time ของ First Priority Codec ครับ แต่ตอนรับส่งกันสัญญาณเสียงกันจริงๆก็อาจจะไม่ได้ใช้ First Poriority Codec เสมอไปนะครับ และอาจจะไม่ได้ใช้ Packetization ตามค่าใน ptime เสมอไป แล้วแต่อุปกรณ์ที่ Asterisk มันคุยด้วยหน่ะครับ

วิธีการปรับค่า Packetization Time (ptime) ของแต่ละ Codec ใน Asterisk
ดีฟอลท์ของ Packetization Time ของ G.729 คือ 20 ms, G.723.1 คือ 30 ms, G.711 ทั้ง ulaw และ alaw คือ 20 ms ส่วน gsm คือ 20 ms ถ้าเราต้องการเปลี่ยนไปจากค่าดีฟอลท์ก็ให้ระบุค่าของ ptime ไว้ด้านหลังชื่อ codec ในบรรทัด allow ได้เลยครับ เช่น

โค้ด: เลือกทั้งหมด
disallow=all
allow=g729:40
allow=g723:60
allow=gsm:40


ท่านที่ใช้ Elastix หรือ Trixbox หรือ FreePBX ก็ทำแบบนี้เลยครับ
โค้ด: เลือกทั้งหมด
disallow=all
allow=g729:40,g723:60,gsm:40

ใช้ & แทน , ก็ไม่ผิดกติกาครับ

ประมาณนี้อ่ะครับ สังเกตุนะครับว่าเมื่อ Asterisk ยอมให้เราตั้งค่า ptime ได้ง่ายๆแบบนี้ แสดงว่าแต่ละ Trunk แต่ละ SIP account เราสามารถใช้ Packetization Time ต่างกันได้ แหม๋มันช่างสุดยอดจริงๆ!

มาดู SIP Invite message หลังจากที่ผมเปลี่ยนค่า ptime ของ G.729 ให้เป็น 40 ms กันครับ

INVITE sip:0851619439@192.168.137.25:5060 SIP/2.0..Via: SIP/2.0/UDP 192.168.124.35:5060;branch=z9hG4bK71897335;rport..Max-Fo
rwards: 70..From: "0815892345" <sip:0815892345@192.168.124.35>;tag=as15c1e063..To: <sip:0851619439@192.168.137.25:5060>..Con
tact: <sip:0815892345@192.168.124.35>..Call-ID: 0fea72f67c99cc074e0cea3059878f41@192.168.124.35..CSeq: 102 INVITE..User-Agent: Easy
CC v2.5.0..Date: Wed, 16 Feb 2011 05:31:17 GMT..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO..Suppo
rted: replaces, timer..Content-Type: application/sdp..Content-Length: 303....v=0..o=root 1961579967 1961579967 IN IP4 192.168.124
.35..s=Asterisk PBX 1.6.2.10..c=IN IP4 192.168.124.35..t=0 0..m=audio 7414 RTP/AVP 18 4 101..a=rtpmap:18 G729/8000..a=fmtp:18 ann
exb=no..a=rtpmap:4 G723/8000..a=fmtp:4 annexa=no..a=rtpmap:101 telephone-event/8000..a=fmtp:101 0-16..a=ptime:40..a=sendrecv..

และตามที่ผมบอกไว้ว่า เวลาคุยกันจริงๆ Asterisk ก็อาจจะไม่ได้ใช้ ptime ตามที่เราเห็นครับ จะใช้ ptime ที่อุปกรณ์ปลายทางเสนอมา ไม่มีปัญหาสำหรับ Asterisk 1.4+ ครับเพราะว่ามัน Auto ได้ ดูตัวอย่าง SIP message ด้านล่างนี้ครับ ซึ่งเมื่อปลายทางรับสาย อุปกรณ์ปลายทาง (ในตัวอย่างคือ Cisco Gateway) ก็จะส่ง 200 OK กลับมา มีค่า ptime =20 ms ไม่ใช่ 40 ms อย่างที่ Asterisk เสนอไปในตอนแรก

SIP/2.0 200 OK..Via: SIP/2.0/UDP 192.168.124.35:5060;branch=z9hG4bK71897335;rport..From: "0815892345" <sip:0815892345@192.168.124.3
5>;tag=as15c1e063..To: <sip:0851619439@192.168.137.25:5060>;tag=6DD4FD4C-2B6..Date: Wed, 16 Feb 2011 05:27:55 GMT..Call-ID
: 0fea72f67c99cc074e0cea3059878f41@192.168.124.35..Server: Cisco-SIPGateway/IOS-12.x..CSeq: 102 INVITE..Allow: INVITE, OPTIONS, B
YE, CANCEL, ACK, PRACK, COMET, REFER, SUBSCRIBE, NOTIFY, INFO..Allow-Events: telephone-event..Contact: <sip:0851619439@20
2.69.137.25:5060>..MIME-Version: 1.0..Content-Type: multipart/mixed;boundary=uniqueBoundary..Content-Length: 469....--uniqueBou
ndary..Content-Type: application/sdp....v=0..o=CiscoSystemsSIP-GW-UserAgent 3474 5375 IN IP4 192.168.137.25..s=SIP Call..c=IN IP
4 192.168.137.25..t=0 0..m=audio 16512 RTP/AVP 18 101..c=IN IP4 192.168.137.25..a=rtpmap:18 G729/8000..a=fmtp:18 annexb=no..a=rtp
map:101 telephone-event/8000..a=fmtp:101 0-16..a=ptime:20..--uniqueBoundary..Content-Type: application/gtd..Content-Disposition: signal;handling=optional....ANM,..PRN,isdn*,,NET5*,....--uniqueBoundary--..

บทความที่เกี่ยวข้อง
-วิธีการเช็ค Packet Size ของแต่ละ Codec ใน Asterisk
-วิธีปรับค่า RTP Packet Size ของ Linksys/Sipura SPA3102
-ขนาดของ Packet หรือ Packet Size หรือ Packetization Time ของ VoIP
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 20 ท่าน

cron