Transcoding G711 ke Opus di Kazoo

Tempo hari kantor kedatangan tamu dari Aarenet. Mereka memperesentasikan layanan UC yang bisa mereka sediakan untuk level provider. Platform yang mereka gunakan buatan sendiri yang didevelop dari tahun 2004 – 2009, tanpa jualan dulu. Hasilnya juga ndak main-main. Menarik lah pokoknya. Kelak kalo punya ITSP sendiri mungkin kepikiran pakai produk mereka, terutama kalo sudah males ngoprek. Hehehe.

Ada beberapa hal yang bisa dipelajari dari presentasi mereka, yang juga bisa diterapkan di network yang lagi saya bangun. Dari sekian banyak hal, saya jadi ngeh kalau ingin layanan UC bisa diakses dari jaringan 3G/4G (untuk saat ini), yang dipake adalah codec Opus. Hal lain yang saya pelajari dari mereka mungkin nanti saja diceritakan dalam postingan berikutnya (kalo sempet dan inget). Sekarang ini sudah banyak aplikasi softphone yang sudah menggunakan Opus. Salah satu yang saya pakai di PC/laptop yang cukup ringan adalah Microsip. Sedangkan di smartphone, saya memanfaatkan Linphone. Jadi di media server Kazoo yang menghadap ke user akan selalu dipaksa menggunakan Opus (kecuali jika user hendak menggunakan fax di mana harus menggunakan codec G711 ulaw/alaw), sedangkan di sisi menghadap OLO (Other Local Operator) akan tetap menggunakan G711 untuk menjamin kualitas. Karena media server melakukan transcoding, maka di FreeSWITCH ditambahkan konfigurasi seperti berikut:

  • Di sip profile (kebetulan dalam topologi Kazoo hanya punya satu profile), tambahkan baris:
    • disable-transcoding = false (tujuannya untuk mengaktifkan transcoding).
    • inbound-late-negotiation = true (tujuannya supaya media server tidak memilih codec hingga RTP lewat).
    • inherit_codec = true (tujuannya adalah agar media server mencoba codec yang pertama digunakan oleh call leg satunya. Hal ini berhubungan dengan penghematan resource server).



  • di dalam freeswitch.xml (di FS Kazoo tidak ada vars.xml) tambahkan baris:

  • Dan terakhir, paksa Device yang teregister ke Kazoo untuk selalu menggunakan Opus dengan cara hanya mengaktifkan codec Opus di setting Device dan di masing-masing software SIP client:

Ketika kita coba melakukan panggilan, maka SDP akan tampak seperti:

INVITE

v=0
o=FreeSWITCH 1522990346 1522990347 IN IP4 116.68.171.76
s=FreeSWITCH
c=IN IP4 1.2.3.4
t=0 0
m=audio 25278 RTP/AVP 102 101 13
a=rtpmap:102 opus/48000/22
a=fmtp:102 useinbandfec=1; maxaveragebitrate=30000; maxplaybackrate=48000; ptime=20; minptime=10; maxptime=40
a=rtpmap:101 telephone-event/48000
a=fmtp:101 0-16
a=rtpmap:13 CN/48000
a=ptime:20

Selamat mencoba!

Ref:

[Tips] Kazoo Media Server – Tidak Bisa Memainkan Voice Recording

Jika kita memiliki platform Kazoo dengan media server terpisah, ada kemungkinan tidak bisa mendengarkan voice recording, misal, jika kita salah mendial nomer seharusnya mendapatkan pesan suara:

“The call can not be completed as dialed. Please check your number and dial again.”

alih-alih akan mendapatkan error message di console FreeSWITCH seperti berikut:

[ERR] mod_http_cache.c:1170 Received HTTP error 0 trying to fetch http://127.0.0.1:15984/system_media/en-us%2Ffault-can_not_be_completed_as_dialed/fault-can_not_be_completed_as_dialed.wav?rev=6-585c8f2e3b6b3f4063efb1c18cce5309

Sebelum melanjutkan ke setting HAPROXY, pastikan semua rekaman suara sudah berada di dalam direktori /opt/kazoo/sounds (dalam contoh ini, karena menggunakan bahasa inggris, lokasi direktori lengkapnya /opt/kazoo/sounds/en/us). Jika belum ada, copy manual langsung dari server ecallmgr yang sudah berjalan.

Selanjutnya, ubah config HAPROXY yang mengarah ke server database CouchDB (biasanya karena server terpisah dengan media server) dengan bind server ke 0.0.0.0 misal :

....
listen bigcouch-data
bind 0.0.0.0:15984
balance roundrobin
server db_1.couch.db 127.0.0.1:5984 check
server db_2.couch.db 127.0.0.1:5984 check
server db_3.couch.db 127.0.0.1:5984 check backup
server db_4.couch.db 127.0.0.1:5984 check backup

listen bigcouch-mgr
bind 0.0.0.0:15986
balance roundrobin
server db_1.couch.db 127.0.0.1:5986 check
server db_2.couch.db 127.0.0.1:5986 check
server db_3.couch.db 127.0.0.1:5986 check backup
server db_4.couch.db 127.0.0.1:5986 check backup
...

Pastikan juga firewall hanya menerima koneksi ke service-service tersebut dari ip address cluster kita sendiri untuk keamanan.

Lalu di server FreeSWITCH juga diinstall HAPROXY dengan config sebagai berikut (misal HAPROXY database terpasang di ip address 1.2.3.4 dengan port 15984 dan 15986):

....
listen bigcouch-data
bind 127.0.0.1:15984
balance roundrobin
server db_1.couch.db 1.2.3.4:15984 check
server db_2.couch.db 1.2.3.4:15984 check
server db_3.couch.db 1.2.3.4:15984 check backup
server db_4.couch.db 1.2.3.4:15984 check backup

listen bigcouch-mgr
bind 0.0.0.0:15986
balance roundrobin
server db_1.couch.db 1.2.3.4:15986 check
server db_2.couch.db 1.2.3.4:15986 check
server db_3.couch.db 1.2.3.4:15986 check backup
server db_4.couch.db 1.2.3.4:15986 check backup
...

Reload semua HAPROXY di ke-2 server/cluster tersebut, lalu test kembali.