หน้า 1 จากทั้งหมด 1

มาทำความเข้าใจเรื่อง Codec ใน Elastix กันครับ

โพสต์โพสต์แล้ว: 14 ธ.ค. 2009 12:41
โดย voip4share
เป็นที่ทราบกันอยู่แล้วนะครับว่า Elastix ใช้โปรแกรม Asterisk เป็น SIP Server ซึ่งดีฟอลท์จะรองรับ Codec ดังต่อไปนี้
- G.723.1 (Pass through)
- G.729 (ซื้อ License เพิ่ม)
- G.711 alaw
- G.711 ulaw
- ADPCM
- GSM
- iLBC
- G.722
- LPC10
- Speex
- G.726

Codec Passthrough หมายความว่า Asterisk จะไม่ทำอะไรกับ Codec มันจะปล่อยให้ต้นทางและปลายทางจัดการกันเอง ถ้ามีฝั่งใดฝั่งหนึ่งไม่รองรับโคเด็คก็จะคุยกันไม่ได้

ต้นทางและปลายทางจะคุยกันได้จะต้องมีอย่างน้อย 1 โคเด็คที่มีเหมือนกัน ซึ่งอุปกรณ์ VoIP ต้นทางและปลายทางมีความสามารถในการเลือกใช้โคเด็คที่ทั้งสองฝั่งรองรับ (กฏเกณฑ์นี้มีระบุไว้ในมาตรฐาน VoIP ทุกโปรโตคอล)
codec_mismatch.png
Codec Important
codec_mismatch.png (27.85 KiB) เปิดดู 9212 ครั้ง


คำว่า "Pass Through" หรือเรียกได้อีกอย่างหนึ่งคือ "Transparent" หมายความว่า Asterisk จะไม่ทำอะไรที่เกี่ยวกับ Codec เลย รับมาแล้วก็ส่งต่อไปเท่านั้น ปล่อยให้ต้นทางและปลายทางสื่อสารกันเอง นั่นก็แสดงว่าทั้งต้นทางและปลายทางจะต้องรองรับ Codec เดียวกัน ลองดูตัวอย่างของ G.723.1 Pass Through ในรูปต่อไปนี้ครับ
codec_transparent.png
Asterisk Codec G.723.1 Transparent
codec_transparent.png (22.19 KiB) เปิดดู 9212 ครั้ง


นอกจากนั้น Asterisk ยังมีความสามารถทำ Codec Transcode ได้ หมายความว่ามันสามารถแปลงจากโคเด็คหนึ่งไปเป็นอีกอย่างหนึ่งได้ ยกตัวอย่างเช่น ต้นทางรองรับโคเด็คแบบ GSM ส่วนปลายทางรองรับโคเด็คแบบ G.711 alaw ซึ่งตามปกติแล้วทั้งสองไม่น่าจะโทรหากันได้ แต่เมื่อโทรผ่าน Asterisk มันจะทำหน้าที่แปลงโคเด็คให้ ทั้งสองด้านจึงสื่อสารกันได้ ดังรูปต่อไปนี้
codec_transcoding.png
Asterisk Codec Transcoding
codec_transcoding.png (23.96 KiB) เปิดดู 9212 ครั้ง

ถึงแม้ว่าการทำ Codec Transcoding จะมีประโยชน์ แต่ก็เป็นการสิ้นเปลืองทรัพยากรในเครื่องเซอร์เวอร์ ถ้าเครื่องไม่ค่อยแรงก็อาจจะรองรับได้ประมาณ 10-20 คู่สายพร้อมๆกัน แต่ถ้าเครื่องแรงๆก็ไม่ต้องเป็นห่วงหรอกครับ

Re: มาทำความเข้าใจเรื่อง Codec ใน Elastix กันครับ

โพสต์โพสต์แล้ว: 14 ธ.ค. 2009 14:28
โดย voip4share
2. ลำดับของโคเด็ค (Codec Priority)

เคยสังเกตุมั๊ยครับว่า "ทำไมอุปกรณ์ VoIP ถึงรองรับมากกว่า 1 โคเด็ค ทำไมไม่ทำมาแค่โคเด็คเดียว" อย่างเช่น Softphone อย่างน้อยๆก็ต้องรองรับ GSM, G.711alaw, G.711ulaw ได้ (ดูโคเด็คที่รองรับได้จากดาต้าชีทของอุปกรณ์นะครับ ซึ่งจะมีบอกไว้เสมอ) ที่เป็นเช่นนี้ก็เพราะว่า โคเด็คในโลกนี้มีหลายแบบ ก็เลยต้องทำออกมาให้รองรับโคเด็คได้มากที่สุดครับ มากที่สุดเท่าที่จะทำได้

แล้วตอนที่อุปกรณ์เหล่านี้โทรหากัน จะรู้ได้ยังไงว่าต้องใช้โคเด็คไหน ? ผมมีคำอธิบายดังนี้ครับ
codec_negotiation.png
Codec Negotiation
codec_negotiation.png (24.74 KiB) เปิดดู 9212 ครั้ง

