Hi Vadim,
Here are my thoughs about your suggestions:
1) doesn't make sense unless you meant "start transmitting duplicated
packets" (I guess it was your idea). This has the drawback of increasing
bandwidth usage.
2) packing more audio per packet significally reduces bandwidth, this is
useful as packet drops are very often caused by bandwidth overflow. In
mediastreamer2 it is easy to do thanks to the "ptime" parameter you can
give to encoders, either using MS_FILTER_ADD_FMTP or MS_FILTER_ADD_ATTR,
as you noticed.
3) I would refine saying: stop sending unecessary media: for example
stop transmit silences. This indeed allows the channel to purge old
packets and restart on better basis. Also using speex with vbr=on (like
in linphone) is interesting: the speex codec will automatically adapt
the bitrate to what is needed to properly encode the voice segment.
Enabling the speex vad feature is even better, but I never implemented
in linphone.
I would also distinguish between 3G and EDGE. On 3G you often have a
very good internet, with very low packet losses, though problems start
to occur when the 3G signal received by the phone becomes too low:
packet losses, and bandwidth reduced.
On the opposite, edge is simply too bad. It can be compared as 15 years
old internet: high delay (ping not less than 300 ms) and ridiculous
bandwidth.
I think there is no way to make good VoIP on edge networks. EDGE is just
good enough to receive and send small emails...
Simon
Le mardi 07 septembre 2010 à 09:54 +0200, Vadim Lebedev a écrit :
Hello folks,
We're trying to improve mediastreamer behaviour on 3G and EDGE environments.
For this we use RTCP receiver reports to detect changes in reported
jitter, bandwidth and packet losses.
Once we detect the degradation we can adopt following strategies:
1) We can start retransmitting some/all RTP packets
2) We can pack more audio per packet
3) In case of hard congestion we can stop sending media and wait until
congestion resovled
Strategies 1 and 3 are pretty simple to implement.
But strategy 2 is less trivial to implement with mediastreamer.
I'm thinking to hook a reformatting filter just before the encoder this
way i'll need no modifiy all aduio input drivers to
suppport variable payload size per packet.
Simon what do you think?
Thanks
Vadim