ทุก Calls ที่เกิดขึ้นบน Asterisk ควรใช้ Codec เดียวกันทั้งต้นทางและปลายทาง เพื่อไม่ให้ Asterisk ทำการแปลง Codec ให้ อันจะทำให้ Asterisk ทำงานหนัก ทรัพยากรเครื่องควรถูกนำไปใช้งานอย่างอื่นที่ให้ประโยชน์มากกว่านะครับ แทนที่จะถูกใช้ไปทำงานที่ไม่ควรจะทำ อย่างการแปลง Codec ของ Asterisk เป็นต้น
งั้นเราก็ต้องคอนฟิก FreePBX ให้ Asterisk ใช้ Codec เดียวกันทั้งตอนคุยกับอุปกรณ์ต้นทางและปลายทาง แต่ก่อนที่จะคอนฟิก FreePBX เรามาดู Call คู่หนึ่งที่ Asterisk กำลังให้บริการอยู่ครับ จากรูปจะเห็นว่าขาหนึ่งใช้ ulaw อีกขาหนึ่งใช้ alaw แสดงว่าตอนนี้ Asterisk กำลังทำการแปลง Codec อยู่
ถ้าใช้ CHAN_PJSIP ให้ใช้คำสั่ง pjsip show channelstats ส่วน CHAN_SIP ใช้คำสั่ง sip show channels ครับ
ที่เราเห็นขาหนึ่งเป็น alaw และอีกขาเป็น ulaw นั้น เป็นเพราะว่าขาที่คุยกับ ELX-3 ซึ่งเป็น Trunk ถูกคอนฟิกให้ใช้ Codec เป็น alaw อย่างเดียว ดังนั้น Asterisk ก็จึงต้องใช้ alaw ตามด้วย ส่วนอีกขาหนึ่ง Asterisk ก็จะเลือกใช้ Codec ที่คอนฟิกไว้บนตัวมัน และพอดีว่าอุปกรณ์ (ไอพีโฟน) อีกขาหนึ่งก็รองรับ ulaw ด้วย ขานี้จึงใช้ ulaw
บน FreePBX ให้เราคอนฟิกสลับ Codec ที่ Asterisk จะเลือกใช้ เข้าเมนู Settings > Asterisk SIP Settings ครับ แล้วเลื่อนมาตรง Codecs จากนั้นให้เลื่อน alaw ขึ้นมาไว้บนสุด ตามรูปครับ จากนั้นกด Submit > Apply Config
รันคำสั่ง pjsip show channelstats หรือ sip show channels อีกครั้งเมื่อมีสายโทรเข้าโทรออก จะเห็นว่าทั้ง 2 ขาของทุกๆ Calls ใช้ alaw ทั้งหมด
ลองนำไปตรวจสอบและคอนฟิกดูครับ แต่ผมคิดว่าคงไม่ได้ก่อให้เกิดผลอย่างเห็นได้ชัดสักเท่าไหร่ เครื่องพีซีสมัยนี้เสป็คดีๆทั้งนั้น แรมก็เยอะ แม้ว่า Asterisk จะทำ Transcoding ทุกสาย ก็คงไม่รู้สึกว่าคุณภาพของการสนทนาจะด้อยลง ยกเว้นใช้พร้อมๆกันหลายสิบคู่สาย แบบนี้น่าจะเห็นผลบ้างหล่ะครับ
บทความที่เกี่ยวข้อง
สาเหตุหนึ่งที่ทำให้เสียงสนทนาขาดหาย มีเสียงสะท้อน
เทคนิคการตั้งชื่อ hostname ของเครื่อง FreePBX
ดาวน์โหลด FreePBX
เทคนิคการติดตั้ง FreePBX
เทคนิคการแบ็คอัพ FreePBX ด้วยการอัพโหหลดผ่าน SSH
ตัวอย่างการใช้งาน Action URL บน Grandstream IP Phone