avtpsink: Implement synchronization mechanism

The avtpsink element is expected to transmit AVTPDUs at specific times,
according to GstBuffer timestamps. Currently, the transmission time is
controlled in software via the rendering synchronization mechanism
provided by GstBaseSink class. However, that mechanism may not cope with
some AVB use-cases such as Class A streams, where AVTPDUs are expected
to be transmitted at every 125 us. Thus, this patch introduces avtpsink
own mechanism which leverages the socket transmission scheduling
infrastructure introduced in Linux kernel 4.19.  When supported by the
NIC, the transmission scheduling is offloaded to the hardware, improving
transmission time accuracy considerably.

To illustrate that, a before-after experiment was carried out. The
experimental setup consisted in 2 PCs with Intel i210 card connected
back-to-back running an up-to-date Archlinux with kernel 5.3.1. In one
host gst-launch-1.0 was used to generate a 2-minute Class A stream while
the other host captured the packets. The metric under evaluation is the
transmission interval and it is measured by checking the 'time_delta'
information from ethernet frames captured at the receiving side.

The table below shows the outcome for a 48 kHz, 16-bit sample, stereo
audio stream. The unit is nanoseconds.

       |   Mean |   Stdev |     Min |     Max |   Range |
-------+--------+---------+---------+---------+---------+
Before | 125000 │    2401 │  110056 │  288432 │  178376 |
After  | 125000 │      18 │  124943 │  125055 │     112 |

Before this patch, the transmission interval mean is equal to the
optimal value (Class A stream -> 125 us interval), and it is kept the
same after the patch.  The dispersion measurements, however, had
improved considerably, meaning the system is now consistently
transmitting AVTPDUs at the correct time.

Finally, the socket transmission scheduling infrastructure requires the
system clock to be synchronized with PTP clock so this patches modifies
the AVTP plugin documentation to cover how to achieve that.
23 jobs for avtpsink-tx-scheduling in 54 minutes and 39 seconds (queued for 11 seconds)
Status Job ID Name Coverage
  Preparation
passed #890412
gst indent

00:00:30

passed #890411
manifest

00:00:26

 
  Build
passed #890422
build cerbero cross-android universal

00:10:35

manual #890426
gst-ios-12.2 allowed to fail manual
build cerbero cross-ios universal
passed #890423
build cerbero cross win32

00:10:58

passed #890424
build cerbero cross win64

00:07:44

passed #890421
build cerbero fedora x86_64

00:08:41

passed #890425
gst-macos-10.14
build cerbero macos x86_64

00:40:03

passed #890417
build clang fedora x86_64

00:11:41

passed #890413
build fedora x86_64

00:10:25

passed #890420
docker windows 1607
build msys2

00:17:18

passed #890414
build nodebug fedora x86_64

00:07:35

passed #890415
build static fedora x86_64

00:16:47

passed #890416
build static nodebug fedora x86_64

00:07:11

passed #890418
docker windows 1607
build vs2017 amd64

00:12:10

passed #890419
docker windows 1607
build vs2017 x86

00:14:14

 
  Test
passed #890986
check fedora

00:03:29

passed #890428
integration testsuites fedora

00:39:59

passed #890429
valgrind bad

00:10:12

failed #890427
check fedora

00:03:59

 
  Integrate
passed #890430
cross-android universal examples

00:06:44

manual #890432
gst-ios-12.2 allowed to fail manual
cross-ios universal examples
passed #890431
documentation

00:05:11