Tips en Trucs 2021

Netwerkaudio

Onlangs ging mijn stereo-installatie stuk. Bij het zoeken naar een vervanger, kreeg ik opeens het idee om de Raspberry Pi die ik als domotica-controller gebruik, uit te breiden met een goede eindversterker. Zo kon ik de nog prima klinkende luidsprekers recupereren. Dan mis ik wel een CD-DVD speler, maar die was al lang defect en misten we eigenlijk niet. Radio luisteren we nu via internet. En TV kijken we al lang via internet op de monitor van de computer. Maar hoe koppel je alles aan elkaar, jawel via het netwerk.

Roc streaming

Er bestaat verschillende software om geluid via een netwerk naar andere apparaten te sturen. Maar bij het kijken naar TV en/of video moet je letten op latency (vertraging). Een te hoge latency zorgt dat de lippen van sprekende mensen reeds bewegen voor je het geluid hoort. M.a.w. het geluid loopt niet synchroon met het beeld, komt wat later.

Na lang zoeken kon enkel Roc streaming de latency zo laag houden dat je deze niet meer ziet.

Raspberry Pi

Eerst werd de versterker uitbreiding (HAT) op de Raspberry Pi geïnstalleerd. De luidsprekers aangesloten. Raspberry Pi OS geconfigureerd om de versterker te gebruiken. MPD software geïnstalleerd en geconfigureerd om radio te beluisteren. De Raspberry Pi kon dus al als radio tuner en versterker fungeren.

Opensuse Leap 15.2

Computers met eenvoudige audio hardware hebben meestal geen mogelijkheid om het geproduceerde geluid op te nemen. En dus ook niet de mogelijkheid om geluid via het netwerk om te leiden naar een ander apparaat. Gelukkig bestaat er een software oplossing.

Met behulp van een kernel module (systeemuitbreiding) wordt een virtueel audio apparaat aangemaakt met zowel afspeel en opname mogelijkheden. De huidige afspeelapparaten kan je opvragen met de opdracht:

