Hello,
It is about how I got a voice working between UE connected to Osmocom 3G
(external call handling - Kamailio PBX) and VoIP softphone connected to the PBX.
The part about is IuUP only. (Transcoding comes later)
I have a traces of a call where a commercial NITB was used and I compared them
to traces which I got from a call where Osmocom system was used.
(Osmocom Core consisted of libosmocore of branch laforge/iu_up, osmo-mgw of
branch neels/iuup and other stuff from Nightly Builds)
My femtocell (nano3g ip.access) uses AMR 12.2k as a codec.
The difference in IuUP <-> AMR conversion between two.
When converting from IuUP to AMR:
- Osmo-mgw only strips IuUP header from RTP payload;
- Commercial NITB strips IuUP header and prepends AMR header to RTP payload;
When converting from AMR to IuUP:
- Osmo-mgw only prepends IuUP header to RTP payload;
- Commercial NITB strips AMR header and prepends IuUP header to RTP payload;
So that means basically that my femtocell sends AMR payload as IuUP payload
without AMR header. And expects AMR payload inside IuUP message without AMR
header.
IuUP header is 4 bytes. AMR header for octet-aligned mode is 2 bytes.
To test this I've modified the code of iuup_cn_node.c so that it does:
- when converting from IuUP data (rx_data): after stripping IuUP header it
prepends 0xf03c as a header (it is for AMR 12.2k).
- when converting to IuUP data (osmo_iuup_cn_tx_payload): before prepending IuUP
header it strips AMR header.
The call performed had voice on both sides. It was performed between a regular
phone connected to a femtocell and a VoIP softphone connected to Kamailio PBX.
Kind regards,
Mykola