เมื่อต้นทางส่งข้อความขอเชื่อมต่อ (วิธีการส่งข้อความ หรือที่เรียกว่า signaling มีกำหนดไว้ในมาตรฐาน VoIP ทุกแบบครับ ทั้ง SIP, H.323, MGCP เป็นต้น ซึ่งจะมีรูปแบบวิธีการแตกต่างกัน) จะส่งข้อมูลหลายอย่างไปด้วย เช่นเบอร์ปลายทาง เบอร์ต้นทาง โคเด็ค และอื่นๆที่จำเป็น ผมจะขออธิบายเฉพาะโคเด็คนะครับ จากรูปตัวอย่างข้างบน ต้นทางรองรับโคเด็ค G.729, G.723.1, GSM และเราคอนฟิกอุปกรณ์ต้นทางว่าให้เรียงลำดับโคเด็คแบบนี้ ให้ G.723.1 เป็น First Priority, G.729 เป็น Second Priority และ GSM เป็น Third Priority โดยปกติจะเซ็ตลำดับ Priority ได้ครับ
ลำดับของโคเด็คที่ต้นทางส่งไปก็จะเรียงกันตามลำดับที่เราตั้งไว้ เมื่อปลายทางได้รับก็จะมองเห็นลำดับของโคเด็คและจะรู้ว่าต้นทางรองรับโคเด็คอะไรบ้าง แล้วก็จะมาดูโคเด็คที่ตนเองรองรับ ถ้าไม่มีเลยก็จะปฏิเสธการเชื่อมต่อ แต่ถ้ามีก็จะเลือกโคเด็คที่ตนเองรองรับมา 1 โคเด็ค โดยเปรียบเทียบกับลำดับโคเด็คที่ต้นทางส่งมา เช่นจากตัวอย่าง ปลายทางรองรับ GSM ซึ่งอยู่ในลำดับที่ 3 ของต้นทาง ก็จะตอบรับไปว่าตัวเองรองรับ GSM และก็จะใช้ GSM ในการเชื่อมต่อ
แต่ถ้าปลายทางรองรับ G.729, GSM, Alaw, Ulaw ปลายทางจะเลือกใช้ G.729 เพราะว่ามีลำดับดีกว่า GSM

คงจะพอเข้าใจกันนะครับ :P

ลองมาดูของจริงกันบ้างครับ ต่อไปนี้คือ SIP Message ที่เกิดจากเบอร์ Extension 198 โทรไปหาเบอร์ 100 ดังรูปต่อไปนี้
sip_codec_list_small.png
SIP Codec List
sip_codec_list_small.png (101.31 KiB) เปิดดู 9212 ครั้ง

รูปข้างบนเป็นตัวอย่างของ SIP Message ที่เรียกว่า "Invite Message" เป็นการโทรด้วยโปรโตคอล SIP จากเบอร์ (From) 198 ไปยังเบอร์ (To) 100 จะเห็นว่ามีลำดับของ Codec ดังนี้ G.723.1, G.729, aLaw และ uLaw

Re: มาทำความเข้าใจเรื่อง Codec ใน Elastix กันครับ

โพสต์โพสต์แล้ว: 14 ธ.ค. 2009 15:27
โดย voip4share
3. การเซ็ตอัพและการจัดลำดับโคเด็คใน Elastix
extension_elastix_codec_relationship.png
Codec Relationship Between Asterisk and VoIP Devices
extension_elastix_codec_relationship.png (19.8 KiB) เปิดดู 9212 ครั้ง

รูปข้างบนแสดงความสัมพันธ์ระหว่างการคอนฟิกโคเด็คของเบอร์ Extension กับโคเด็คจริงๆที่ Extension รองรับ ซึ่งคงยังจำกันได้นะครับว่าตอนที่เราสร้างเบอร์ Extension นั้นเราได้มีการตั้งโคเด็คไว้ด้วย ตัวอย่างในรูปเบอร์ Extension 100 รองรับโคเด็ค g.729, g.723.1, gsm, g.711alaw, g.711ulaw ซึ่งก็ถือได้ว่าครอบคลุมโคเด็คไว้หมดแล้ว (ยกเว้นโคเด็คของวีดีโอ)

ตอนที่เรากำหนดรายชื่อโคเด็คให้ Asterisk ใช้นั้น เราต้องป้อนข้อมูลโคเด็คให้ถูกต้องด้วยครับ ไม่เช่นนั้น Asterisk จะไม่รู้ว่าเราต้องการใช้โคเด็คไหน ดังนี้ครับ
G.711 ulaw ใส่เป็น ulaw
G.711 alaw ใส่เป็น alaw
G.723.1 ใส่เป็น g723
G.729 ใส่เป็น g729
GSM ใส่เป็น gsm
LPC10 ใส่เป็น lpc10
Speex ใส่เป็น speex
iLBC ใส่เป็น ilbc
G.726 ใส่เป็น g726
G.722 ใส่เป็น g722

ทีนี้เมื่อเราเอาเบอร์ Extension นี้ไปคอนฟิกใส่ไว้ในอุปกรณ์ VoIP ในตัวอย่างคือ SIP Softphone sipLite และ sipLite ก็รองรับโคเด็ค g.729, g.723.1, gsm ซึ่งจะไม่มีปัญหาเรื่องโคเด็คระหว่าง sipLite กับ Elastix

ในทางตรงกับข้ามถ้าหาก sipLite ไม่รองรับโคเด็คที่เซ็ตไว้ที่เบอร์ Extension 100 จะทำให้ไม่สามารถใช้งานเบอร์ 100 ได้ กรณีนี้เราต้องแก้ไขบรรทัด Allow ของเบอร์ Extension 100 ให้ลบโคเด็คที่ sipLite ไม่รองรับออกแล้วใส่เฉพาะโคเด็คที่รองรับ ก็จะแก้ปัญหาได้

ลำดับความสำคัญของโคเด็คของเบอร์ Extension ใน Elastix จะเป็นไปตามลำดับโคเด็คที่เราใส่ไว้ในบรรทัด Allow ครับ