Info

Download ZIP (94.2 MB)

Testing and Issues

You can test this entry and submit issues during the testing period of the VoIP Contest, Stage 2. $75,000 contest.

Entries with serious issues will not be able to win the contest, but even minor issues might be important for overall results.

Voting

Comments

My submission consists of a major refactor of the libtgvoip library.

The main problem of the libtgvoip library was the lack of a retransmission protocol for audio packets, so I implemented an efficient NACK mechanism with ack masks+the jitter buffer.
I added an additional transport ID, to allow multiplexing of different abstract streams (a bit like RTP), and direct mapping of seqnos => timestamps.

In the final version the transport multiplexing + new ACK feature is disabled, instead relying on sender-side packet duplication in case of packet loss using the reliable packet feature.

I've completely refactored the main controller; with multiple refactoring passes I've also optimized many places of the network loop, MessageThread, buffers and main network threads with modern C++ data structures, STL functions, smart ptrs and general logical optimizations, removing most C-isms.

(I realized I accidentally added my previous entry to the zip, sorry about that)
You have not added any comments yet...
by rating

Issues

Fair Wombat Mar 9, 2020 at 19:21
Plenty of useful refactoring, smart pointers etc.
Attempted to fix FEC. Unfortunately the attempt didn't succeed, possibly due to bugs. Also the bug in FEC was possibly fixed in #1273 and somehow in #1275.

We expect the contestant to take part in round 3. Suggested priorities:
1. Finalize changes in retransmission (or discard if it doesn't improve audio quality).
2. Focus on improving audio quality on different connections. Make sure to not downgrade any scores while fixing issues under particular conditions.
3. Rebase refactoring changes to new base version 2.6.
Debian 5.2.9
10
Classy Bee Mar 9, 2020 at 19:36
Thanks!
Will do, I will also take part in round 3.
For now I'll just rebase to 2.6, trying to fix some more bugs in the meantime.
Fair Wombat Feb 5, 2020 at 10:59
This is not an issue, just a request. If there were any specific network conditions which you used to optimize the initally provided library, you are welcome to share test sequences as well as your results. e.g.:

->loss(12)->rateControl('32kbit')->networkType('3g')
Stable version: 3.0
My submission: 3.3

->loss(3)->rateControl('64kbit')->after(3)->loss(20)->rateControl('8kbit')->after(3)->rateControl('64kbit')->networkType('3g')
Stable version: 3.2
My submission: 3.4

We will re-check your results and may use the sequences you provide to test other submissions.
Debian 5.2.9
Classy Bee Feb 6, 2020 at 19:29
While testing I mainly used loss(18)->rateControl('32kbit')->networkType('3g').

An example rating:
Old version: 3.62247 (preproc 2.34528, net 4.0776)
My version: 3.93717 (preproc 2.37034, net 4.36783)

Auditory results could be improved even more by disabling the PLC feature (OpusDecoder.cpp:274), which still introduces some nasty artifacts in case of severe packet loss; tried this change during final testing, but didn't feel like submitting it as I didn't have more time to test it out properly.
Fair Wombat Feb 26, 2020 at 09:01
Could you provide Git repo or something similar with commits history, so we can review changes of refactoring separate from another changes?
Debian 5.2.9
Classy Bee Feb 26, 2020 at 10:23
Of course, here's the repo: https://gitlab.com/danog/libtgvoip (unstable branch as usual).
Nobody added any issues yet...