Info

Download ZIP (423.9 KB)

Testing and Issues

You can test this entry and submit issues during the testing period of the VoIP Contest, Round 1 contest.

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

Voting

112

Comments

Mindful Pug Oct 28, 2019 at 15:44
No modifications to external dependencies, including libtgvoip -- AudioDataCallbacks is used instead. Only one external dependency for runtime -- libopusfile0. The final binaries strip'ed just to minimize the archive.

There are 2 types of dependencies:
- deb-packages.txt -- to run tgvoipcall and tgvoiprate;
- src/deb-packages.txt -- to build tgvoipcall and tgvoiprate.

In addition to Debian packages, there are 2 libraries that are built from sources. They are required by tgvoipcall both and downloaded by CMake/Make automatically:
- libtgvoip (to maintain Telegram calls; used exactly d4a0f719 commit);
- libopusenc (to encode PCM to OGG).

To build run `cmake . && make` inside src/tgvoipcall or src/tgvoiprate after installing src/deb-packages.txt dependencies.
1
Mindful Pug Oct 28, 2019 at 17:08
In addition, tgvoipcall has an optional parameter -n which allows changing the Network Type. It's WiFi by default, but can be changed without recompiling. In my experience, it's important option, so I decided to allow setting it up from the command line like other parameters.

Also, it has another trick -- eventfd -- a mutex/semaphore with read/write primitives. It allows for preventing an extra CPU load while waiting for the finish of the transmission/receiving.

Also, there are no extra timers/sleeps for timeouts -- internal timers of libtgvoip are used instead.
1
Mindful Pug Oct 29, 2019 at 12:17
tgvoiprate uses a simple, but adequate linear combination of 2 heuristics:
- the measure of non-silent frames in the source and in the distorted copy;
- the measure of values in the magnitude specter of the source and of the distorted copy.

It's not ideal but has a very good ratio between simplicity and quality and gives adequate estimation in the majority of cases.
1
You have not added any comments yet...
by rating

Issues

Fair Wombat Nov 14, 2019 at 11:05
The submitted tgvoiprate app got a very good score of 335 and took the 1st place in the scoring table, receiving 5⭐️.
One minor issue was discovered with tgvoipcall: output was often empty due to timeouts. Adding the taskset -c 0prefix for launch command fixed this by forcing the program to run with one CPU core. The program likely wasn't optimized to run on a multi-CPU instance. -0.25⭐️
Result: 4.75⭐️
10
Mindful Pug Oct 31, 2019 at 22:39
Hello and thank you for the interest in my implementation. I'm sorry about non-informative the error message and will investigate how to avoid it.

Indeed, opusfile returns OP_EBADTIMESTAMP which means "The first or last granule position of a link failed basic validity checks.". Moreover, opusinfo outputs "WARNING: Samples with negative granpos in stream 1", i.e. the file is slightly corrupted. But I don't know at the moment the ways to ask opusfile to ignore this error. Once I find the answer, I'll post the solution.
Fair Wombat Nov 12, 2019 at 11:55
Was any external code used for tgvoiprate, which is subject to copyrights / patents / licensing?
Debian GNU/Linux 10 (buster)
Mindful Pug Nov 12, 2019 at 22:13
Thank you for your interest and your notification. In compare to libtgvoip, only 2 extra dependencies are used: libopusfile and libopusenc. Both of them are by Xiph.Org Foundation who maintains OPUS codec as well. According to https://github.com/xiph/opusfile/blob/master/COPYING and https://github.com/xiph/libopusenc/blob/master/COPYING there are no such limitations which you are listed.
Nobody added any issues yet...