dany@pindabook:~> aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: CX20751/2 Analog [CX20751/2 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [ThinkPad OneLink Dock USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Het virtuele audioapparaat voeg je aan de kernel toe met de opdracht:

dany@pindabook:~> sudo modprobe snd-aloop
[sudo] wachtwoord voor root:

Waardoor de volgende afspeelapparaten beschikbaar zijn:

dany@pindabook:~> aplay -l               
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: CX20751/2 Analog [CX20751/2 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [ThinkPad OneLink Dock USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 3: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7

Zorg ervoor dat het toegevoegde virtuele audio apparaat het standaard afspeelapparaat wordt.

Standaard afspeelapparaat

Bij het afspelen van audio hoor je nu niets, dit is normaal. Om het virtuele audio apparaat bij elke systeemstart automatisch aan te maken, voer je de volgende opdracht uit:

dany@pindabook:~> echo "snd-aloop" | sudo tee /etc/modules-load.d/snd-aloop.conf
[sudo] wachtwoord voor root: 
snd-aloop

Let op: na een herstart zullen de audio apparaten hoogstwaarschijnlijk een andere volgorde hebben. Je kunt dit nagaan met de aplay -l opdracht.

Roc streaming tools installeren

De Roc streaming tools zijn in geen enkele softwarebron te vinden, m.a.w. we zullen de broncode zelf moeten compileren. We beginnen met het installeren van de voor het compileren van Roc noodzakelijke softwarepakketten:

dany@pindabook:~> sudo zypper install gcc-c++ pkg-config scons ragel gengetopt libuv-devel libunwind-devel libpulse-devel sox-devel libtool intltool autoconf automake make cmake
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
'pkg-config' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'pkg-config-0.29.2-lp152.3.114.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

De volgende 39 NIEUWE pakketten zullen worden geïnstalleerd:
  autoconf automake bison bison-lang cmake cmake-full cmake-man gcc7-c++ gcc-c++ gengetopt gettext-tools glib2-devel intltool
  libblkid-devel libcolm-0_13_0_5 libffi-devel libjsoncpp19 libmount-devel libpcre16-0 libpcrecpp0 libpcreposix0 libpulse-devel
  librhash0 libselinux-devel libsepol-devel libsox3 libstdc++6-devel-gcc7 libstdc++-devel libtool libunwind-devel libuuid-devel
  libuv-devel make make-lang pcre-devel ragel scons sox-devel zlib-devel

De volgende 2 aanbevolen pakketten zijn automatisch geselecteerd:
  bison-lang make-lang

39 nieuwe te installeren pakketten.
Totale downloadgrootte: 32,7 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 147,3 MiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket libstdc++6-devel-gcc7-7.5.0+r278197-lp152.3.9.1.x86_64 wordt opgehaald                 (1/39),   6,7 MiB ( 35,8 MiB uitgepakt)
Ophalen: libstdc++6-devel-gcc7-7.5.0+r278197-lp152.3.9.1.x86_64.rpm .............................................[gereed (4,2 MiB/s)]
pakket libunwind-devel-1.5.0-lp152.5.6.1.x86_64 wordt opgehaald                               (2/39),  23,5 KiB ( 38,0 KiB uitgepakt)
Ophalen: libunwind-devel-1.5.0-lp152.5.6.1.x86_64.rpm .......................................................................[gereed]
pakket libuuid-devel-2.33.1-lp152.5.6.1.x86_64 wordt opgehaald                                (3/39),  56,2 KiB ( 17,5 KiB uitgepakt)
Ophalen: libuuid-devel-2.33.1-lp152.5.6.1.x86_64.rpm ........................................................................[gereed]
pakket libuv-devel-1.18.0-lp152.4.3.1.x86_64 wordt opgehaald                                  (4/39),  77,1 KiB (217,2 KiB uitgepakt)
Ophalen: libuv-devel-1.18.0-lp152.4.3.1.x86_64.rpm ............................................................[gereed (419,1 KiB/s)]
pakket zlib-devel-1.2.11-lp152.8.9.1.x86_64 wordt opgehaald                                   (5/39), 111,4 KiB (386,0 KiB uitgepakt)
Ophalen: zlib-devel-1.2.11-lp152.8.9.1.x86_64.rpm ...........................................................................[gereed]
pakket gcc7-c++-7.5.0+r278197-lp152.3.9.1.x86_64 wordt opgehaald                              (6/39),   8,8 MiB ( 23,9 MiB uitgepakt)
Ophalen: gcc7-c++-7.5.0+r278197-lp152.3.9.1.x86_64.rpm ..........................................................[gereed (4,2 MiB/s)]
pakket libblkid-devel-2.33.1-lp152.5.6.1.x86_64 wordt opgehaald                               (7/39),  44,5 KiB ( 16,8 KiB uitgepakt)
Ophalen: libblkid-devel-2.33.1-lp152.5.6.1.x86_64.rpm .......................................................................[gereed]
pakket libmount-devel-2.33.1-lp152.5.6.1.x86_64 wordt opgehaald                               (8/39),  46,1 KiB ( 34,8 KiB uitgepakt)
Ophalen: libmount-devel-2.33.1-lp152.5.6.1.x86_64.rpm ..........................................................[gereed (14,9 KiB/s)]
pakket libsox3-14.4.2-pm152.7.1.x86_64 wordt opgehaald                                        (9/39), 254,3 KiB (635,4 KiB uitgepakt)
Ophalen: libsox3-14.4.2-pm152.7.1.x86_64.rpm ................................................................................[gereed]
pakket sox-devel-14.4.2-pm152.7.1.x86_64 wordt opgehaald                                     (10/39),  37,9 KiB ( 96,5 KiB uitgepakt)
Ophalen: sox-devel-14.4.2-pm152.7.1.x86_64.rpm ..............................................................................[gereed]
pakket autoconf-2.69-lp152.3.112.noarch wordt opgehaald                                      (11/39), 706,0 KiB (  2,2 MiB uitgepakt)
Ophalen: autoconf-2.69-lp152.3.112.noarch.rpm ...................................................................[gereed (2,1 MiB/s)]
pakket bison-3.0.4-lp152.3.110.x86_64 wordt opgehaald                                        (12/39), 483,6 KiB (  1,2 MiB uitgepakt)
Ophalen: bison-3.0.4-lp152.3.110.x86_64.rpm .................................................................................[gereed]
pakket cmake-man-3.17.0-lp152.1.2.x86_64 wordt opgehaald                                     (13/39), 610,6 KiB (530,0 KiB uitgepakt)
Ophalen: cmake-man-3.17.0-lp152.1.2.x86_64.rpm ..............................................................................[gereed]
pakket gengetopt-2.22.6-lp152.4.7.x86_64 wordt opgehaald                                     (14/39), 214,0 KiB (710,9 KiB uitgepakt)
Ophalen: gengetopt-2.22.6-lp152.4.7.x86_64.rpm ................................................................[gereed (114,6 KiB/s)]
pakket libcolm-0_13_0_5-0.13.0.5-lp152.3.54.x86_64 wordt opgehaald                           (15/39),  63,6 KiB (176,4 KiB uitgepakt)
Ophalen: libcolm-0_13_0_5-0.13.0.5-lp152.3.54.x86_64.rpm ....................................................................[gereed]
pakket libffi-devel-3.2.1.git259-lp152.6.5.x86_64 wordt opgehaald                            (16/39),  26,8 KiB ( 29,1 KiB uitgepakt)
Ophalen: libffi-devel-3.2.1.git259-lp152.6.5.x86_64.rpm .....................................................................[gereed]
pakket libjsoncpp19-1.8.4-lp152.3.6.x86_64 wordt opgehaald                                   (17/39),  77,4 KiB (204,7 KiB uitgepakt)
Ophalen: libjsoncpp19-1.8.4-lp152.3.6.x86_64.rpm ............................................................................[gereed]
pakket libpcre16-0-8.41-lp152.6.104.x86_64 wordt opgehaald                                   (18/39), 212,6 KiB (530,3 KiB uitgepakt)
Ophalen: libpcre16-0-8.41-lp152.6.104.x86_64.rpm ..............................................................[gereed (177,7 KiB/s)]
pakket libpcrecpp0-8.41-lp152.6.104.x86_64 wordt opgehaald                                   (19/39),  25,1 KiB ( 38,5 KiB uitgepakt)
Ophalen: libpcrecpp0-8.41-lp152.6.104.x86_64.rpm ............................................................................[gereed]
pakket libpcreposix0-8.41-lp152.6.104.x86_64 wordt opgehaald                                 (20/39),  16,6 KiB ( 10,1 KiB uitgepakt)
Ophalen: libpcreposix0-8.41-lp152.6.104.x86_64.rpm ..........................................................................[gereed]
pakket librhash0-1.3.5-lp152.3.5.x86_64 wordt opgehaald                                      (21/39),  83,0 KiB (145,6 KiB uitgepakt)
Ophalen: librhash0-1.3.5-lp152.3.5.x86_64.rpm ...............................................................................[gereed]
pakket libsepol-devel-3.0-lp152.1.47.x86_64 wordt opgehaald                                  (22/39),  45,1 KiB (125,1 KiB uitgepakt)
Ophalen: libsepol-devel-3.0-lp152.1.47.x86_64.rpm ...........................................................................[gereed]
pakket make-4.2.1-lp152.8.110.x86_64 wordt opgehaald                                         (23/39), 275,3 KiB (394,6 KiB uitgepakt)
Ophalen: make-4.2.1-lp152.8.110.x86_64.rpm .....................................................................[gereed (14,9 KiB/s)]
pakket scons-3.1.2-lp152.2.1.x86_64 wordt opgehaald                                          (24/39), 973,8 KiB (  5,7 MiB uitgepakt)
Ophalen: scons-3.1.2-lp152.2.1.x86_64.rpm ...................................................................................[gereed]
pakket libstdc++-devel-7-lp152.4.114.x86_64 wordt opgehaald                                  (25/39),   8,3 KiB (    0   B uitgepakt)
Ophalen: libstdc++-devel-7-lp152.4.114.x86_64.rpm ...........................................................................[gereed]
pakket gcc-c++-7-lp152.4.114.x86_64 wordt opgehaald                                          (26/39),   8,9 KiB (    0   B uitgepakt)
Ophalen: gcc-c++-7-lp152.4.114.x86_64.rpm .......................................................................[gereed (7,9 KiB/s)]
pakket automake-1.15.1-lp152.4.107.noarch wordt opgehaald                                    (27/39), 817,6 KiB (  2,5 MiB uitgepakt)
Ophalen: automake-1.15.1-lp152.4.107.noarch.rpm .............................................................................[gereed]
pakket bison-lang-3.0.4-lp152.3.110.noarch wordt opgehaald                                   (28/39), 105,7 KiB (551,3 KiB uitgepakt)
Ophalen: bison-lang-3.0.4-lp152.3.110.noarch.rpm ...............................................................[gereed (95,7 KiB/s)]
pakket ragel-7.0.0.10-lp152.3.54.x86_64 wordt opgehaald                                      (29/39), 363,1 KiB (  1,5 MiB uitgepakt)
Ophalen: ragel-7.0.0.10-lp152.3.54.x86_64.rpm ...............................................................................[gereed]
pakket make-lang-4.2.1-lp152.8.110.noarch wordt opgehaald                                    (30/39), 157,6 KiB (886,1 KiB uitgepakt)
Ophalen: make-lang-4.2.1-lp152.8.110.noarch.rpm .............................................................................[gereed]
pakket pcre-devel-8.41-lp152.6.104.x86_64 wordt opgehaald                                    (31/39), 227,3 KiB (264,0 KiB uitgepakt)
Ophalen: pcre-devel-8.41-lp152.6.104.x86_64.rpm .............................................................................[gereed]
pakket libtool-2.4.6-lp152.3.101.x86_64 wordt opgehaald                                      (32/39), 748,3 KiB (  3,5 MiB uitgepakt)
Ophalen: libtool-2.4.6-lp152.3.101.x86_64.rpm ...............................................................................[gereed]
pakket cmake-full-3.17.0-lp152.1.2.x86_64 wordt opgehaald                                    (33/39),   5,7 MiB ( 30,9 MiB uitgepakt)
Ophalen: cmake-full-3.17.0-lp152.1.2.x86_64.rpm .................................................................[gereed (4,7 MiB/s)]
pakket libselinux-devel-3.0-lp152.1.47.x86_64 wordt opgehaald                                (34/39), 115,3 KiB (184,1 KiB uitgepakt)
Ophalen: libselinux-devel-3.0-lp152.1.47.x86_64.rpm .........................................................................[gereed]
pakket cmake-3.17.0-lp152.1.1.x86_64 wordt opgehaald                                         (35/39),  77,1 KiB (  715   B uitgepakt)
Ophalen: cmake-3.17.0-lp152.1.1.x86_64.rpm ..................................................................................[gereed]
pakket gettext-tools-0.19.8.1-lp152.6.6.1.x86_64 wordt opgehaald                             (36/39),   2,1 MiB (  7,9 MiB uitgepakt)
Ophalen: gettext-tools-0.19.8.1-lp152.6.6.1.x86_64.rpm ..........................................................[gereed (4,0 MiB/s)]
pakket glib2-devel-2.62.6-lp152.2.6.1.x86_64 wordt opgehaald                                 (37/39),   1,9 MiB ( 21,5 MiB uitgepakt)
Ophalen: glib2-devel-2.62.6-lp152.2.6.1.x86_64.rpm ..........................................................................[gereed]
pakket libpulse-devel-13.0-lp152.3.3.1.x86_64 wordt opgehaald                                (38/39), 420,2 KiB (  4,5 MiB uitgepakt)
Ophalen: libpulse-devel-13.0-lp152.3.3.1.x86_64.rpm ............................................................[gereed (17,2 KiB/s)]
pakket intltool-0.51.0-lp152.5.1.noarch wordt opgehaald                                      (39/39),  58,6 KiB (177,9 KiB uitgepakt)
Ophalen: intltool-0.51.0-lp152.5.1.noarch.rpm ...............................................................................[gereed]

Controleren op conflicten tussen bestanden: .................................................................................[gereed]
( 1/39) Installeren van: libstdc++6-devel-gcc7-7.5.0+r278197-lp152.3.9.1.x86_64 .............................................[gereed]
( 2/39) Installeren van: libunwind-devel-1.5.0-lp152.5.6.1.x86_64 ...........................................................[gereed]
( 3/39) Installeren van: libuuid-devel-2.33.1-lp152.5.6.1.x86_64 ............................................................[gereed]
( 4/39) Installeren van: libuv-devel-1.18.0-lp152.4.3.1.x86_64 ..............................................................[gereed]
( 5/39) Installeren van: zlib-devel-1.2.11-lp152.8.9.1.x86_64 ...............................................................[gereed]
( 6/39) Installeren van: gcc7-c++-7.5.0+r278197-lp152.3.9.1.x86_64 ..........................................................[gereed]
( 7/39) Installeren van: libblkid-devel-2.33.1-lp152.5.6.1.x86_64 ...........................................................[gereed]
( 8/39) Installeren van: libmount-devel-2.33.1-lp152.5.6.1.x86_64 ...........................................................[gereed]
( 9/39) Installeren van: libsox3-14.4.2-pm152.7.1.x86_64 ....................................................................[gereed]
(10/39) Installeren van: sox-devel-14.4.2-pm152.7.1.x86_64 ..................................................................[gereed]
(11/39) Installeren van: autoconf-2.69-lp152.3.112.noarch ...................................................................[gereed]
(12/39) Installeren van: bison-3.0.4-lp152.3.110.x86_64 .....................................................................[gereed]
(13/39) Installeren van: cmake-man-3.17.0-lp152.1.2.x86_64 ..................................................................[gereed]
(14/39) Installeren van: gengetopt-2.22.6-lp152.4.7.x86_64 ..................................................................[gereed]
(15/39) Installeren van: libcolm-0_13_0_5-0.13.0.5-lp152.3.54.x86_64 ........................................................[gereed]
(16/39) Installeren van: libffi-devel-3.2.1.git259-lp152.6.5.x86_64 .........................................................[gereed]
(17/39) Installeren van: libjsoncpp19-1.8.4-lp152.3.6.x86_64 ................................................................[gereed]
(18/39) Installeren van: libpcre16-0-8.41-lp152.6.104.x86_64 ................................................................[gereed]
(19/39) Installeren van: libpcrecpp0-8.41-lp152.6.104.x86_64 ................................................................[gereed]
(20/39) Installeren van: libpcreposix0-8.41-lp152.6.104.x86_64 ..............................................................[gereed]
(21/39) Installeren van: librhash0-1.3.5-lp152.3.5.x86_64 ...................................................................[gereed]
(22/39) Installeren van: libsepol-devel-3.0-lp152.1.47.x86_64 ...............................................................[gereed]
(23/39) Installeren van: make-4.2.1-lp152.8.110.x86_64 ......................................................................[gereed]
(24/39) Installeren van: scons-3.1.2-lp152.2.1.x86_64 .......................................................................[gereed]
(25/39) Installeren van: libstdc++-devel-7-lp152.4.114.x86_64 ...............................................................[gereed]
(26/39) Installeren van: gcc-c++-7-lp152.4.114.x86_64 .......................................................................[gereed]
(27/39) Installeren van: automake-1.15.1-lp152.4.107.noarch .................................................................[gereed]
(28/39) Installeren van: bison-lang-3.0.4-lp152.3.110.noarch ................................................................[gereed]
(29/39) Installeren van: ragel-7.0.0.10-lp152.3.54.x86_64 ...................................................................[gereed]
(30/39) Installeren van: make-lang-4.2.1-lp152.8.110.noarch .................................................................[gereed]
(31/39) Installeren van: pcre-devel-8.41-lp152.6.104.x86_64 .................................................................[gereed]
(32/39) Installeren van: libtool-2.4.6-lp152.3.101.x86_64 ...................................................................[gereed]
(33/39) Installeren van: cmake-full-3.17.0-lp152.1.2.x86_64 .................................................................[gereed]
(34/39) Installeren van: libselinux-devel-3.0-lp152.1.47.x86_64 .............................................................[gereed]
(35/39) Installeren van: cmake-3.17.0-lp152.1.1.x86_64 ......................................................................[gereed]
(36/39) Installeren van: gettext-tools-0.19.8.1-lp152.6.6.1.x86_64 ..........................................................[gereed]
(37/39) Installeren van: glib2-devel-2.62.6-lp152.2.6.1.x86_64 ..............................................................[gereed]
(38/39) Installeren van: libpulse-devel-13.0-lp152.3.3.1.x86_64 .............................................................[gereed]
(39/39) Installeren van: intltool-0.51.0-lp152.5.1.noarch ...................................................................[gereed]

Daarna downloaden we de broncode:

dany@pindabook:~> git clone https://github.com/roc-streaming/roc-toolkit.git
Cloning into 'roc-toolkit'...
remote: Enumerating objects: 15662, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 15662 (delta 7), reused 17 (delta 4), pack-reused 15635
Receiving objects: 100% (15662/15662), 5.11 MiB | 2.29 MiB/s, done.
Resolving deltas: 100% (10691/10691), done.

En kunnen we de Roc streaming tools compileren:

dany@pindabook:~> cd roc-toolkit
dany@pindabook:~/roc-toolkit> scons -Q --build-3rdparty=openfec --disable-tests --disable-pulseaudio
      GET   3rdparty/x86_64-pc-suse-linux/gcc-7.5.0-release/build/openfec-1.4.2.4
[download] https://github.com/roc-streaming/openfec/archive/v1.4.2.4.tar.gz
[extract] openfec_v1.4.2.4.tar.gz
[execute] cmake .. -DBUILD_STATIC_LIBS=ON -DDEBUG:STRING=OFF -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_LINKER=/usr/bin/gcc-7 -DCMAKE_AR=/usr/bin/ar -DCMAKE_RANLIB=/usr/bin/ranlib -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE:STRING='-fPIC -fvisibility=hidden' -DCMAKE_POSITION_INDEPENDENT_CODE=ON
[execute] make -j4
[install] 3rdparty/x86_64-pc-suse-linux/gcc-7.5.0-release/build/openfec-1.4.2.4/include
[install] 3rdparty/x86_64-pc-suse-linux/gcc-7.5.0-release/build/openfec-1.4.2.4/lib/libopenfec.a
      CXX   src/lib/src/address.cpp
      CXX   src/lib/src/config.cpp
      CXX   src/lib/src/context.cpp
      CXX   src/lib/src/log.cpp
      CXX   src/lib/src/receiver.cpp
      CXX   src/lib/src/sender.cpp
      CXX   src/modules/roc_pipeline/converter.cpp
      CXX   src/modules/roc_pipeline/port_utils.cpp
      CXX   src/modules/roc_pipeline/receiver.cpp
      CXX   src/modules/roc_pipeline/receiver_port.cpp
      CXX   src/modules/roc_pipeline/receiver_session.cpp
      CXX   src/modules/roc_pipeline/sender.cpp
      CXX   src/modules/roc_pipeline/sender_port.cpp
      CXX   src/modules/roc_pipeline/target_stdio/roc_pipeline/parse_port.cpp
      CXX   src/modules/roc_pipeline/target_stdio/roc_pipeline/port_to_str.cpp
      CXX   src/modules/roc_sndio/backend_dispatcher.cpp
      CXX   src/modules/roc_sndio/driver_info.cpp
      CXX   src/modules/roc_sndio/ibackend.cpp
      CXX   src/modules/roc_sndio/isink.cpp
      CXX   src/modules/roc_sndio/isource.cpp
      CXX   src/modules/roc_sndio/pump.cpp
      CXX   src/modules/roc_sndio/target_stdio/roc_sndio/print_drivers.cpp
      CXX   src/modules/roc_sndio/target_sox/roc_sndio/sox_backend.cpp
      CXX   src/modules/roc_sndio/target_sox/roc_sndio/sox_sink.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_pipeline.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_pipeline.a
      CXX   src/modules/roc_sndio/target_sox/roc_sndio/sox_source.cpp
      CXX   src/modules/roc_netio/target_libuv/roc_netio/basic_port.cpp
      CXX   src/modules/roc_netio/target_libuv/roc_netio/udp_sender_port.cpp
      CXX   src/modules/roc_netio/target_libuv/roc_netio/udp_receiver_port.cpp
      CXX   src/modules/roc_netio/target_libuv/roc_netio/transceiver.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_sndio.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_sndio.a
      CXX   src/modules/roc_netio/target_libuv/roc_netio/iclose_handler.cpp
      CXX   src/modules/roc_fec/codec_map.cpp
      CXX   src/modules/roc_fec/iblock_decoder.cpp
      CXX   src/modules/roc_fec/iblock_encoder.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_netio.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_netio.a
      CXX   src/modules/roc_fec/reader.cpp
      CXX   src/modules/roc_fec/writer.cpp
      CXX   src/modules/roc_fec/target_openfec/roc_fec/of_encoder.cpp
      CXX   src/modules/roc_fec/target_openfec/roc_fec/of_decoder.cpp
      CXX   src/modules/roc_rtp/composer.cpp
      CXX   src/modules/roc_rtp/format_map.cpp
      CXX   src/modules/roc_rtp/parser.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_fec.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_fec.a
      CXX   src/modules/roc_rtp/validator.cpp
      CXX   src/modules/roc_audio/depacketizer.cpp
      CXX   src/modules/roc_audio/frame.cpp
      CXX   src/modules/roc_audio/freq_estimator.cpp
      CXX   src/modules/roc_audio/freq_estimator_decim.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_rtp.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_rtp.a
      CXX   src/modules/roc_audio/iframe_decoder.cpp
      CXX   src/modules/roc_audio/iframe_encoder.cpp
      CXX   src/modules/roc_audio/ireader.cpp
      CXX   src/modules/roc_audio/iwriter.cpp
      CXX   src/modules/roc_audio/latency_monitor.cpp
      CXX   src/modules/roc_audio/mixer.cpp
      CXX   src/modules/roc_audio/null_writer.cpp
      CXX   src/modules/roc_audio/packetizer.cpp
      CXX   src/modules/roc_audio/pcm_decoder.cpp
      CXX   src/modules/roc_audio/pcm_encoder.cpp
      CXX   src/modules/roc_audio/pcm_funcs.cpp
      CXX   src/modules/roc_audio/poison_reader.cpp
      CXX   src/modules/roc_audio/poison_writer.cpp
      CXX   src/modules/roc_audio/profiling_writer.cpp
      CXX   src/modules/roc_audio/resampler.cpp
      CXX   src/modules/roc_audio/resampler_profile.cpp
      CXX   src/modules/roc_audio/resampler_reader.cpp
      CXX   src/modules/roc_audio/resampler_writer.cpp
      CXX   src/modules/roc_audio/units.cpp
      CXX   src/modules/roc_audio/watchdog.cpp
      CXX   src/modules/roc_packet/concurrent_queue.cpp
      CXX   src/modules/roc_packet/delayed_reader.cpp
      CXX   src/modules/roc_packet/fec.cpp
      CXX   src/modules/roc_packet/icomposer.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_audio.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_audio.a
      CXX   src/modules/roc_packet/interleaver.cpp
      CXX   src/modules/roc_packet/iparser.cpp
      CXX   src/modules/roc_packet/ireader.cpp
      CXX   src/modules/roc_packet/iwriter.cpp
      CXX   src/modules/roc_packet/packet.cpp
      CXX   src/modules/roc_packet/queue.cpp
      CXX   src/modules/roc_packet/router.cpp
      CXX   src/modules/roc_packet/rtp.cpp
      CXX   src/modules/roc_packet/sorted_queue.cpp
      CXX   src/modules/roc_packet/target_stdio/roc_packet/fec_scheme_to_str.cpp
      CXX   src/modules/roc_packet/target_stdio/roc_packet/print.cpp
      CXX   src/modules/roc_packet/target_stdio/roc_packet/address_to_str.cpp
      CXX   src/modules/roc_packet/target_posix/roc_packet/address.cpp
      CXX   src/modules/roc_address/io_uri.cpp
      CXX   src/modules/roc_address/io_uri_format.cpp
      CXX   src/modules/roc_address/io_uri_to_str.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_packet.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_packet.a
      CXX   src/modules/roc_address/pct.cpp
    RAGEL   src/modules/roc_address/io_uri_parse.rl
      CXX   src/modules/roc_core/heap_allocator.cpp
      CXX   build/x86_64-pc-suse-linux/gcc-7.5.0-release/modules/roc_address/io_uri_parse.cpp
      CXX   src/modules/roc_core/iallocator.cpp
      CXX   src/modules/roc_core/target_glibc/roc_core/demangle.cpp
      CXX   src/modules/roc_core/target_libunwind/roc_core/backtrace.cpp
      CXX   src/modules/roc_core/target_stdio/roc_core/print_buffer.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_address.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_address.a
      CXX   src/modules/roc_core/target_stdio/roc_core/parse_duration.cpp
      CXX   src/modules/roc_core/target_stdio/roc_core/panic.cpp
      CXX   src/modules/roc_core/target_stdio/roc_core/log.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/random.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/exit.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/colors.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/temp_file.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/format_time.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/crash.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/errno_to_str.cpp
      CXX   src/modules/roc_core/target_posix/roc_core/emergency.cpp
      CXX   src/modules/roc_core/target_libuv/roc_core/thread.cpp
      CXX   src/modules/roc_core/target_posixtime/roc_core/time.cpp
      GGO   src/tools/roc_conv/cmdline.ggo
       CC   src/lib/example/receiver_sox.c
       CC   build/x86_64-pc-suse-linux/gcc-7.5.0-release/tools/roc_conv/cmdline.c
      CXX   src/tools/roc_conv/main.cpp
       AR   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_core.a
   RANLIB   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_core.a
       CC   src/lib/example/sender_sinewave.c
      GGO   src/tools/roc_recv/cmdline.ggo
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_unstripped.so.0.1
      CXX   src/tools/roc_recv/main.cpp
       CC   build/x86_64-pc-suse-linux/gcc-7.5.0-release/tools/roc_recv/cmdline.c
       CP   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc_unstripped.so.0.1
    STRIP   build/x86_64-pc-suse-linux/gcc-7.5.0-release/libroc.so.0.1
  INSTALL   bin/x86_64-pc-suse-linux/libroc.so.0.1
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/roc-example-receiver-sox
       LN   bin/x86_64-pc-suse-linux/libroc.so.0
       LN   bin/x86_64-pc-suse-linux/libroc.so
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/roc-example-sender-sinewave
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/roc-conv
  INSTALL   bin/x86_64-pc-suse-linux/roc-example-receiver-sox
      GGO   src/tools/roc_send/cmdline.ggo
      CXX   src/tools/roc_send/main.cpp
  INSTALL   bin/x86_64-pc-suse-linux/roc-conv
  INSTALL   bin/x86_64-pc-suse-linux/roc-example-sender-sinewave
       CC   build/x86_64-pc-suse-linux/gcc-7.5.0-release/tools/roc_send/cmdline.c
    CHECK   build/x86_64-pc-suse-linux/gcc-7.5.0-release/compile_commands.json
  INSTALL   compile_commands.json
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/roc-recv
  INSTALL   bin/x86_64-pc-suse-linux/roc-recv
       LD   build/x86_64-pc-suse-linux/gcc-7.5.0-release/roc-send
  INSTALL   bin/x86_64-pc-suse-linux/roc-send

Nu de software gecompileerd is kunnen we ze installeren:

dany@pindabook:~/roc-toolkit> sudo scons -Q --build-3rdparty=openfec --disable-tests --disable-pulseaudio install
  INSTALL   /usr/include/roc
  INSTALL   /usr/lib64/libroc.so.0.1
  INSTALL   /usr/lib64/libroc.so.0
  INSTALL   /usr/lib64/libroc.so
  INSTALL   /usr/bin/roc-conv
  INSTALL   /usr/bin/roc-recv
  INSTALL   /usr/bin/roc-send

Wie van plan is de Roc streaming tools op een Raspberry Pi te gebruiken, moet deze op een Linux systeem cross compileren. Meer info kan je vinden op de webpagina van de ontwikkelaar. Indien je dit op dezelfde computer uitvoert, moet dit wel gebeuren in een andere bronmap.

Audio streamen met Roc

Om de Roc streaming tools te testen, gebruiken we één computer. M.a.w. we sturen het geluid het netwerk op en terug naar dezelfde computer (localhost met het ip adres 127.0.0.1). Het geluid wordt door Roc ontvangen en afgespeeld op de fysieke geluidskaart.

Eerst starten we de ontvanger met de opdracht:

dany@pindabook:~/roc-toolkit> roc-recv -vv -s rtp+rs8m::10001 -r rs8m::10002 -d alsa -o 'plughw:CARD=PCH,DEV=0'
15:08:04.527 [dbg] roc_sndio: initializing sox backend
15:08:04.527 [dbg] roc_recv: pool: initializing: object_size=2064 poison=0
15:08:04.527 [dbg] roc_recv: pool: initializing: object_size=2576 poison=0
15:08:04.527 [dbg] roc_recv: pool: initializing: object_size=632 poison=0
15:08:04.527 [inf] roc_sndio: sox sink: opening: driver=alsa output=plughw:CARD=PCH,DEV=0
15:08:04.549 [inf] roc_sndio: sox sink: bits=32 out_rate=48000 in_rate=0 ch=2 is_file=0
15:08:04.549 [dbg] roc_audio: mixer: initializing: frame_size=640
15:08:04.549 [dbg] roc_netio: transceiver: starting event loop
15:08:04.550 [inf] roc_netio: udp receiver: opened port 0.0.0.0:10001
15:08:04.550 [inf] roc_pipeline: receiver: adding port rtp+rs8m:0.0.0.0:10001
15:08:04.550 [inf] roc_netio: udp receiver: opened port 0.0.0.0:10002
15:08:04.550 [inf] roc_pipeline: receiver: adding port rs8m:0.0.0.0:10002
15:08:04.550 [dbg] roc_sndio: pump: starting main loop

Deze opdracht blijft luisteren naar te ontvangen geluid op het netwerk. We moeten dus een tweede terminal starten om geluid het netwerk op te sturen. Maar eerst starten we een video of andere geluidsbron waarbij het geluid op het virtuele apparaat wordt afgespeeld.

Nu kunnen we met de volgende opdracht het geluid van de virtuele geluidskaart (Loopback,DEV=1) naar de computer met het ip adres 127.0.0.1 sturen:

dany@pindabook:~> roc-send -vv -s rtp+rs8m:127.0.0.1:10001 -r rs8m:127.0.0.1:10002 -d alsa -i 'plughw:CARD=Loopback,DEV=1'
15:10:09.250 [dbg] roc_sndio: initializing sox backend
15:10:09.250 [dbg] roc_send: pool: initializing: object_size=2064 poison=0
15:10:09.250 [dbg] roc_send: pool: initializing: object_size=2576 poison=0
15:10:09.250 [dbg] roc_send: pool: initializing: object_size=632 poison=0
15:10:09.250 [inf] roc_sndio: sox source: opening: driver=alsa input=plughw:CARD=Loopback,DEV=1
15:10:09.252 [inf] roc_sndio: sox source: in_bits=32 out_bits=32 in_rate=44100 out_rate=0 in_ch=2 out_ch=0 is_file=0
15:10:09.252 [dbg] roc_netio: transceiver: starting event loop
15:10:09.252 [inf] roc_netio: udp sender: opened port 0.0.0.0:52469
15:10:09.252 [inf] roc_pipeline: sender: using remote source port rtp+rs8m:127.0.0.1:10001
15:10:09.252 [inf] roc_pipeline: sender: using remote repair port rs8m:127.0.0.1:10002
15:10:09.252 [dbg] roc_fec: of encoder: initializing: codec=rs m=8
15:10:09.252 [dbg] roc_fec: fec writer: update block size: cur_sbl=0 cur_rbl=0 new_sbl=20 new_rbl=10
15:10:09.252 [dbg] roc_audio: packetizer: initializing: n_channels=2 samples_per_packet=309
15:10:09.252 [dbg] roc_sndio: pump: starting main loop
15:10:09.261 [dbg] roc_packet: router: detected new stream: source=59325728 flags=0x8u
15:10:09.401 [dbg] roc_packet: router: detected new stream: source=0 flags=0x10u

Je moet nu geluid horen en de terminal met de ontvanger geeft extra meldingen weer:

15:10:09.264 [inf] roc_pipeline: receiver: creating session: src_addr=127.0.0.1:52469 dst_addr=0.0.0.0:10001
15:10:09.264 [dbg] roc_packet: delayed reader: initializing: delay=8820
15:10:09.264 [dbg] roc_fec: of decoder: initializing: codec=rs m=8
15:10:09.264 [dbg] roc_audio: depacketizer: initializing: n_channels=2
15:10:09.264 [dbg] roc_audio: watchdog: initializing: max_blank_duration=96000 max_drops_duration=96000 drop_detection_window=14400
15:10:09.264 [dbg] roc_audio: resampler: initializing: window_interp=128 window_size=32 frame_size=640 channels_num=2
15:10:09.264 [dbg] roc_audio: latency monitor: initializing: target_latency=8820 in_rate=44100 out_rate=48000
15:10:09.264 [dbg] roc_packet: router: detected new stream: source=59325728 flags=0x8u
15:10:09.264 [dbg] roc_audio: depacketizer: ts=320 loss_ratio=0.00000
15:10:09.385 [dbg] roc_audio: watchdog: status: bbbbbbbbbbbbbbbbbbbb
15:10:09.404 [dbg] roc_packet: router: detected new stream: source=0 flags=0x10u
15:10:09.471 [dbg] roc_packet: delayed reader: initial queue: delay=8820 queue=9270 packets=30
15:10:09.471 [dbg] roc_packet: delayed reader: trimmed queue: delay=8820 queue=8961 packets=29
15:10:09.471 [dbg] roc_fec: fec reader: update payload size: next_esi=0 cur_size=0 new_size=1248
15:10:09.471 [dbg] roc_fec: fec reader: update source block size: cur_sblen=0 cur_rblen=0 new_sblen=20
15:10:09.471 [dbg] roc_audio: depacketizer: got first packet: zero_samples=9920
15:10:09.477 [dbg] roc_audio: latency monitor: latency=8950 target=8820 fe=1.00000 trim_fe=1.00000 adj_fe=0.91875
15:10:09.531 [dbg] roc_audio: watchdog: status: bbbbbbbbbbb.........
15:10:09.605 [dbg] roc_fec: fec reader: repair queue: dropped=10
15:10:09.605 [dbg] roc_fec: fec reader: got first packet in a block, start decoding: n_packets_before=19 sbn=25846
15:10:09.605 [dbg] roc_fec: fec reader: update repair block size: cur_sblen=20 cur_rblen=0 new_rblen=235
15:10:14.484 [dbg] roc_audio: latency monitor: latency=9085 target=8820 fe=1.00001 trim_fe=1.00001 adj_fe=0.91876
15:10:19.478 [dbg] roc_audio: latency monitor: latency=9242 target=8820 fe=1.00012 trim_fe=1.00012 adj_fe=0.91886
15:10:24.477 [dbg] roc_audio: latency monitor: latency=9079 target=8820 fe=1.00015 trim_fe=1.00015 adj_fe=0.91888
15:10:29.264 [dbg] roc_audio: depacketizer: ts=1768655309 loss_ratio=0.00000
15:10:29.478 [dbg] roc_audio: latency monitor: latency=9225 target=8820 fe=1.00012 trim_fe=1.00012 adj_fe=0.91886
15:10:34.051 [dbg] roc_audio: watchdog: status: ..............ibbbbb
15:10:34.198 [dbg] roc_audio: watchdog: status: bbbbbbbbbbbbbbbbbbbb
15:10:34.225 [dbg] roc_audio: latency monitor: latency out of bounds: latency=-9104 min=-8820

Zowel de zender als de ontvanger kan je onderbreken door Ctrl+c te drukken.

Mocht het streamen mislukken, controleer dan de volgorde van opstarten:

  1. De opdracht om een audio netwerkstream te ontvangen (roc-recv).
  2. Een programma dat geluid produceert en deze naar de virtuele audio hardware stuurt.
  3. De opdracht om een audio netwerkstream te verzenden (roc-send) en let daarbij op de naam van de fysieke geluidskaart (bij mij PCH,DEV=0) (te achterhalen met aplay -l.

Naar een ander apparaat streamen

Installeer de Roc streaming tools op een andere computer zoals hierboven besproken. Voor het afspelen van geluid start je eerst de ontvanger op de andere computer:

dany@pindadomo:~ $ ./roc-recv -vv -s rtp+rs8m::10001 -r rs8m::10002 -d alsa

Indien je geen afspeelapparaat opgeeft, wordt het standaard afspeelapparaat gebruikt. Start opnieuw een programma op dat geluid produceert en deze naar de virtuele geluidskaart stuurt. Daarna zend je het geproduceerde geluid via het netwerk naar de computer die het moet weergeven:

dany@pindabook:~> roc-send -vv -s rtp+rs8m:192.168.1.38:10001 -r rs8m:192.168.1.38:10002 -d alsa -i 'plughw:CARD=Loopback,DEV=1'

Video en audio synchroniseren

Hoewel de latenty (vertraging) van de Roc tools nog meevalt, valt deze bij het afspelen van video's met gesprekken wel degelijk op. Via allerlei opties kan je de Roc tools echter zo instellen dat deze optimaal werkt met de mogelijkheden van jouw hardware en de snelheid van jouw netwerk. Opnieuw kan je op een webpagina van de ontwikkelaar lezen met welke opties je een minimale latentie kunt bereiken. Ik bereikte uitstekende resultaten zonder foutmeldingen met de volgende opties voor de ontvanger:

dany@pindadomo:~ $ ./roc-recv -vv -s rtp+rs8m::10001 -r rs8m::10002 -d alsa -o 'plughw:CARD=IQaudIODAC,DEV=0' --frame-size=320 --sess-latency=25ms

En voor de zender:

dany@main:~> roc-send -vv -s rtp+rs8m:192.168.1.38:10001 -r rs8m:192.168.1.38:10002 -d alsa -i 'plughw:CARD=Loopback,DEV=1' --nbsrc=5 --nbrpr=5  --frame-size=320

Automatiseren

De Roc streaming tools stellen hun eisen:

Om deze obstakels uit de weg te gaan, gebruik ik een script om de ontvanger enkel te starten als dit nodig is. De ontvanger terug af te sluiten als we er geen gebruik meer van willen maken, zodat de versterker vrij komt voor andere geluidsbronnen (MPD Radio). Bij het opstarten van de zender wordt een testgeluid afgespeeld om de zender te begeleiden. Onderstaande script maakt gebruik van SSH (geconfigureerd zonder wachtwoorden, maar met Public Key Authentification) om opdrachten zoals het opstarten en afsluiten van de ontvanger vanaf de gebruikers PC uit te voeren. Om opdrachten gelijktijdig uit te voeren, bijvoorbeeld bij het afspelen van geluid bij het starten van de zender, wordt gebruik gemaakt van opdrachten die op de achtergrond worden uitgevoerd (eindigen op &).

#!/bin/bash
# HiFi.sh
# Bepaal het IP adres van de ontvanger
ipadres=$(getent hosts pindadomo | awk '{print $1}')

# activeer ontvanger
(ssh -o StrictHostKeyChecking=no pindadomo './roc-recv -vv -s rtp+rs8m::10001 -r rs8m::10002 -d alsa -o 'plughw:CARD=IQaudIODAC,DEV=0' --frame-size=320 --sess-latency=25ms') &

# start testgeluid
speaker-test -c2 -l1 -twav &
sleep 1

# activeer zender
roc-send -vv -s rtp+rs8m:${ipadres}:10001 -r rs8m:${ipadres}:10002 -d alsa -i 'plughw:CARD=Loopback,DEV=1' --nbsrc=5 --nbrpr=5  --frame-size=320 &

keuze=$(kdialog --menu "Selecteer programma:" 1 "Google Chrome TV" 2 "Firefox" 3 "VLC speler")
echo $keuze
case $keuze in
  1) # start Chrome
    google-chrome
    ;;
  2)
    firefox
    ;;
  3)
    vlc
    ;;
esac
# stop zender
killall roc-send
# stop ontvanger
ssh -o StrictHostKeyChecking=no pindadomo 'killall roc-recv'

Roc streaming tools verwijderen

Deïnstalleer de Roc streaming tools vanuit de broncode map met de volgende opdracht:

dany@pindabook:~/roc-toolkit> sudo scons -Q --build-3rdparty=openfec --disable-tests --disable-pulseaudio uninstall
 UNINSTALL   /usr/include/roc
 UNINSTALL   /usr/lib64/libroc.so.0.1
 UNINSTALL   /usr/lib64/libroc.so.0
 UNINSTALL   /usr/lib64/libroc.so
 UNINSTALL   /usr/bin/roc-conv
 UNINSTALL   /usr/bin/roc-recv
 UNINSTALL   /usr/bin/roc-send

Verwijder de pakketten om de Roc streaming tools te compileren met de opdracht:

dany@pindabook:~/roc-toolkit> sudo zypper remove -u gcc-c++ scons ragel gengetopt libuv-devel libunwind-devel libpulse-devel sox-devel libtool intltool autoconf automake make cmake         
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 39 pakketten zullen worden VERWIJDERD:
  autoconf automake bison bison-lang cmake cmake-full cmake-man gcc7-c++ gcc-c++ gengetopt gettext-tools glib2-devel intltool
  libblkid-devel libcolm-0_13_0_5 libffi-devel libjsoncpp19 libmount-devel libpcre16-0 libpcrecpp0 libpcreposix0 libpulse-devel
  librhash0 libselinux-devel libsepol-devel libsox3 libstdc++6-devel-gcc7 libstdc++-devel libtool libunwind-devel libuuid-devel
  libuv-devel make make-lang pcre-devel ragel scons sox-devel zlib-devel

39 te verwijderen pakketten.
Na de bewerking zal 147,3 MiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
( 1/39) Verwijderen van bison-lang-3.0.4-lp152.3.110.noarch .................................................................[gereed]
( 2/39) Verwijderen van cmake-3.17.0-lp152.1.1.x86_64 .......................................................................[gereed]
( 3/39) Verwijderen van cmake-man-3.17.0-lp152.1.2.x86_64 ...................................................................[gereed]
( 4/39) Verwijderen van gcc-c++-7-lp152.4.114.x86_64 ........................................................................[gereed]
( 5/39) Verwijderen van gengetopt-2.22.6-lp152.4.7.x86_64 ...................................................................[gereed]
( 6/39) Verwijderen van intltool-0.51.0-lp152.5.1.noarch ....................................................................[gereed]
( 7/39) Verwijderen van libpulse-devel-13.0-lp152.3.3.1.x86_64 ..............................................................[gereed]
( 8/39) Verwijderen van libtool-2.4.6-lp152.3.101.x86_64 ....................................................................[gereed]
( 9/39) Verwijderen van libunwind-devel-1.5.0-lp152.5.6.1.x86_64 ............................................................[gereed]
(10/39) Verwijderen van libuv-devel-1.18.0-lp152.4.3.1.x86_64 ...............................................................[gereed]
(11/39) Verwijderen van make-lang-4.2.1-lp152.8.110.noarch ..................................................................[gereed]
(12/39) Verwijderen van ragel-7.0.0.10-lp152.3.54.x86_64 ....................................................................[gereed]
(13/39) Verwijderen van scons-3.1.2-lp152.2.1.x86_64 ........................................................................[gereed]
(14/39) Verwijderen van sox-devel-14.4.2-pm152.7.1.x86_64 ...................................................................[gereed]
(15/39) Verwijderen van bison-3.0.4-lp152.3.110.x86_64 ......................................................................[gereed]
(16/39) Verwijderen van cmake-full-3.17.0-lp152.1.2.x86_64 ..................................................................[gereed]
(17/39) Verwijderen van gcc7-c++-7.5.0+r278197-lp152.3.9.1.x86_64 ...........................................................[gereed]
(18/39) Verwijderen van gettext-tools-0.19.8.1-lp152.6.6.1.x86_64 ...........................................................[gereed]
Aanvullende rpm-uitvoer:
install-info: No such file or directory for /usr/share/info/gettext.info.gz
install-info: No such file or directory for /usr/share/info/autosprintf.info.gz


(19/39) Verwijderen van glib2-devel-2.62.6-lp152.2.6.1.x86_64 ...............................................................[gereed]
(20/39) Verwijderen van automake-1.15.1-lp152.4.107.noarch ..................................................................[gereed]
(21/39) Verwijderen van libcolm-0_13_0_5-0.13.0.5-lp152.3.54.x86_64 .........................................................[gereed]
(22/39) Verwijderen van libsox3-14.4.2-pm152.7.1.x86_64 .....................................................................[gereed]
(23/39) Verwijderen van make-4.2.1-lp152.8.110.x86_64 .......................................................................[gereed]
(24/39) Verwijderen van librhash0-1.3.5-lp152.3.5.x86_64 ....................................................................[gereed]
(25/39) Verwijderen van libjsoncpp19-1.8.4-lp152.3.6.x86_64 .................................................................[gereed]
(26/39) Verwijderen van zlib-devel-1.2.11-lp152.8.9.1.x86_64 ................................................................[gereed]
(27/39) Verwijderen van libselinux-devel-3.0-lp152.1.47.x86_64 ..............................................................[gereed]
(28/39) Verwijderen van libmount-devel-2.33.1-lp152.5.6.1.x86_64 ............................................................[gereed]
(29/39) Verwijderen van libffi-devel-3.2.1.git259-lp152.6.5.x86_64 ..........................................................[gereed]
(30/39) Verwijderen van autoconf-2.69-lp152.3.112.noarch ....................................................................[gereed]
(31/39) Verwijderen van pcre-devel-8.41-lp152.6.104.x86_64 ..................................................................[gereed]
(32/39) Verwijderen van libsepol-devel-3.0-lp152.1.47.x86_64 ................................................................[gereed]
(33/39) Verwijderen van libblkid-devel-2.33.1-lp152.5.6.1.x86_64 ............................................................[gereed]
(34/39) Verwijderen van libstdc++-devel-7-lp152.4.114.x86_64 ................................................................[gereed]
(35/39) Verwijderen van libpcreposix0-8.41-lp152.6.104.x86_64 ...............................................................[gereed]
(36/39) Verwijderen van libpcrecpp0-8.41-lp152.6.104.x86_64 .................................................................[gereed]
(37/39) Verwijderen van libpcre16-0-8.41-lp152.6.104.x86_64 .................................................................[gereed]
(38/39) Verwijderen van libuuid-devel-2.33.1-lp152.5.6.1.x86_64 .............................................................[gereed]
(39/39) Verwijderen van libstdc++6-devel-gcc7-7.5.0+r278197-lp152.3.9.1.x86_64 ..............................................[gereed]

Verwijder de automatische aanmaak van de virtuele geluidskaart met de opdracht:

dany@pindabook:~/roc-toolkit> sudo rm /etc/modules-load.d/snd-aloop.conf

Bij de volgende systeemstart zal de virtuele geluidskaart verdwenen zijn. Stel dan ook terug een standaard geluidskaart naar voorkeur in. Ook de map met de broncode kan dan verwijderd worden:

dany@pindabook:~/roc-toolkit> cd
dany@pindabook:~> sudo rm -r roc-toolkit/