Signaalinkäsittely ja äänen miksaami- nen WebRTC …

59
Joonas Siikavirta Signaalinkäsittely ja äänen miksaami- nen WebRTC-sovelluksessa Metropolia Ammattikorkeakoulu Insinööri (AMK) Tieto- ja viestintätekniikka Insinöörityö 12.5.2020

Transcript of Signaalinkäsittely ja äänen miksaami- nen WebRTC …

Joonas Siikavirta

Signaalinkäsittely ja äänen miksaami-nen WebRTC-sovelluksessa

Metropolia Ammattikorkeakoulu

Insinööri (AMK)

Tieto- ja viestintätekniikka

Insinöörityö

12.5.2020

Tiivistelmä

Tekijä Otsikko Sivumäärä Aika

Joonas Siikavirta Signaalinkäsittely ja äänen miksaaminen WebRTC-sovelluk-sessa 51 sivua 12.5.2020

Tutkinto insinööri (AMK)

Tutkinto-ohjelma Tieto- ja viestintätekniikka

Ammatillinen pääaine Ohjelmistotuotanto

Ohjaajat

yliopettaja Ville Jääskeläinen teknologiajohtaja Kari Heikkilä

Työn tavoitteena oli löytää selityksiä ja ratkaisuja reaaliaikaisten ja kaksisuuntaisten etä-palveluiden välittämiseen kehitetyn WebRTC-teknologiaan perustuvan kuvapuhelusovel-luksen äänen- ja kuvanlaadun ongelmiin tutkimalla WebRTC-ohjelmistoprojektin teknologi-oita ja signaalinprosessointikomponenttien toimintaa. Lisäksi työssä selvitettiin mahdolli-suuksia helppokäyttöisen mikserisovelluksen toteuttamiseen, jota voitaisiin käyttää tausta-musiikin miksaamiseen ohjaajan äänistriimiin. Tämän avulla voitaisiin luopua kalliiden ja ääniteknistä osaamista vaativien ulkoisten äänilaitteiden käytöstä. Työn ensimmäinen vaihe oli tutkia WebRTC:n arkkitehtuurin, rajapintojen ja protokollien määrittelyjä. Näin saatiin selville, mitkä tekijät WebRTC-sovelluksessa voivat vaikuttaa hei-kentävästi äänen- ja kuvan laatuun. Työn toisessa vaiheessa tutustuttiin tarkemmin WebRTC:n signaalinkäsittelykomponenttien toimintaan sekä testattiin niiden toimivuutta erilaisille äänisignaaleille. Työn kolmannessa vaiheessa suunniteltiin, miten Sanoste Oy:n ohjaajan selainsovellukseen integroitava ja automatisoitu äänimikserisovellus voitaisiin to-teuttaa olemassa olevien teknologioiden ja Web API:en avulla. Suunnittelutyössä kehitetty-jen ratkaisujen todentamiseksi työn aikana kehitettiin myös toimiva mikserisovelluksen pro-totyyppi. Työn aikana tehdyn tutkimustyön ja testausten tuloksena syntyi selkeä kuva siitä, miten WebRTC:n signaalinkäsittelykomponentit vaikuttavat äänenlaatuun etenkin musiikkia sisäl-tävien äänisignaalien kohdalla. Lisäksi tutkimuksien avulla löydettiin myös muita tekijöitä, kuten WebRTC:n ruuhkanhallintaominaisuus, jotka voivat vaikuttaa äänen- ja kuvanlaa-tuun usean osallistujan kuvapuhelussa. Mikserisovelluksen prototyypin avulla voitiin myös osoittaa, että taustamusiikin miksaamiseen vaadittavat ominaisuudet tarjoavan mikseriso-velluksen toteuttaminen on mahdollista olemassa olevien Web API:en avulla.

Avainsanat WebRTC, signaalinkäsittely, mikserisovellus

Abstract

Author Title Number of Pages Date

Joonas Siikavirta Signal Processing and Audio Mixing in a WebRTC Application 51 pages 12 May 2020

Degree Bachelor of Engineering

Degree Programme Information and Communication Technology

Professional Major Software Engineering

Instructors

Ville Jääskeläinen, Principal Lecturer Kari Heikkilä, CTO

The goal of this thesis was to find explanations and solutions for audio and video quality issues found in a WebRTC based video chat application designed for delivering remote services by researching the technologies and signal processing components used in the WebRTC project. Another objective was to find out if it is feasible to implement an easy-to-use audio mixing application for adding background music to the instructor’s audio stream, which would remove the need for expensive audio equipment that require skills in audio technology to operate. The first phase was to research the architecture, APIs and protocols defined by the WebRTC project and to find which factors may contribute to the poor audio and video qual-ity in a WebRTC application. The second phase was to look at the signal processing com-ponents of WebRTC more closely and to test their behavior with different audio signals. The third phase was to research how a highly automated audio mixing application that can be integrated into Sanoste’s instructor’s browser application could be implemented. This was done by studying the existing technologies and Web APIs, and also testing the tech-nologies and solutions in practice by making a prototype of the audio mixing application. As a result of the research and testing done during the study, a clear understanding on how the signal processing in a WebRTC application affect the audio quality, especially when music is involved, was formed. Also, it was found that there are other factors, such as the congestion control of WebRTC, which may impact the audio and video quality in a multiparty video chat. With the developed audio mixing application prototype, it was shown that by using only the existing Web APIs, it is possible to implement an easy-to-use audio mixing application that can offer all the functionalities required for mixing background mu-sic.

Keywords WebRTC, signal processing, mixing application

Sisällys

Lyhenteet

1 Johdanto 1

2 WebRTC 3

2.1 WebRTC yleisesti 3 2.2 Ohjelmointirajapinnat 5 2.3 Istunnonhallinta 5 2.4 Tiedonsiirto 6

2.4.1 Tiedonsiirtoprotokolla 7 2.4.2 Tietoliikenteen salaaminen ja varmentaminen 7 2.4.3 Tiedonsiirron hallinta 8 2.4.4 Vertaisverkkoyhteyden muodostus ja hallinta 9

2.5 VideoEngine ja VoiceEngine 10 2.6 Ongelmien jäljittämisen työkalut 11 2.7 Tehdyt havainnot 12

3 Sanoste Oy:n kuvapuhelujärjestelmä 14

3.1 Kuvapuhelujärjestelmän WebRTC-toiminnallisuus 14 3.2 Kuvapuhelujärjestelmän arkkitehtuuri 17 3.3 Osallistujan sovellus 18 3.4 Palveluntuottajan sovellus 18

4 Signaalinkäsittely WebRTC-sovelluksissa 20

4.1 WebRTC:n signaalinkäsittelystä yleisesti 20 4.2 Kuvan ja äänen pakkausmenetelmät 21 4.3 Puheaktiivisuuden tunnistaminen - VAD 22 4.4 Äänen kierto ja sen ehkäiseminen - AES ja AEC 24 4.5 Melunvaimennus - NS 26 4.6 Automaattinen äänentason hallinta - AGC 27 4.7 Web Audio API 28

5 WebRTC:n signaalinkäsittelykomponenttien testaaminen 30

5.1 Testiohjelma 30 5.2 Testisignaalien muodostaminen 31 5.3 Testauksen tulokset 32

6 Äänten miksaaminen Sanoste Oy:n sovelluksessa 35

6.1 Mikserisovelluksen vaatimukset 35 6.2 Mikserisovelluksen teknologiat ja integrointi 36 6.3 Laitekokoonpanot ja signaalin esikäsittely 37 6.4 Äänilähteet ja niiden hallinta 38 6.5 Striimien alustaminen 39 6.6 Multimedialaitteiden valinta ja asetukset 40 6.7 Äänentasojen analysointi ja hallinta 41 6.8 Talkover-toiminto 42 6.9 Striimien reitittäminen ja miksaaminen 43 6.10 Asetusten tallentaminen 44 6.11 Mikserisovelluksen toimintojen testaaminen 47

7 Yhteenveto 49

Lähteet 50

Lyhenteet

AEC Acoustic Echo Cancellation. Termi, jota käytetään kaiuttimesta saapuvan

äänen poistamisesta äänilähteen sisääntulosignaalista kaksisuuntaisessa

reaaliaikaisessa kommunikaatiosovelluksessa.

AGC Automatic Gain Control. Termi, jota käytetään äänilähteen sisääntulotason

asettamisesta automatisoidusti sisääntulosignaalin perusteella.

CPU Central Processing Unit. Yleissuoritin, joka on suunniteltu suorittamaan eri-

laisia tietokoneohjelmien sisältämiä laskentatehtäviä.

DTLS Datagram Transport Layer Security. Yhteydettömän tietoliikenteen suojaa-

miseen käytettävä salausprotokolla.

ICE Interactive Connection Establishment. Protokolla, joka hallinnoi vertais-

verkkoyhteyden muodostamista julkisen osoiteavaruuden ylitse.

IETF Internet Engineering Task Force. Verkkoteknologioiden ja -protokollien ke-

hittämiseen keskittyvä kansainvälinen yhteisö.

IoT Internet of Things. Käsite, jolla kuvataan tiedonsiirtoverkkoon kytkettyjen

laitteiden keskinäistä tiedonsiirtoa.

IP Internet Protocol. Internetin verkkokerroksessa käytettävä protokolla.

NR Noise Reduction. Termi, jota käytetään ympäristöstä aiheutuvan taustame-

lun määrän vähentämisestä äänilähteen sisääntulosignaalista.

RTC Real Time Communications. Käsite, jolla kuvataan lähes viiveetöntä tie-

donsiirtoa kahden tai useamman osapuolen välillä.

RTCP Real-time Transport Control Protocol. RTP-liikenteen seuraamiseen ja hal-

lintaan tarkoitettu tietoliikenneprotokolla.

RTP Real-time Transport Protocol. Reaaliaikaiseen median striimamiseen käy-

tettävä tietoliikenneprotokolla.

SCTP Stream Control Transport Protocol. Internetin kuljetuskerroksessa käytet-

tävä yhteydellinen viestipohjainen tiedonsiirtoprotokolla.

SDP Session Description Protocol. Reaaliaikaisissa kommunikaatio- ja strii-

maussovelluksissa istunnon yksityiskohtien kuvaamiseen käytettävä pro-

tokolla.

SRTCP Secure Real-time Transport Control Protocol. RTCP-tietoliikenneprotokol-

lan profiili, joka tarjoaa suojausmekanismin RTCP-liikenteelle.

SRTP Secure Real-time Transport Protocol. RTP-tietoliikenneprotokollan profiili,

joka tarjoaa suojausmekanismin RTP-liikenteelle.

STUN Session Traversal Utilities for NAT. Protokolla, jota käytetään asiakaspään

laitteen julkisen verkko-osoitteen selvittämisessä.

TCP Transmission Control Protocol. Internetin kuljetuskerroksessa käytettävä

yhteydellinen tavujonopohjainen tiedonsiirtoprotokolla.

TLS Transport Layer Security. Yhteydellisen tietoliikenteen suojaamiseen käy-

tettävä salausprotokolla.

TURN Traversal Using Relays around NAT. Protokolla, jota käytetään silloin, kun

vertaisverkkoyhteyden muodostaminen STUN-protokollan avulla epäon-

nistuu.

UDP User Datagram Protocol. Internetin kuljetuskerroksessa käytettävä yhtey-

detön viestipohjainen tiedonsiirtoprotokolla.

VAD Voice Activity Detection. Termi, jota käytetään puhetta sisältävien jaksojen

tunnistamisesta äänilähteen sisääntulosignaalista.

VoIP Voice Over IP. Termi, jota käytetään äänen reaaliaikaista striimaamisesta

internet protokollan avulla.

W3C World Wide Web Consortium. Web-standardien kehittämiseen keskittyvä

kansainvälinen yhteisö.

1

1 Johdanto

Työn tilaaja Sanoste Oy on kehittänyt palvelualustan etäpalveluiden tuottamiseen, jonka

avulla palveluiden tuottajat pystyvät tarjoamaan palveluitaan suuremmalle asiakasjou-

kolle ja pienemmin kustannuksin kuin perinteisin keinoin olisi mahdollista. Sanoste Oy:n

palvelualustan ytimessä on WebRTC-teknologiaan (Web Real Time Communication) pe-

rustuva kuvapuhelusovellus, jonka avulla palveluntuottajat voivat välittää palveluitaan

usealle osallistujalle samanaikaisesti osallistujien maantieteellisestä sijainnista riippu-

matta.

Sanoste Oy:n kuvapuhelusovelluksen avulla välitettävät palvelut ovat reaaliaikaisia ja

kaksisuuntaisia, jonka ansiosta palvelun ohjaaja pystyy antamaan reaaliaikaista ohjeis-

tusta ja palautetta palvelun osallistujille. Palveluiden reaaliaikaisuus ja kaksisuuntaisuus

luo kuitenkin teknisiä haasteita etenkin äänen välittämisen suhteen, sillä ilman oikean-

laisia ratkaisuja ääni pääsisi kiertämään ohjaajan ja osallistujien välillä. Muita ääneen

liittyviä ongelmia ovat mahdollinen taustamelu ja äänenvoimakkuuden pitäminen sopi-

valla tasolla.

Vaikka WebRTC tarjoaa ratkaisut edellä mainittuihin ongelmiin, on niiden käyttö Sanoste

Oy:n tapauksessa ongelmallista, sillä ne luovat rajoitteita palveluiden sisällön suhteen.

WebRTC:n tarjoamat ratkaisut toimivat kohtalaisen hyvin palveluissa, joissa osallistujille

välitetään ainoastaan puhetta, mutta niiden on havaittu aiheuttavan suuria ongelmia mu-

siikkia sisältävien palveluiden kohdalla. Musiikkia sisältäviä palveluita ovat muun mu-

assa yhteislaulupalvelut ja liikuntapalvelut, joissa liikkeitä tehdään musiikin tahtiin. Ha-

vaitut ongelmat ovat moninaisia ja niiden vaikutus palvelun laatuun on merkittävä. Ha-

vaittuja ongelmia ovat muun muassa äänen puuroutuminen ja säröytyminen, kuvan pät-

kiminen ja pikselöityminen sekä äänen ja kuvan epäsynkronisuus.

Liikuntapalveluihin, joissa käytetään taustamusiikkia, liittyy myös toinen haaste. Musiikin

ja ohjaajan puheen miksaaminen vaatii ulkoisten ääniteknisten laitteiden käyttöä, jotka

ovat palveluntuottajan näkökulmasta katsottuna ongelmallisia sekä hintansa että niiden

käyttöön vaaditun ääniteknisen osaamisen takia.

2

Tämän insinöörityön tavoitteena oli tutkia WebRTC:n ja sen sisältämien signaalinkäsit-

telykomponenttien toimintaa ja tätä kautta löytää selityksiä ja ratkaisuja musiikkia sisältä-

vien palveluiden ongelmiin. Lisäksi tarkoituksena oli ratkaista äänten miksaamiseen liit-

tyviä ongelmia selvittämällä mahdollisuuksia palveluntuottajan kuvapuhelusovellukseen

integroitavan mikserisovelluksen kehittämiseen, jonka avulla voitaisiin mahdollistaa ään-

ten miksaaminen ilman ääniteknistä osaamista ja ulkoisia lisälaitteita.

Työ jakaantui kolmeen eri vaiheeseen. Työn ensimmäisessä vaiheessa tutustuttiin

WebRTC-ohjelmistoprojektiin ja sen teknologisiin ratkaisuihin, jotta voitaisiin ymmärtää

paremmin, mitkä kaikki seikat voivat vaikuttaa Sanoste Oy:n palveluiden laatuun heiken-

tävästi. Työn toisessa vaiheessa tutkittiin WebRTC:n signaalinkäsittelykomponenttien

toimintaa tarkemmin sekä testattiin niiden toimivuutta erilaisten äänisignaalien kanssa.

Näin pystyttiin selvittämään miten ne vaikuttavat äänisignaalin laatuun etenkin musiikkia

sisältävien palveluiden tapauksessa. Työn viimeisessä vaiheessa tutkittiin mahdollisuuk-

sia helppokäyttöisen Sanoste Oy:n ohjaajan kuvapuhelusovellukseen integroitavan

mikserisovelluksen toteuttamiseen kehittämällä mikserisovelluksen prototyyppi Web Au-

dio API:n avulla.

3

2 WebRTC

Työ aloitettiin tutkimalla WebRTC:n arkkitehtuurin, rajapintojen ja protokollien määritte-

lyjä. Tämän avulla pyrittiin selvittämään, mitkä WebRTC:n toiminnallisuudet voivat vai-

kuttaa WebRTC-sovelluksen äänen- ja kuvanlaatuun ja mitkä näistä ovat sovelluskehit-

täjän hallittavissa. Tässä luvussa esitellään ensin WebRTC yleisellä tasolla. Tämän jäl-

keen käydään läpi WebRTC:n arkkitehtuurin eri kerrokset sekä rajapinta- ja protokolla-

määrittelyiden tärkeimmät osat. Luvun lopussa tehdään yhteenveto äänen- ja kuvanlaa-

dun kannalta merkittävimmistä havainnoista.

2.1 WebRTC yleisesti

WebRTC on ohjelmistoprojekti, jonka pyrkimyksenä on mahdollistaa reaaliaikainen me-

dian striimaaminen eri alustojen välillä ilman erikseen asennettavia liitännäisohjelmia.

Alun perin WebRTC-projekti on keskittynyt ratkaisemaan verkkoselainten RTC-toimin-

nallisuuteen ja eri selainten yhteistoimivuuteen liittyviä ongelmia, joita ovat

• käyttäjän laitteiston multimediaresurssien hallinta selaimessa

• vertaisverkkoyhteyden luominen yksityisten verkkojen välillä

• osapuolten välinen signalointi istunnon aloittamisesta

• pakettihävikin ja tiedonsiirtoviiveiden hallinta

• tiedonsiirto- ja tiedonpakkausmenetelmien tuki eri alustoilla

• reaaliaikaisuudesta ja kaksisuuntaisuudesta aiheutuvien ongelmien, kuten äänen kierron ja taustamelun hallinta.

Nykyään WebRTC-projekti käsittää myös erilaiset mobiilialustat ja IoT-laitteet.

WebRTC:n lähdekoodin hallinnoinnista vastaa Google, ja se on julkaistu avoimen lähde-

koodin lisenssillä.

Käytännössä WebRTC on kokoelma tiedonsiirtoprotokollia, dataformaatteja ja ohjel-

mointirajapintoja (API) määrittäviä standardeja, joiden avulla varmistetaan palveluiden

toimivuus alustasta riippumatta. WebRTC:n standardoinnista vastaa kaksi eri tahoa. Oh-

jelmointirajapintojen standardoinnista vastaa W3C:n (World Wide Web Consortium)

WebRTC-työryhmä. Protokollien ja dataformaattien standardoinnista vastaa IETF:n (In-

ternet Engineering Task Force) RTCWEB-työryhmä.

4

Protokollatason standardoinnin tavoitteena on määrittää vaadittavat tiedonsiirtoprotokol-

lat ja dataformaatit, joiden avulla mahdollistetaan vertaisverkkoyhteyden yli tapahtuva

reaaliaikainen median striimaaminen sekä varmistetaan eri alustoille kehitettyjen sovel-

lusten yhteentoimivuus. Ohjelmointirajapintatason standardoinnin tavoitteena on puoles-

taan varmistaa verkkoselaimelle kehitettyjen sovellusten toimivuus kaikissa niissä se-

laimissa, joiden valmistajat ovat toteuttaneet protokollatason standardoinnissa esitetyt

vaatimukset. [1.]

Kuva 1. WebRTC:n arkkitehtuurin kuvaus. [2.]

WebRTC:n arkkitehtuuri koostuu useasta kerroksesta, joista osa on toteutettu valmiiksi

ja osa on jätetty selainvalmistajan toteutettavaksi (ks. kuva 1). WebRTC:n arkkitehtuurin

ylin taso käsittää JavaScript API:n ja sen toteuttamiseen tarkoitetun C++ API:n. Arkki-

tehtuurin seuraava kerros käsittää istunnon hallinnan ja osapuolten välisen signaloinnin

määrittelyt. Seuraava kerros sisältää varsinaisen RTC-toiminnallisuuden toteutukset, eli

vertaisverkkoyhteyksien muodostuksen, osapuolten välisen tiedonsiirron hallinnan ja

mediastriimien käsittelyyn vaadittavat komponentit. Arkkitehtuurin alin kerros toimii raja-

pintana WebRTC-sovelluksen ja käyttäjän laitteiston välillä.

5

2.2 Ohjelmointirajapinnat

WebRTC:n arkkitehtuuri käsittää kaksi erillistä ohjelmointirajapintaa, joiden tehtävänä on

mahdollistaa istuntojen ja yhteyksien sekä käyttäjän laitteiston multimediaresurssien hal-

linta JavaScript-ohjelmointirajapintojen kautta.

WebRTC C++ API on selainvalmistajille suunnattu ohjelmointirajapinta, joka tarjoaa se-

lainvalmistajalle työkalut Web API -standardin mukaisten JavaScript-ohjelmointirajapin-

tojen toteuttamiseen. JavaScript-ohjelmointirajapintojen tehtävänä puolestaan on tarjota

selainsovelluskehittäjille tarvittavat työkalut RTC-toiminnallisuuden integroimiseksi se-

lainsovellukseen varmistaen samalla sovelluksen toimivuus kaikissa niissä selaimissa,

jotka toteuttavat Web API -standardin määrittämät JavaScript-ohjelmointirajapinnat.

Web API -standardi sisältää JavaScript-ohjelmointirajapintojen määrittelyt selainten vä-

liseen kommunikointiin (WebRTC 1.0: Real-time Communication Between Browsers) ja

median sieppaamiseen ja striimaamiseen (Media Capture and Streams). WebRTC 1.0:

Real-time Communication Between Browsers -määrittely kattaa kaikki istuntojen luontiin,

yhteyksien muodostamiseen ja tiedonsiirtoon liittyvät ohjelmointirajapinnat [3]. Media

Capture and Streams -määrittely puolestaan määrittää ohjelmointirajapinnat, joiden

avulla mahdollistetaan käyttäjän multimedialaitteiston sekä kuva- ja äänistriimien hallinta

verkkoselaimessa [4].

JavaScript-ohjelmointirajapintojen toteuttamisen lisäksi WebRTC C++ API:a voidaan

hyödyntää myös natiivisovellusten kehittämisessä, vaikkakin WebRTC-projekti tarjoaa

nykyään valmiit ohjelmistokehitystyökalut (SDK) sekä Android- että iOS-käyttöjärjestel-

mille.

2.3 Istunnonhallinta

WebRTC:n istunnonhallintakerroksen tehtävänä on viestiä istunnon aloituksesta osallis-

tujien kesken ja samalla varmistaa, että toinen osapuoli on tavoitettavissa ja kykenevä

käsittelemään istunnossa käytettäviä mediaformaatteja. Tämä on toteutettu ns. Tarjous-

vastaus -menetelmän avulla. Istunnon luonti alkaa siten, että istunnon aloittava osapuoli

lähettää toiselle osapuolelle ”tarjouksen” signalointipalvelimen välityksellä. Jos toinen

6

osapuoli vastaa tarjoukseen signalointipalvelimen välityksellä, voidaan varsinaisen yh-

teyden muodostus aloittaa.

Istunnon aloituksen yhteydessä toiselle osapuolelle välitetään tietoja istunnon yksityis-

kohdista, joihin lukeutuvat tiedot istunnossa käytettävistä mediaformaateista, pakkaus-

menetelmistä ja tiedonsiirtoprotokollista. Istunnon yksityiskohtien kuvaamiseen käytettä-

vää protokollaa kutsutaan SDP:ksi (Session Description Protocol). SDP:tä käytetään

myös ilmoittamaan vastaanottajalle istunnon tietojen (esim. lähettävän osapuolen portin)

muuttumisesta käynnissä olevan istunnon aikana. [5.]

Istunnonhallintakerroksen toteutus on jätetty sovelluskehittäjän vastuulle, jotta signaloin-

tikanavan toteutus ja signalointiprotokolla voidaan sovittaa sovelluksen tarpeisiin. Tämän

avulla myös mahdollistetaan sovelluksen käyttäminen olemassa olevien kommunikointi-

järjestelmien kanssa, kuten puhelinverkko- tai VoIP (Voice Over IP) -järjestelmien

kanssa. WebRTC-standardi ei myöskään ota kantaa siihen, miten signalointikanava löy-

tää tai autentikoi käyttäjät, vaan käyttäjien hallinta on täysin signalointikanavan toteutta-

jan vastuulla.

2.4 Tiedonsiirto

WebRTC:n arkkitehtuurin tiedonsiirtokehys käsittää vertaisverkkoyhteyden muodostami-

sessa, hallinnassa ja tiedonsiirrossa käytettävät protokollat, palvelut ja tiedon salausme-

netelmät. Nämä on määritelty osana protokollatason standardointia.

WebRTC tarjoaa kaksi erillistä tiedonsiirtokanavaa. RTCPeerConnection-kanava on tar-

koitettu reaaliaikaiseen median striimaamiseen. RTCDataChannel on tarkoitettu ennalta

määrittelemättömän tiedon reaaliaikaiseen siirtoon osallistujien välillä.

RTCDataChannelin kautta voidaan siirtää esimerkiksi tekstidataa, anturidataa tai tiedos-

toja. Toisin kuin RTCPeerConnection-kanavan, sen tiedonsiirtoprotokollan asetukset

ovat sovelluskehittäjän muokattavissa.

7

2.4.1 Tiedonsiirtoprotokolla

Koska reaaliaikaisessa kommunikaatiosovelluksessa tiedonsiirron ajoitus ja viiveiden

minimoiminen ovat tärkeämpiä kuin siirretyn tiedon eheyden varmistaminen, on

WebRTC:n ensisijaiseksi tiedonsiirtoprotokollaksi valittu UDP (User Datagram Protocol).

UPD soveltuu hyvin kuvan ja äänen striimaamiseen, sillä toisin kuin TCP:ssä (Transmis-

sion Control Protocol) UDP:ssä ei jäädä odottamaan kuittausta vastaanottavalta osapuo-

lelta lähetetyn paketin saapumisesta, eikä epäonnistuneen paketin lähetystä yritetä uu-

delleen. Toisin sanoen UDP:ssä pakettien perillemenoa tai järjestystä ei varmisteta

päästä päähän.

Koska pakettien perillemenoa ja järjestystä ei varmisteta, voi osa paketeista hukkua mat-

kalla tai saapua väärässä järjestyksessä. Tällä on kuitenkin yleensä hyvin vähän vaiku-

tusta WebRTC-sovelluksen kuvan- tai äänenlaatuun, sillä WebRTC:ssä käytetyt pak-

kausmenetelmät kykenevät täyttämään pieniä aukkoja tiedonsiirrossa melko huomaa-

mattomasti.

2.4.2 Tietoliikenteen salaaminen ja varmentaminen

Verkon yli tapahtuvan tietoliikenteen salaaminen on tärkeä osa WebRTC:n protokollata-

son standardointia. WebRTC:ssä käytetään DTLS-protokollaa (Datagram Transport

Layer Security) tietoliikenteen salaamiseen.

DTLS-protokolla perustuu TLS-protokollaan (Transport Layer Security), mutta toisin kuin

TLS-protokolla, joka edellyttää TCP-tiedonsiirtoprotokollan käyttöä, DTLS-protokolla on

suunniteltu toimimaan myös sellaisten tiedonsiirtoprotokollien kanssa, jotka eivät takaa

pakettien järjestystä tai perillemenoa. [6.]

Yksi tärkeä eroavaisuus TLS- ja DTLS-protokollien välillä on, että DTLS-protokollan kä-

denpuristus (engl. handshake) perustuu asiakaspään itse allekirjoittamiin sertifikaattei-

hin, jolloin se ei tarjoa mitään takeita osapuolten oikeasta identiteetistä. WebRTC-sovel-

luksen on siis toteutettava osapuolten identiteetin varmistaminen muilla keinoin, kuten

sovelluksen oman tai kolmannen osapuolen identiteettipalvelun avulla.

8

Koska UPD-tiedonsiirtoprotokollan tiedonsiirtoformaatti RTP (Real-Time Transport Pro-

tocol) ei tarjoa minkäänlaista keinoa siirrettävien pakettien salaamiseksi, käytetään

WebRTC:n RTCPeerConnection-kanavan tiedonsiirtoformaattina SRTP:tä (Secure

Real-Time Transport Protocol). Käytännössä SRTP laajentaa RTP:tä tarjoamalla meka-

nismin RTP-pakettien salaamiseen tiedonsiirtokerroksessa ja salauksen purkamiseen

sovelluskerroksessa DTLS-kädenpuristuksen yhteydessä vaihdettujen salausavaimien

avulla. Tämä mahdollistaa vastaanotetun tiedon varmentamisen samaan tapaan kuin

TLS-protokollaa käytettäessä.

Koska SRTP-tiedonsiirtoformaatti ei tarjoa mekanismia pakettien järjestyksen tai perille-

menon hallitsemiseksi, soveltuu se vain sellaisen tiedon siirtoon, jonka eheydellä ei ole

suurta merkitystä. Tämän takia RTCDataChannelin tiedonsiirtoformaatiksi on valittu

SCTP (Stream Control Transmission Protocol). Se tarjoaa samanlaisen salausmekanis-

min kuin SRTP, mutta se mahdollistaa tarvittaessa TCP:n tasoisen pakettien toimitus-

varmuuden. Toisin kuin TCP:ssä SCTP:ssä toimitusvarmuus on sovelluskehittäjän hal-

littavissa.

2.4.3 Tiedonsiirron hallinta

Koska reaaliaikaisen kommunikaatiosovelluksen toiminnan kannalta tiedonsiirron ajoitus

ja viiveiden minimointi on ensisijaisen tärkeää, tulee näitä kyetä hallitsemaan jollain ta-

paa myös normaalissa verkkoympäristössä, jossa verkkoyhteyksien laatu vaihtelee jat-

kuvasti.

Jotta tiedonsiirron ajoitusta, viivettä ja pakettihäviötä voidaan hallita, tulee lähettävän

pään olla tietoinen vastaanottavan pään kyvystä vastaanottaa ja prosessoida lähetettyä

dataa. Tämän toteuttamiseksi WebRTC:ssä käytetään SRTCP:tä (Secure Real-time

Transport Control Protocol), joka on salausmekanismin sisältävä toteutus RTCP:stä

(Real-time Transport Control Protocol). Yhdessä SRTP-tiedonsiirtoformaatin kanssa

käytettäessä, SRTCP tarjoaa vastaanottajalle keinon havainnoida pakettihäviötä ja tie-

donsiirtoviivettä, sekä ilmoittaa tästä lähettäjälle. SRTP-paketit sisältävät vastaanotta-

jalle oleellista metadataa, kuten paketin järjestysnumeron ja aikaleiman. Näiden tietojen

avulla vastaanottaja voi havaita, jos osa paketeista ei saavu perille tai jos viive pakettien

saapumisen välillä kasvaa liian suureksi.

9

SRTCP:n tehtävänä on pitää kirjaa vastaanotettujen SRTP-pakettien statistiikasta, kuten

puuttuvien pakettien lukumäärästä ja viimeksi saapuneen paketin järjestysnumeron. Tie-

donsiirron osapuolet vaihtavat näitä tietoja ajoittain, joka mahdollistaa lähettävän osa-

puolen säätää lähetettävän striimin laatua vastaanottajan vastaanottokyvyn mukaiseksi.

WebRTC:ssä tätä ominaisuutta kutsutaan ruuhkanhallinnaksi (engl. congestion control).

Käytännössä ruuhkanhallintaominaisuus tarkoittaa sitä, että WebRTC-sovelluksella ei

oikeasti ole mahdollisuutta kontrolloida kuvan- ja äänenlaatua, vaan ne muuttuvat dy-

naamisesti osapuolten välisten tiedonsiirtonopeuksien mukaan.

2.4.4 Vertaisverkkoyhteyden muodostus ja hallinta

Vertaisverkkoyhteyden muodostaminen tilanteessa, jossa osapuolet ovat erillisissä yk-

sityisissä verkoissa, on haasteellista, sillä ensin kummankin osapuolen on selvitettävä

oma julkinen IP-osoite ja porttinumero sekä välitettävä nämä tiedot toiselle osapuolelle.

Haasteelliseksi tämän tekee se, että yksityiseen verkkoon kytketty laite voi olla yhden tai

useamman NAT-solmun (Network Address Translation) ja palomuurin takana.

NAT on internetissä käytettävä menetelmä, joka reitittää yksityisen verkon koko IP-osoi-

teavaruuden yhden julkisen IP-osoitteen kautta. Käytännössä tämä tarkoittaa sitä, että

yksityiseen verkkoon kytketty laite tietää paikallisen IP-osoitteensa, mutta ei NAT:n mää-

rittämää julkista osoitettaan.

Vertaisverkkoyhteyden muodostamisessa ja hallinnassa keskeisiä komponentteja ovat

• ICE-agentti (Interactive Connection Establishment)

• STUN-palvelin (Session Traversal Utilities for NAT)

• TURN-palvelin (Traversal Using Relays around NAT).

Yhteyden muodostus tapahtuu siten, että ensin ICE-agentti selvittää laitteen paikallisen

IP-osoitteen. Tämän jälkeen ICE-agentti selvittää laitteen julkisen IP-osoitteen lähettä-

mällä kyselyn ulkoiselle STUN-palvelimelle, joka palauttaa vastauksena IP-osoitteen,

josta kysely saapui. Jos tämä epäonnistuu esimerkiksi palomuuriasetusten takia, ICE-

agentti luopuu vertaisverkkoyhteydestä ja reitittää osapuolten välisen liikenteen erillisen

TURN-palvelimen kautta.

10

2.5 VideoEngine ja VoiceEngine

VideoEngine ja VoiceEngine toimivat rajapintoina käyttäjän laitteiston kuva- ja ääniläh-

teiden ja selaimen välillä mahdollistaen niiden kutsumisen JavaScript-ohjelmointirajapin-

nan avulla. WebRTC-projekti vastaa molempien rajapintojen toteutuksesta, jolloin aino-

astaan JavaScript-ohjelmointirajapinnan toteutus jää selainvalmistajan vastuulle.

Kuvan ja äänen reaaliaikaiseen striimamiseen liittyy useita haasteita. Näitä ovat muun

muassa viive, pakettihävikki, synkronointivirheet, taustamelu, äänentasojen hallinta ja

äänen kierto osallistujien välillä. VideoEngine ja VoiceEngine sisältävät tarvittavat kom-

ponentit näiden hallitsemiseksi, joita ovat

• Jitter Buffer

• AGC (Automatic Gain Control)

• AEC (Acoustic Echo Cancellation)

• NR (Noise Reduction).

Reaaliaikaisen median striimaamisen ongelmana on, että lähetettyjen pakettien saapu-

misjärjestystä ja pakettien saapumisen välistä viivettä ei voida taata vastaanottajalle. Jit-

ter Buffer -mekanismin tehtävänä on puskuroida saapuneita RTP-paketteja ja järjestää

ne niiden järjestysnumeroiden mukaan ennen niiden sisältämien kuva- ja äänikehysten

saattamista edelleen käsiteltäväksi. Tämän avulla voidaan huomattavasti vähentää tie-

donsiirrosta johtuvia kuvan- ja äänenlaadun ongelmia sekä mahdollistaa kuva- ja äänist-

riimien synkronoinnin vastaanottajan päässä RTP-pakettien sisältämien aikaleimojen

perusteella.

WebRTC-standardi määrittää, että siirrettävän äänen tason tulisi pysyä tasolla -19 dBm0

(+/- 6 dB), joka vastaa suunnilleen arvoa 2600 RMS 16-bittisellä lineaarisella PCM-for-

maatilla näytteistetyllä äänisignaalilla [7]. Tämän tarkoituksena on varmistaa yhteentoi-

mivuus eri järjestelmissä, kuten puhelinverkoissa käytettävien äänenpakkausformaattien

kanssa. Koska ei ole kohtuullista olettaa, että käyttäjät voisivat säädellä mikrofoninsa

äänenvoimakkuutta suositellulle tasolle, etenkään kommunikaatiotilanteen aikana, tar-

joaa VoiceEngine AGC-mekanismin äänentason automaattiseen hallintaan.

Reaaliaikaisessa kommunikaatiosovelluksessa ääni voi päästä kiertämään osallistujien

välillä silloin, kun ääni pääsee kulkeutumaan laitteiston kaiuttimesta takaisin laitteiston

11

mikrofoniin. Koska äänen kierto voi helposti tehdä kommunikoinnista mahdotonta, on

AEC:n tehtävänä ehkäistä tätä äänen kiertoa.

NR puolestaan pyrkii poistamaan ympäristöstä ja laitteistosta johtuvaa taustamelua ää-

nisignaalista. Tämän avulla pyritään siihen, että äänisignaali olisi mahdollisimman häi-

riötöntä ja että osallistujat voivat saada toistensa puheesta selvää myös meluisassa ym-

päristössä.

Vaikka edellä mainitut signaalinkäsittelykomponentit parantavat normaalin kommunikaa-

tiotilanteen äänenlaatua, WebRTC-standardi suosittaa, että kaikkien signaalinkäsittely-

komponenttien tulisi olla kytkettävissä pois päältä sellaisten sovellusten osalta, joissa ne

eivät välttämättä toimi toivotulla tavalla, kuten musiikki- ja näytönjakosovelluksissa.

WebRTC-sovellusten yhteentoimivuuden varmistamiseksi pakolliset kuvan ja äänen

pakkausmenetelmät ovat määritelty osana protokollatason standardointia. Pakollisia

pakkausmenetelmiä kuvalle ovat

• VP8

• H.264

ja äänelle

• Opus

• G.711 (A-law)

• G.711 (µ-law).

Pakollisten pakkausmenetelmien lisäksi selainvalmistaja voi vapaasti tukea myös muita

pakkausmenetelmiä, mutta tällöin sovellusten yhteentoimivuutta eri selainten välillä ei

pystytä takaamaan.

2.6 Ongelmien jäljittämisen työkalut

WebRTC-istuntoihin liittyy useita potentiaalisia ongelmakohtia, joiden takia tiedonsiir-

rossa ja ääni- ja kuvastriimeissä voi esiintyä ongelmia tai istunnon luonti voi epäonnistua

kokonaan. WebRTC:n Statistics API tarjoaa sovelluskehittäjälle rajapinnan WebRTC-is-

tunnon yksityiskohtien reaaliaikaiseen tarkasteluun. Lähtökohtaisesti Statistics API:n

12

getStats()-metodi palauttaa kaiken istuntoon liittyvän statistiikan, mutta sille voidaan kut-

sun yhteydessä antaa parametrina MediaStreamTrack-objekti, jolloin metodi palauttaa

kyseisen mediastriimin statistiikan.

WebRTC-standardi määrittää tärkeimmät vertaisverkkoyhteyden, tiedonsiirron ja ääni-

ja kuvastriimien tarkkailemiseen vaadittavat statistiikkatiedot, joita ovat mm.

• lähtevien ja saapuvien RTP-pakettien tiedot

• ICE-kandidaattien tiedot (verkko-osoitteet, portit, verkkoyhteyden tyyppi)

• kuva- ja äänistriimien laadun rajoittamisen syy

• lähtevien ja saapuvien ääni- ja kuvastriimien tiedot (puskuroinnin viiveet, akustisen kaiunpoiston määrä, aikaleimat)

• äänen ja kuvan käsittelijöiden tiedot (äänentaso, puheaktiivisuus, kuvataa-juus, resoluutio)

• äänen- ja kuvanpakkausmenetelmien tiedot (pakkausalgoritmi, kellotaa-juus, kanavien lukumäärä).

Useimmat selainvalmistajat tarjoavat käyttöliittymän Statistics API:n tärkeimpien tietojen

tarkkailuun graafisessa muodossa. Esimerkiksi Google Chrome -selaimessa tämä löytyy

osoitteesta chrome://webrtc-internals. WebRTC-istunnon tietojen tarkkailun lisäksi aina-

kin Google Chrome -selaimen käyttöliittymä tarjoaa myös mahdollisuuden lähtevien ja

saapuvien äänistriimien tallentamiseen (Create Dump -valikko), jonka avulla voidaan

pyrkiä selvittämään signaalinkäsittelykomponenttien toimintaan liittyviä ongelmia.

2.7 Tehdyt havainnot

Selvitystyön avulla saatiin muodostettua hyvä kuva WebRTC:n toiminnasta ja sisäisistä

rakenteista sekä äänen- ja kuvanlaatuun vaikuttavista tekijöistä. Yksi merkittävimmistä

havainnoista, joka kävi ilmi WebRTC:n tiedonsiirtokerrosta tutkimalla oli WebRTC:n

ruuhkanhallintaominaisuuden toiminta, joka käytännössä tarkoittaa, että vertaisverkko-

yhteyttä käytettäessä, ei lähetettävän striimin laatua pystytä takaamaan ja että yhden

osallistujan heikko verkkoyhteys tai laitteiston kuormittuminen voi johtaa striimin laadun

heikkenemiseen kaikille osallistujille.

13

Tämän työn kannalta selvitystyössä tehdyistä havainnoista merkittävimpänä voidaan pi-

tää sitä, että jopa WebRTC:n protokollamäärittelyssä todetaan, että signaalinkäsittely-

komponenttien tulisi olla kytkettävissä pois päältä musiikkia sisältävien sovellusten

osalta. Tämä on tärkeä tieto, sillä se tarkoittaa, että signaalinkäsittelykomponenttien

käyttäminen WebRTC-sovelluksessa on ja tulee todennäköisesti myös tulevaisuudessa

olemaan sovelluskehittäjän hallittavissa. Myös automaattisen äänentason hallinnan

määrittely oli työn kannalta oleellinen, sillä tietoa määritellyistä äänentasoista voitiin hyö-

dyntää mikserisovelluksen suunnittelussa.

14

3 Sanoste Oy:n kuvapuhelujärjestelmä

Sanoste Oy:n kuvapuhelujärjestelmä käsittää sekä palveluntuottajan että osallistujan

WebRTC-teknologiaan perustuvat kuvapuhelusovellukset. Palveluntuottajan sovellus on

saatavilla ainoastaan selainversiona. Osallistujan sovellus on saatavilla selainversion li-

säksi myös natiivisovelluksina iOS- ja Android-käyttöjärjestelmille.

Asiakaspään sovellusten lisäksi Sanoste Oy:n kuvapuhelujärjestelmä käsittää myös

taustajärjestelmän, joka koostuu useasta eri mikropalveluarkkitehtuuria toteuttavasta

komponentista. Taustajärjestelmän tehtävänä on ylläpitää tietoja aktiivisista tilauksista ja

laitteista, luoda istuntoja sekä ilmoittaa istuntojen alkamisesta palveluun osallistuville lait-

teille.

Sanoste Oy:n välittämät palvelut toteutetaan aina yhden suhde moneen -yhteydellä, eli

palvelussa on aina yksi ohjaaja ja yksi tai useampi osallistuja. Ohjaaja siis näkee ja kuu-

lee kaikki osallistujat ja osallistujat näkevät sekä kuulevat ohjaajan, mutta eivät toisiaan.

Tämän avulla mahdollistetaan usean osallistujan yhtäaikainen ohjaaminen.

3.1 Kuvapuhelujärjestelmän WebRTC-toiminnallisuus

Sanoste Oy:n kuvapuhelusovellukset on rakennettu OpenTok-palvelualustalle. OpenTok

on TokBox-nimisen palveluntarjoajan kehittämä WebRTC-teknologiaan perustuva pal-

velualusta. OpenTok-palvelualusta tarjoaa REST-rajapinnan istuntojen luontiin sekä työ-

kalut palvelin- ja asiakaspään ohjelmistojen kehittämiseen (Server SDK ja Client SDK).

OpenTok-palvelualustan etuna on, että se kätkee suurimman osan istuntojen ja verkko-

yhteyksien luontiin liittyvästä monimutkaisuudesta sekä huolehtii palveluiden skaalautu-

vuudesta ja saatavuudesta.

15

Kuva 2. OpenTok-palvelualustan istunnonluonnin kuvaus. [8.]

Sanoste Oy:n WebRTC-toiminnallisuuden toteutuksessa taustajärjestelmä huolehtii is-

tuntojen luonnista ja istuntotunnisteiden välittämisestä asiakaspäänsovelluksille. Varsi-

nainen yhteyksien muodostus tapahtuu pilvipalvelussa taustajärjestelmän välittämien is-

tuntotunnisteiden avulla (ks. kuva 2). Asiakaspään sovelluksissa istuntoihin liittyminen ja

striimien luonti tapahtuu OpenTok Client SDK:n metodeja kutsumalla [9].

Istuntoihin liittymisen ja striimien luonnin lisäksi OpenTok Client SDK tarjoaa myös help-

pokäyttöiset rajapinnat istuntoon liittyvien tapahtumien kuuntelemiseen asiakaspään so-

velluksessa. Tällaisia tapahtumia ovat muun muassa

• osallistujan liittyminen tai poistuminen istunnosta

• striimin luominen tai tuhoutuminen

• striimin ominaisuuksien muuttuminen.

16

Tapahtumat välitetään asiakaspään sovellukselle erillisen WebSocket-yhteyden avulla.

Näiden tapahtumien avulla asiakaspään sovellus voi esimerkiksi poistaa osallistujan vi-

deoelementin, kun osallistuja poistuu istunnosta tai kun osallistujan striimi tuhoutuu. [10;

11.]

Vertaisverkkoyhteyden lisäksi OpenTok tarjoaa myös mahdollisuuden reitittää osallistu-

jien välinen verkkoliikenne OpenTokin mediapalvelimen kautta. Periaatteessa mediapal-

velimen kautta reititetty yhteys toimii samaan tapaan kuin yhteyden reitittäminen TURN-

palvelimen kautta.

Sanoste Oy:n ratkaisussa käytetään nimenomaan reititettyä yhteyttä, sillä tällöin, toisin

kuin vertaisverkkoyhteyttä käytettäessä, palveluntuottajan ei tarvitse lähettää omaa ääni-

ja kuvastriimiään jokaiselle osallistujalle erikseen, koska OpenTokin mediapalvelin huo-

lehtii striimien monistamisesta ja välittämisestä osallistujille.

Vaikka yhteyksien reitittäminen mediapalvelimen kautta tuo kuvapuheluun jonkin verran

lisää viivettä, vähentää se samalla huomattavasti palveluntuottajan verkkoliikennekuor-

maa ja mahdollistaa striimaamisen lähes rajattomalle määrälle osallistujia. Käytännössä

osallistujien määrää kuitenkin rajoittaa palveluntuottajan verkkoyhteyden latausnopeus

ja laitteiston suorituskyky, sillä palveluntuottaja joutuu vastaanottamaan ja käsittelemään

jokaisen osallistujan striimin erikseen, jotta ne voidaan näyttää palveluntuottajan näytöllä

yhtäaikaisesti.

OpenTokin mediapalvelimen ominaisuuksiin kuuluu myös Scalable Video. Scalable Vi-

deo -ominaisuus tarkoittaa sitä, että kuvastriimin julkaisija lähettää yhden kuvastriimin

sijaan useita versioita striimistä eri resoluutioilla ja kuvataajuuksilla, joista OpenTokin

mediapalvelin pyrkii valitsemaan kullekin striimin vastaanottajalle sopivimman version

vastaanottajan sen hetkisen verkkoyhteyden laadun perusteella.

Ilman Scalable Video -ominaisuuden käyttöä yhden vastaanottajan verkkoyhteyden laa-

dun heikentyminen johtaisi siihen, että kuvastriimin laatu heikkenisi kaikille vastaanotta-

jille WebRTC:n ruuhkanhallintaominaisuuden seurauksena. Scalable Video -ominaisuu-

den käyttö edellyttää VP8-kuvanpakkausmenetelmän käyttöä, joten H.264-kuvanpak-

kausmenetelmää ei voi tällöin käyttää, vaikka kaikki istunnossa mukana olevat laitteet

tukisivatkin sen laitteistokiihdytteistä pakkaamista ja purkamista [12].

17

3.2 Kuvapuhelujärjestelmän arkkitehtuuri

Sanoste Oy:n kuvapuhelujärjestelmä sisältää asiakaspäänsovellusten lisäksi näiden

taustajärjestelmät sekä erillisen aktiivisten tilausten hallinnoinnista ja istuntojen luonnista

vastaavan taustajärjestelmän (Channel Backend). Näiden lisäksi kuvapuhelujärjestelmä

käsittää myös asynkroonisen viestityspalvelun (Channel Worker), jonka avulla tieto is-

tuntojen alkamisesta välitetään osallistujien sovelluksien taustajärjestelmälle (Mobile

Backend).

Kuva 3. Sanoste Oy:n kuvapuheluyhteyksien topologia.

Sanoste Oy:n kuvapuhelujärjestelmässä istuntojen luonti ja striimien hallinta on toteu-

tettu siten, että jokaiselle osallistujalle ja ohjaajalle luodaan oma istuntonsa. Palvelun-

tuottajan sovellukselle välitetään tieto ohjaajan ja jokaisen osallistujan istunnoista. Osal-

listujan sovellukselle puolestaan välitetään tiedot ainoastaan ohjaajan ja osallistujan

omasta istunnosta. Tällöin palveluntuottajan sovellus pystyy vastaanottamaan jokaisen

osallistujan lähettämän striimin erillistä kanavaa pitkin ja julkaisemaan ohjaajan strii-

minsä kaikille osallistujille yhtä kanavaa pitkin (ks. kuva 3). Osallistujan sovellus puoles-

taan voi julkaista oman striiminsä palveluntuottajalle ilman, että muut osallistujat voivat

päästä siihen käsiksi.

OpenTok

Media Server

Participant 1

Instructor

Participant 2 Participant N

18

3.3 Osallistujan sovellus

Osallistujan sovelluksen tärkein toiminnallisuus on palveluiden vastaanottaminen. Sovel-

luksen muut toiminnot lähinnä tukevat tätä tarkoitusta. Osallistujan sovellukset ovat

suunniteltu siten, että palveluiden vastaanottaminen olisi mahdollisimman helppoa.

Tämä on toteutettu siten, että osallistujan laite alkaa soimaan, kun ohjaaja aloittaa pal-

velun ja palveluun osallistuminen tapahtuu yhtä painiketta painamalla. Laitteen soimisen

ja palveluun osallistumisen edellytyksenä on tietysti, että käyttäjä on kirjautunut sovel-

lukseen ja että laite on verkossa.

Istunnon alkamisen signaloinnista vastaa sovellusten taustajärjestelmä. Tämän mahdol-

listamiseksi laitteen tulee rekisteröityä taustajärjestelmään sisäänkirjautumisen yhtey-

dessä ja sovelluksen tulee kuunnella taustajärjestelmän lähettämiä ilmoituksia. Ilmoitus-

ten välittämiseen taustajärjestelmä käyttää Google:n FCM-palvelua (Firebase Cloud

Messaging) Android- ja selainsovelluksille ja Applen APNS:ää (Apple Push Notification

Service) iOS-sovelluksille. Tällöin sovellukset kykenevät reagoimaan soittoihin, vaikka

sovellus olisi laitettu taka-alalle.

Istuntoihin liittyminen tapahtuu taustajärjestelmän välittämien istuntotunnisteiden avulla,

jotka sovellus hakee taustajärjestelmästä saadessaan ilmoituksen istunnon alkamisesta.

Yhteyksien muodostamisessa ja striimien luomisessa asiakaspäänsovellukset hyödyn-

tävät OpenTok Client SDK:ta.

3.4 Palveluntuottajan sovellus

Palveluntuottajan sovellus sisältää toiminnallisuudet sekä palveluiden hallinnointiin että

niiden toteuttamiseen. Toteutustavaltaan palveluntuottajan sovellus on hyvin perinteinen

palvelinpäässä renderöitävä verkkoselainsovellus. Palveluntuottajan sovellus on toteu-

tettu Flask-ohjelmointikehyksen avulla.

Palveluntuottajan sovelluksen kuvapuhelutoiminnallisuutta käsitellään kahdessa eri nä-

kymässä. Ns. esikatselunäkymässä ohjaaja voi valmistautua istunnon aloittamiseen.

Esikatselunäkymässä ohjaaja näkee oman kuvansa, jonka avulla ohjaaja voi tarkistaa

kameran toimivuuden ja asettautumisensa kuvassa. Esikatselunäkymässä näytetään

19

myös äänentasomittari, jonka avulla ohjaaja voi varmistaa mikrofonin toimivuuden. Oh-

jaajan mikrofonisignaalia ei toisteta esikatselunäkymässä ohjaajalle, sillä se aiheuttaisi

äänen kiertoa, mikäli ohjaajalla ei ole kuulokkeita käytössään. Tämän huonona puolena

on, että ohjaaja ei voi tarkistaa mikrofoninsa äänenlaatua esikatselunäkymässä.

Varsinaiseen kuvapuhelunäkymään siirrytään, kun ohjaaja klikkaa istunnon aloituspaini-

ketta esikatselunäkymässä. Kun ohjaaja siirtyy kuvapuhelunäkymään, palveluntuottajan

sovelluksen taustajärjestelmä signaloi aktiivisten tilausten hallinnoinnista ja istuntotun-

nisteiden luonnista vastaavalle taustajärjestelmälle istunnon alkamisesta, joka palauttaa

istuntotunnisteet, joiden avulla palveluntuottajan sovellus voi julkaista ohjaajan striimin

ja vastaanottaa kaikkien osallistujien julkaisemat striimit. Samalla istuntotunnisteiden

luonnista vastaava taustajärjestelmä lähettää ilmoituksen istunnon alkamisesta kaikille

osallistujille.

20

4 Signaalinkäsittely WebRTC-sovelluksissa

Työn toisessa vaiheessa tutustuttiin tarkemmin WebRTC:n signaalinkäsittely kompo-

nenttien toimintaperiaatteisiin tutkimalla signaalinkäsittelykomponenttien erilaisia toteu-

tustapoja sekä tarkastelemalla WebRTC:n lähdekoodia.

Tässä luvussa kerrotaan ensin WebRTC:n signaalinkäsittelystä yleisellä tasolla, jonka

jälkeen käsitellään WebRTC:n yleisimmin käytettyjen kuvan ja äänen pakkausmenetel-

mien eroavaisuuksia. Tämän jälkeen tarkastellaan signaalinkäsittelykomponenttien toi-

mintaperiaatteita yksityiskohtaisemmin ja lopuksi tutustutaan WebRTC:n rajapintojen

avulla saatavien äänistriimien käsittelyyn soveltuvaan Web Audio API:hin.

4.1 WebRTC:n signaalinkäsittelystä yleisesti

WebRTC-standardi määrittää tärkeimmät ääni- ja kuvasignaalinkäsittelykomponentit,

joiden tarkoituksena on parantaa kommunikaatiosovelluksen käyttäjäkokemusta ja vä-

hentää verkkoliikenteen kuormaa sekä pakettihävikistä aiheutuvia kuvan- ja äänenlaa-

dun ongelmia. Näihin lukeutuvat video- ja äänisignaalien pakkausmenetelmät sekä eri-

laiset äänisignaalinkäsittelykomponentit, joiden avulla pyritään ehkäisemään kaksisuun-

taisten kommunikaatiosovellusten reaaliaikaisuuteen liittyviä ongelmia, kuten äänen

kiertoa ja meluisesta ympäristöstä johtuvia ongelmia.

WebRTC:n signaalinkäsittelyalgoritmit ovat edelleen aktiivinen kehityksen kohde ja uu-

sia innovaatioita tehdään jatkuvasti. Etenkin koneoppimisen saralla tapahtunut kehitys

on avannut uusia mahdollisuuksia älykkäämpien signaalinkäsittelyalgoritmien kehittämi-

selle. Koneoppimista voidaan hyödyntää mm. puheen ja taustamelun tunnistuksessa,

joka puolestaan mahdollistaa luotettavan puheaktiivisuuden tunnistamisen myös melui-

sissa ympäristöissä.

Vaikka WebRTC:n signaalinkäsittelykomponentit kykenevät estämään äänen kiertoa,

poistamaan taustamelua ja muutenkin parantamaan kuvapuhelun laatua normaaleissa

kuvapuhelusovelluksissa tehokkaasti ja luotettavasti, voi niillä olla päinvastainen vaiku-

tus sekä kuvan- että äänenlaatuun silloin, kun äänisignaali sisältää musiikkia. Tämän

21

takia WebRTC-standardi määrittää, että selainvalmistajien tulisi tarjota selainsovelluske-

hittäjille mahdollisuus kytkeä signaalinkäsittelykomponentteja pois käytöstä sellaisissa

sovelluksissa, jotka eivät hyödy WebRTC:n signaalinkäsittelykomponenttien toiminnasta

[7].

Potentiaalisesti WebRTC-sovelluksessa käytettävillä signaalinkäsittelykomponenteilla ja

kuvan ja äänen pakkausmenetelmillä voi olla myös muita haittavaikutuksia, mikäli ne

kuormittavat laitteiston laskentayksikköä liiaksi. Tällöin saapuvien RTP-pakettien käsit-

tely saattaa hidastua, jolloin WebRTC:n ruuhkanhallintaominaisuus alkaa rajoittaa lähet-

tävän pään äänen- ja kuvanlaatua. Useamman osallistujan kuvapuhelussa tämä voi hei-

kentää kuvapuhelunlaatua kaikkien osallistujien osalta.

4.2 Kuvan ja äänen pakkausmenetelmät

WebRTC-sovelluksissa yleisimmin käytetyt pakkausmenetelmät ovat kuvalle VP8 ja

H.264 ja äänelle Opus. Opus on WebRTC-standardin määrittelemistä äänenpakkaus-

menetelmistä ainoa, joka tukee täyden kaistan näytteenottotaajuutta (48 kHz) stereoää-

nelle. Se siis soveltuu hyvin puheen pakkaamisen lisäksi myös musiikin pakkaamiseen.

Toisaalta, toisin kuin muut musiikin pakkaamiseen käytetyt äänenpakkausmenetelmät,

Opus tukee myös hyvin alhaisia näytteenottotaajuuksia (8 kHz). Koska Opus sallii bitti-

nopeuden muuttamisen dynaamisesti, soveltuu se hyvin käytettäväksi WebRTC:n ruuh-

kanhallintaominaisuuden kanssa [13].

VP8- ja H.264-kuvanpakkausmenetelmien merkittävin ero on siinä, että VP8-pakkaus-

menetelmälle erikoistuneet suoritusyksiköt ovat harvinaisia, eli käytännössä pakkaami-

sen ja purkamisen suorittaminen tapahtuu yleensä tietokoneen CPU:ssa (Central Pro-

cessing Unit). H.264:lle puolestaan useimmissa laitteissa on sen pakkaamiseen ja pur-

kamiseen suunniteltu erillinen suoritusyksikkö, jolloin sen pakkaaminen ja purkaminen

eivät rasita laitteen CPU:ta ja myös virrankulutus on vähäisempää.

Kuvanlaadun kannalta pakkausmenetelmien välillä ei ole suurta eroa [14], mutta mikäli

laitteisto tukee laitteistokiihdytteistä H.264-pakkausmenetelmää, on sen etuna myös se,

että laitteen CPU:n muut tehtävät eivät vaikuta kuvan pakkaamiseen ja purkamiseen.

Tämä puolestaan voi pienentää kuvastriimin käsittelystä aiheutuvaa viivettä. Koska

22

CPU:lle jää myös enemmän resursseja muiden tehtävien suorittamiseen, voi se suoriu-

tua muista tehtävistään, kuten äänistriimin käsittelystä, nopeammin.

H.264-pakkausmenetelmän ongelmana on, että jotkin Android SDK- ja Android Chrome

-versiot eivät tue sitä lainkaan, jolloin sen käyttäminen sovelluksessa, jonka tulee tukea

kaikkia mahdollisia laitteita, ei ole suositeltavaa.

4.3 Puheaktiivisuuden tunnistaminen - VAD

VAD-komponentin (Voice Activity Detection) tehtävänä on analysoida sisään tulevaa ää-

nisignaalia ja erottaa puhetta sisältävät ja sisältämättömät signaalin osat toisistaan.

VAD-komponentilla on keskeinen rooli WebRTC:n äänisignaalinkäsittelyketjussa, sillä

sitä voidaan hyödyntää muiden signaalinkäsittelykomponenttien sisääntulosignaalin esi-

prosessoinnissa tai käyttää eräänlaisena ohjauspiirinä. Tämän takia on hyvin tärkeää,

että VAD-algoritmi kykenee tunnistamaan puheaktiivisuuden riittävän luotettavasti kai-

kissa tilanteissa.

Yksinkertaisimmillaan VAD-algoritmi voidaan toteuttaa tarkkailemalla signaalin koko-

naisamplitudia. Tällaisessa toteutuksessa puheeksi tulkittaisiin kaikki sellaiset signaalin

osat, joiden amplitudi ylittää ennalta määritetyn raja-arvon. Ongelmaksi muodostuu kui-

tenkin se, että puheen amplitudi vaihtelee voimakkaasti myös puhetta sisältävän signaa-

lin osan aikana. Tämä puolestaan saattaa helposti johtaa siihen, että VAD-algoritmi luo-

kittelee yksittäisen sanan tai lauseen aikana esiintyviä alhaisemman amplitudin osioita

puhetta sisältämättömiksi. Tämä puolestaan tekisi ulostulosignaalista hyvin katkonaista,

mikäli VAD-algoritmin luokittelua käytetään ohjaamaan esim. melunpoistoalgoritmin toi-

mintaa.

Edellä mainittua ongelmaa voidaan pyrkiä ehkäisemään eräänlaisen hystereesin avulla,

eli muuttamalla VAD-algoritmin toimintaa siten, että raja-arvon ylittäneen jakson jälkeen

arvoja puskuroidaan hetken ajan ennen uuden päätöksen tekoa. Mikäli yksikin odottelu-

jakson aikana puskuroiduista amplitudiarvoista ylittää ennalta määritetyn raja-arvon, voi-

daan tulkita signaalin olevan edelleen puhetta.

23

Pelkän kokonaisamplitudin analysointiin perustuvan toteutuksen huonona puolena on,

että se toimii heikosti meluisissa ympäristöissä, sillä melun amplitudi voi olla sama tai

korkeampi kuin varsinaisen puheen amplitudi. Toisaalta myös puhujan ja mikrofonin vä-

lisen etäisyyden kasvaminen voi laskea puheen amplitudia niin paljon, että se ei enää

ylitä ennalta määritettyä raja-arvoa.

Meluisasta ympäristöstä aiheutuvat ongelmat voidaan pyrkiä ratkaisemaan jakamalla

signaali useampaan osaan taajuusalueiden mukaan ja tarkkailemalla niiden taajuusalu-

eiden amplitudia, joille puheäänen perustaajuus yleensä sijoittuu, joka on noin 80 Hz -

450 Hz. Tämä ei kuitenkaan yksistään riitä, sillä ensinnäkin myös taustamelun amplitudi

voi olla korkea samaisella taajuusalueella, jolloin algoritmin tulisi huomioida myös sig-

naalin kokonaisspektri, ja toisekseen puheen konsonantit sijoittuvat huomattavasti kor-

keammille taajuuksille. Esimerkiksi ”s”-konsonantin korkein energia sijoittuu yleensä vä-

lille 4 kHz - 5 kHz. Mikäli puheeksi tulkittaisiin vain ne signaalin osat, joilla taajuusalueen

80 Hz - 450 Hz amplitudi on korkea, saattaisi melunpoistoalgoritmi poistaa sanojen

alussa olevia konsonantteja, tehden puheesta vaikeasti ymmärrettävää.

Jotta puheaktiivisuuden tunnistaminen toimisi luotettavasti kaikissa tilanteissa, tulisi sig-

naalista pyrkiä löytämään useampia ominaisuuksia, jotka erottavat puheen muusta sig-

naalin sisällöstä, jolloin päätöksen koostamisessa voidaan huomioida puhesignaalille

ominaisten piirteiden lisäksi myös taustamelulle ominaisia piirteitä. Lopullisen päätöksen

koostamiseen on useita eri vaihtoehtoja, joilla on erilaisia vaatimuksia laskenta-ajan suh-

teen. WebRTC-sovelluksessa pääpaino on yleensä mahdollisimman pienessä laskenta-

ajassa kommunikaatiotilanteen reaaliaikaisuudesta johtuen.

Mikäli VAD-algoritmin päätöksen koostamiseen käytettäviä ominaisuuksia ei ole kovin

montaa, voidaan päätöksen koostamiseen käyttää päätöspuuta, jossa jokaisen analy-

sointivaiheen lopputulos vaikuttaa siihen, mitä haaraa pitkin edetään, kunnes lopullinen

päätös on saavutettu. Tämä malli on yksinkertainen toteuttaa, mutta vaatii raja-arvojen

manuaalista hienosäätämistä ja saattaa helposti antaa väärän lopputuloksen, mikäli yk-

sikin analysointivaihe antaa väärän tuloksen. Mikäli päätöksenteossa käytettäviä ominai-

suuksia on runsaasti, voidaan päätöksen muodostamisessa käyttää esimerkiksi kaikkien

ominaisuuksien painotettua keskiarvoa.

24

Modernit VAD-algoritmit hyödyntävät koneoppimista tavalla tai toisella. Esimerkiksi

WebRTC:n VAD-algoritmin toiminta perustuu esiopetettujen puhe- ja melumallien käyt-

töön. Päätöksen muodostamiseen WebRTC:n VAD-algoritmi käyttää GMM-menetelmää

(Gaussian Mixture Model), jonka on todettu toimivan erittäin hyvin erilaisissa puheentun-

nistussovelluksissa [15; 16]. Myös edistyneempiä malleja, kuten neuroverkkoja voidaan

käyttää puheaktiivisuuden tunnistamiseen, mutta välivaiheiden määrästä riippuen niiden

vaatimat laskentaresurssit ovat helposti liian suuria reaaliaikaisiin sovelluksiin. Koneop-

pimiseen perustuvat VAD-algoritmit eivät ole myöskään automaattisesti perinteisiä VAD-

algoritmeja tarkempia, vaan niiden tarkkuus riippuu pitkälti mallin opettamiseen käytetyn

datan määrästä ja laadusta.

Koska normaalin puhesignaalin kaikki puheaktiivisuuden tunnistamiseen vaadittavat taa-

juudet sijoittuvat korkealaatuisen äänisignaalin Nyquistin taajuutta alhaisemmille taa-

juuksille, voidaan VAD-algoritmin vaatimaa laskenta-aikaa vähentää skaalaamalla sig-

naalin näytteenottotaajuutta alaspäin ennen sen syöttämistä algoritmin käsiteltäväksi.

Äänenlaatuun tällä ei ole vaikutusta, sillä VAD-algoritmi ei muokkaa signaalia, vaan se

ainoastaan analysoi sitä.

4.4 Äänen kierto ja sen ehkäiseminen - AES ja AEC

Kaksisuuntaisissa kommunikaatiosovelluksissa esiintyy aina äänen kiertoa. Äänen kierto

syntyy, kun lähettäjän äänisignaali pääsee kulkeutumaan vastaanottajan kaiuttimesta,

joko suoraan tai heijasteina huoneen seinistä, vastaanottajan mikrofoniin ja sitä kautta

takaisin lähettäjälle.

Äänen kiertoa voidaan ehkäistä useilla eri tavoilla, joista yksinkertaisin on eristää mikro-

foni ja kaiutin toisistaan siten, että kaiuttimesta tulevan äänen paine on erittäin alhainen

mikrofoniin kulkeutuessaan. Toisin sanoen kuulokkeita käyttämällä voidaan äänen kier-

toa ehkäistä erittäin tehokkaasti, mikäli mikrofonin ja kuulokkeiden välinen akustinen

eristys on riittävä.

Toinen tehokas keino äänen kierron ehkäisemiseen on akustisen kaiun vaimennus, eli

AES (Acoustic Echo Suppression). AES on ns. half-duplex-menetelmä, jossa äänisig-

25

naali voi kulkea vain yhteen suuntaan kerrallaan. Vaikka tällä tavalla äänen kiertoa voi-

daan estää tehokkaasti, soveltuu AES huonosti tilanteisiin, joissa tavoitteena on luoda

luonnollinen kommunikointitilanne, sillä molemmat osapuolet eivät voi olla äänessä yhtä

aikaa.

WebRTC-sovelluksissa yleisesti käytössä oleva tapa äänen kierron ehkäisemiseksi on

akustisen kaiun mitätöinti, eli AEC (Acoustic Echo Cancellation). Toisin kuin AES, AEC

on full-duplex-menetelmä, jolloin äänisignaali voi kulkea yhtä aikaa molempiin suuntiin.

AEC-algoritmin toiminta perustuu kaikureitin impulssivasteen, eli kaiuttimen ja huo-

neakustiikan aiheuttaman signaalin vääristymän mallintamiseen. Impulssivasteen perus-

teella voidaan luoda suodatin, joka poistaa kaiuttimesta tulleen äänen mikrofonisignaa-

lista ennen kuin se lähetetään vastaanottajalle.

Vaikka AEC:n toimintaperiaate on melko yksinkertainen, liittyy siihen kuitenkin useita

muuttujia, jotka mutkistavat tilannetta. WebRTC-sovelluksissa vaikeimmin käsiteltävä

muuttuja on järjestelmästä syntyvä viive. Viivettä syntyy niin laitteistossa kuin akusti-

sessa ympäristössäkin. AEC:n toiminnan kannalta viive on ongelmallinen, koska sen

määrä ei ole vakio vaan se saattaa muuttua esimerkiksi silloin, kun mikrofonia liikutellaan

suhteessa kaiuttimiin tai seiniin. Tämä puolestaan tarkoittaa sitä, että aiemmin muodos-

tettu suodatin ei enää vastaa kaikureitin aiheuttamaa signaalin vääristymää, jolloin

kaiunpoiston teho joko heikkenee tai pahimmassa tapauksessa jopa voimistaa kaiutti-

mesta tulleen äänen voimakkuutta.

Useimmissa AEC-algoritmeissa viiveen muuttumisesta aiheutuvat ongelmat on pyritty

ratkaisemaan mukautuvan suodattimen avulla, jossa suodattimen kertoimia pyritään päi-

vittämään jatkuvasti. Kertoimien päivittämistä ei kuitenkaan voida suorittaa silloin, kun

molemmat osapuolet ovat yhtä aikaa äänessä, koska lähettävän osapuolen oma puhe

estää oikeanlaisen impulssivasteen muodostamisen. Toisin sanoen, mukautuvan suo-

dattimen kertoimien muuttuminen täytyy estää yhtäaikaisen puheen aikana. Yhtäaikai-

sen puheen havaitsemiseksi AEC-algoritmeissa käytetään DTD-komponenttia (Double

Talk Detection), joka pohjautuu VAD-algoritmiin [17]. Kun DTD-komponentti tulkitsee,

että molemmat osapuolet ovat äänessä, AEC-algoritmi käyttää viimeksi muistissa ollutta

kaikureitin mallia tai vaihtoehtoisesti toimii half-duplex-tilassa, kunnes taas vain toinen

puhujista on äänessä.

26

Kahdenkeskeisessä kommunikaatiotilanteessa AEC:n avulla voidaan saavuttaa melko

häiriötön ja luonnollinen keskustelutilanne, mutta usean osallistujan tapauksessa tilanne

on jo selvästi hankalampi, sillä yhtäaikaista puhumista esiintyy huomattavasti enemmän.

Myös mallinnettavassa tilassa esiintyvä taustamelu voi häiritä AEC-algoritmin suodatti-

men kertoimien päivittymistä, mikäli taustamelu on luonteeltaan sellaista, että DTD-kom-

ponentti tulkitsee sen puheeksi (esim. tilassa soiva taustamusiikki tai taustalla käytävä

keskustelu).

4.5 Melunvaimennus - NS

Melunvaimennuksen, eli NS-komponentin (Noise Suppression) avulla äänisignaalista

pyritään poistamaan ympäristöstä tai laitteistosta aiheutuvaa taustamelua. Poistettavaa

melua voi olla esimerkiksi järjestelmästä syntyvä kohina, näppäimistöäänet tai toisten

ihmisten aiheuttamat äänet.

Yksinkertaisimmillaan NS-algoritmi voi toimia samaan tapaan kuin VAD-algoritmi, eli se

voi pyrkiä löytämään signaalista ne osat, jotka eivät sisällä puhetta ja vaimentamaan

näiden signaalin osien amplitudia. Tämä kuitenkin ratkaisee vain puolet ongelmasta, sillä

usein melu on häiritsevintä juuri puhetta sisältävien jaksojen aikana, sillä mikäli melu on

hyvin voimakasta, voi puheesta olla vaikea saada selvää.

Edellä mainittu ongelma voidaan pyrkiä ratkaisemaan muuttamalla NS-algoritmin toimin-

taperiaate muistuttamaan AEC-algoritmin toimintaa. Tällöin, samaan tapaan kuin AEC-

algoritmissa, melusta luodaan malli, jota voidaan käyttää negaatiosignaalina myös pu-

hetta sisältäville signaalin osille. Tämän avulla voidaan parhaimmillaan kyetä jopa koko-

naan poistamaan melu signaalista. Tällainen toteutus voi toimia hyvin tasaiselle melulle,

kuten kohinalle tai sähköisille häiriöäänille. Äkillisen ja lyhytkestoisen melun, kuten näp-

päimistöäänten tai muiden ihmisten aiheuttamien äänten poistoon tällainen menetelmä

ei kuitenkaan sovellu.

27

Kuva 4. Melunpoistoalgoritmin toimintaperiaate. [18.]

Melun reaaliaikaiseen mallintamiseen perustuvan ratkaisun ongelmana on myös, että

mallia voidaan tarkentaa ainoastaan silloin, kun signaali ei sisällä puhetta. Tämä voidaan

kuitenkin ratkaista esimerkiksi käyttämällä VAD-komponenttia ohjaamaan NS-algoritmia

siten, että konvoluutiomallia tarkennetaan ainoastaan puhetta sisältämättömien signaa-

linjaksojen aikana (ks. kuva 4).

Mikäli signaalista halutaan tehokkaasti poistaa myös muut häiriöäänet, tarvitaan NS-al-

goritmin toteutukseen älykkäämpiä ratkaisuja, kuten neuroverkkoja. [18.] Tällöin NS-al-

goritmi voi pyrkiä tunnistamaan signaalista ennalta opetettuja erilaisia meluksi luokitel-

tuja malleja ja poistamaan nämä signaalista. Tällaisen ratkaisun toimivuus riippuu hyvin

pitkälti käytetyn opetusdatan määrästä ja laadusta.

4.6 Automaattinen äänentason hallinta - AGC

AGC-komponentin tehtävänä on pitää lähetettävän äänisignaalin taso optimaalisella ta-

solla WebRTC-istunnon aikana. WebRTC:n standardin mukaan lähetettävän puhesig-

naalin tason tulisi olla noin 2600 RMS 16-bitin sananpituudella näytteistetyllä signaalilla,

joka vastaa noin -22 dBFS:ää (Decibels relative to Full Scale). Periaatteessa tämän to-

teuttaminen ei vaadi muuta kuin äänisignaalin RMS-tason mittaamista ja signaalin vah-

28

vistamista tai vaimentamista signaalin RMS-tason ja tavoitetason erotuksen verran. Käy-

tännössä tämä ei kuitenkaan riitä, sillä AGC-algoritmi vahvistaisi myös puhetta sisältä-

mättömien signaalinjaksojen äänentasoa.

Jotta AGC-algoritmi vahvistaisi ja vaimentaisi vain puhetta sisältäviä signaalinjaksoja,

voidaan myös AGC-algoritmin toiminnan ohjaamiseen käyttää VAD-komponenttia. Tällä

tavoin AGC-algoritmi voi jättää puhetta sisältämättömät signaalin osat huomioimatta

sekä vahvistuksen määrän laskennassa että vahvistuksen täytäntöönpanossa. Myös

taustamelun poistaminen ja akustisen kaiun mitätöinti on suotavaa suorittaa ennen sig-

naalin syöttämistä AGC-algoritmin käsiteltäväksi, sillä muutoin voimakas taustamelu tai

käyttäjän kaiuttimesta tullut ääni vaikuttaisi AGC-algoritmin laskemaan vahvistuksen tai

vaimennuksen määrään.

Koska AGC-algoritmi pyrkii vahvistamaan signaalia sen RMS-tason perusteella, tulisi

sen sisältää myös jonkinlainen kompressoripiiri, joka alentaa yksittäisten 0-tason ylittä-

vien signaalin huippuarvojen tasoa äänen säröytymisen estämiseksi.

4.7 Web Audio API

Web Audio API on JavaScript-ohjelmointirajapinta, joka mahdollistaa signaalinkäsittelyn

ja signaalien reitittämisen selainsovelluksissa. Web Audio API tarjoaa laajan valikoiman

erilaisia valmiiksi toteutettuja signaalinkäsittelykomponentteja, ja se myös tarjoaa raja-

pinnat omien signaalinkäsittelykomponenttien toteuttamiseen. Web Audio API on määri-

telty osana samaa Web API -standardia kuin WebRTC:n JavaScript-ohjelmointirajapin-

nat, ja se on myös suunniteltu toimimaan WebRTC-sovellusten kanssa [19].

Web Audio API:n keskeisiä käsitteitä ovat AudioContext ja AudioNode. AudioNode-raja-

pinta kuvaa yhtä solmua (sisääntulo, ulostulo tai signaalinkäsittelykomponentti) signaa-

liketjussa. AudioContext-rajapinta puolestaan koostuu AudioNode-objekteista ja kuvaa

koko signaaliketjua. Koska kaikki Web Audio API:n signaalinkäsittelykomponentit ilmen-

tävät AudioNode-rajapintaa, voidaan ne yhdistää vapaasti toisiinsa missä järjestyksessä

tahansa, jolloin signaalien reitittäminen on täysin modulaarista.

29

Koska JavaScript on luonteeltaan yksisäikeinen näkymän päivittämiseen tarkoitettu oh-

jelmointikieli, on tärkeää pyrkiä siihen, että raskaat signaalinprosessointitehtävät eivät

estäisi tai hidastaisi näiden toimintojen suorittamista. Tämän takia Web Audio API:n Au-

dioContext on suunniteltu toimimaan omassa säikeessään Worker-rajapintaa hyödyn-

täen.

Web Audio API:n integrointi WebRTC-sovellukseen on melko yksinkertaista. Sen Media-

StreamTrackAudioSourceNode-rajapinta mahdollistaa MediaStream-objektin, eli joko

käyttäjän multimedialaitteistosta Media Capture and Streams API:n avulla saadun ää-

nistriimin tai WebRTC-sovelluksen vastaanottaman äänistriimin muuttamisen Audi-

oNode-objektiksi [20]. MediaStreamTrackAudioDestinationNode-rajapinnan avulla Audi-

oNode-objekti voidaan muuttaa WebRTC:n MediaStream-objektiksi, jolloin sitä voidaan

käyttää WebRTC-sovelluksessa lähetettävänä äänistriiminä [21].

30

5 WebRTC:n signaalinkäsittelykomponenttien testaaminen

Yksinkertaisin tapa ymmärtää WebRTC:n signaalinkäsittelykomponenttien toimintaa ja

niiden toimivuutta erilaisissa sovelluksissa on ajaa erilaisia äänisignaaleja niiden läpi ja

tallentaa sekä sisään menevä että ulos tuleva signaali ja vertailla näiden eroavaisuuksia.

Koska oikeassa kaksisuuntaisessa kommunikaatiotilanteessa on useita ulkoisia tekijöitä

(esim. WebRTC:n ruuhkanhallintaominaisuus), jotka vaikuttavat vaihtelevasti vastaan-

otetun signaalin laatuun, toteutettiin signaalinkäsittelykomponenttien toiminnan testaa-

minen testiohjelman ja etukäteen muodostettujen testisignaalien avulla.

Testauksen tavoitteena oli pyrkiä muodostamaan selkeä kuva siitä, miten WebRTC:n

signaalinkäsittelykomponentit vaikuttavat ohjaajalta osallistujille lähetettävän äänen laa-

tuun. Sanoste Oy:n palveluiden äänenlaadun parantamisen kannalta tärkeintä oli selvit-

tää, miten eri signaalinkäsittelykomponentit käsittelevät puhetta, musiikkia tai näitä mo-

lempia sisältäviä signaaleja.

5.1 Testiohjelma

WebRTC:n lähdekoodi sisältää audioproc_f-testiohjelman, joka on tarkoitettu WebRTC:n

signaalinkäsittelyketjun testaamiseen. Se mahdollistaa mikrofonisignaalien ja vastaan-

otettujen signaalien simuloimisen äänitiedostojen avulla. Tällöin signaalinkäsittely-

komponenttien testaaminen voidaan suorittaa etukäteen muodostettujen testisignaalien

avulla.

WebRTC:n lähdekoodi sisältää myös signaalinkäsittelykomponenttien laadun arviointiin

(QA) tarkoitetun py_quality_assessment-ohjelmiston. py_quality_assessment-ohjel-

misto on periaatteessa Python-kääreohjelma audioproc_f-testiohjelmalle, joka tarjoaa

muutamia lisäominaisuuksia, kuten erilaisten akustisten olosuhteiden simuloimisen im-

pulssivasteiden avulla. Signaalinkäsittelykomponenttien testauksessa käytettävä tes-

tiohjelma toteutettiin tämän ohjelmiston pohjalta.

31

Koska py_quality_assessment-ohjelmisto on ensisijaisesti tarkoitettu laaturaporttien au-

tomatisoituun muodostamiseen, tuli sen toimintaan tehdä muutamia muokkauksia. Sig-

naalinkäsittelykomponenttien laadun mittaamiseen käytettävän maksullisen POLQA

(Perceptual Objective Listening Quality Analysis) -työkalun käyttö ohitettiin testiohjel-

massa täysin, koska tämä ei signaalinkäsittelykomponenttien toiminnan testaamisen

kannalta ollut oleellinen ominaisuus. Lisäksi py_quality_assessment-ohjelmisto salli ai-

noastaan yksikanavaisten wav-tiedostojen käyttöä, vaikka signaalinkäsittelykomponentit

kykenevät käsittelemään myös monikanavaista äänisignaalia. Jotta testauksessa kävisi

ilmi, vaikuttaako signaalinkäsittelykomponentti myös ulostulosignaalin kanavien mää-

rään, muokattiin py_quality_assessment-ohjelmistoa siten, että se kykeni syöttämään

signaalinkäsittelykomponenteille myös monikanavaista äänisignaalia.

5.2 Testisignaalien muodostaminen

Jotta kaikkien signaalinkäsittelykomponenttien toiminta voitiin testata riittävällä tasolla,

tuli testisignaalien muodostamisessa huomioida palvelutilanteen kaksisuuntaisuus, osal-

listujien lukumäärä sekä lähetettävien ja vastaanotettavien äänistriimien sisältö erilai-

sissa palvelutilanteissa.

Ohjaajan testisignaaleiksi muodostettiin sisällöltään kolme erilaista äänitiedostoa, joista

yksi sisälsi ainoastaan puhetta, toinen puhetta ja taustamusiikkia, ja kolmas laulua ja

taustamusiikkia. Näillä pyrittiin simuloimaan liikuntapalveluita sekä taustamusiikilla että

ilman sekä musiikkipalveluita, joissa ohjaaja laulaa säestyksen päälle. Koska myös lii-

kuntapalveluiden taustalla käytettävä musiikki sisältää usein laulua, jonka VAD-algoritmi

saattaa tulkita puheeksi, käytettiin liikuntapalveluiden taustamusiikkina musiikkikappa-

letta, joka sisältää sekä instrumentaaliosioita että laulua sisältäviä osioita.

Palveluiden kaksisuuntaisuuden huomioimiseksi testausta varten muodostettiin neljän

osallistujan äänistiimejä simuloivat äänitiedostot. Liikuntapalveluiden testaamisessa

käytettävät ääniraidat pyrittiin muodostamaan siten, että ne vastaisivat sisällöltään mah-

dollisimman hyvin osallistujien äänistriimejä oikeassa palvelutilanteessa, eli pääsääntöi-

sesti ne sisälsivät puhetta ainoastaan alku- ja lopputervehdyksen aikana, ja muutoin lä-

hinnä jumppaamisesta aiheutuvia ääniä. AEC-algoritmin DTD-komponentin testaa-

32

miseksi yksi äänitiedostoista ajoitettiin siten, että se sisältää yhtäaikaista puhetta ohjaa-

jan kanssa. Koska palvelun osallistujat ovat harvoin täysin meluttomassa tilassa, lisättiin

yhden osallistujan äänitiedostoon taustalla käytävän keskustelun ääniä. Musiikkipalve-

lun testaamista varten muodostettiin erilliset ääniraidat, jotka simuloivat yhteislaulutilan-

netta, jossa osallistujat laulavat ohjaajan esimerkin mukaisesti.

Ongelmallista kaksisuuntaisuuden testaamisessa oli, että oikeassa palvelutilanteessa

ohjaajalle saapuvat osallistujien äänistriimit on prosessoitu WebRTC:n signaalinkäsitte-

lyketjussa, jonka toimintaan puolestaan vaikuttaa ohjaajalta osallistujalle saapuva ää-

nistriimi. Jotta tätä pystyttiin simuloimaan edes jollain tasolla, ohjaajan äänitiedostot kä-

siteltiin ensin testiohjelman avulla ilman osallistujilta saapuvaa äänistriimiä, jonka jälkeen

osallistujien äänitiedostot käsiteltiin testiohjelman avulla käyttäen ohjaajan käsiteltyjä ää-

nitiedostoja osallistujalle saapuvana äänistriiminä. Näitä käsiteltyjä osallistujien äänitie-

dostoja käytettiin simuloimaan ohjaajalle saapuvaa äänistriimiä lopullisessa testauk-

sessa.

5.3 Testauksen tulokset

Koska äänenlaadun mittaamiseen ei ole olemassa mitään yksiselitteistä mittaria, arvioi-

tiin testiohjelman avulla muodostettuja ulostulosignaaleja sekä kuulonvaraisesti että ver-

tailemalla niiden aaltomuotoja alkuperäiseen sisääntulosignaaliin.

AEC

Kuulonvaraisesti arvoituna AEC onnistui poistamaan kaiun, eli ohjaajalle saapuvan ää-nistriimin, lähetetystä äänistriimistä tehokkaasti kaikista testisignaaleista. Kaikilla testi-

signaaleilla oli kuitenkin havaittavissa huomattavaa äänenlaadun heikkenemistä yhtäai-

kaisen puheen aikana. Etenkin silloin, kun testisignaali sisälsi musiikkia, ilmeni yhtäai-

kainen puhuminen lähetetyn äänistriimin pätkimisenä. Myös yhden osallistujan testisig-

naalissa esiintyvä taustalla käyty keskustelu häiritsi voimakkaasti AEC:n toimintaa.

Kuulonvaraisesti havaitut ongelmat näkyvät selvästi myös ulostulosignaalien aaltomuo-

doissa. Testisignaalissa, joka simuloi liikuntapalvelua, jossa käytetään taustamusiikkia,

voi selvästi nähdä ulostulosignaalin tason huomattavan alenemisen niissä kohdissa,

33

joissa osallistujat puhuivat samaa aikaa ohjaajan kanssa tai taustamusiikin päälle. Mu-

siikkipalvelua simuloivassa testauksessa, jossa osallistujilta ohjaajalle saapuva äänist-

riimi sisälsi osallistujien laulua, ongelma oli vielä selvemmin havaittavissa. Käytännössä

AEC lähes mykisti ohjaajan äänistriimin niissä kohdissa, joissa osallistujat lauloivat mu-

kana.

Tulosten perusteella voidaan sanoa, että AEC soveltuu heikosti käytettäväksi kaksisuun-

taisissa palveluissa, koska yhtäaikaista puhetta esiintyy vääjäämättä joko taustamelun

tai osallistujien puhumisen takia. Musiikkipalveluihin AEC ei sovellu lainkaan, sillä osal-

listujat eivät käytännössä kuule ohjaajan äänistriimiä lainkaan silloin, kun yksikin osallis-

tujista on äänessä.

NS

Pelkkää puhetta sisältävästä testisignaalista pystyi havaitsemaan, että NS-komponentti poisti hyvin ohjaajan mikrofonisignaalissa esiintyvää staattista kohinaa. Pelkkää puhetta

sisältävän testisignaalin kohdalla ei myöskään ollut havaittavissa merkittävää äänenlaa-

dun heikkenemistä.

Musiikkia sisältävien testisignaalien kohdalla oli havaittavissa musiikin tason alenemista

etenkin musiikkikappaleen instrumentaaliosioissa. Musiikkia sisältävien testisignaalien

tapauksessa merkillepantavaa oli myös ylätaajuuksien ajoittainen vaimeneminen sekä

laulun äänentason voimistuminen suhteessa taustamusiikkiin.

Vaikka äänenlaadussa ei ollut havaittavissa vakavaa heikkenemistä millään testisignaa-lilla, ei NS-komponentin käyttö ole kuitenkaan järkevää musiikkia sisältävien äänisignaa-

lien kohdalla, sillä taustamusiikin äänentason aleneminen suhteessa lauluun tai puhee-

seen ei ole useinkaan toivottua, ja vaimenemisen määrä on myös melko vaihtelevaa

musiikin sisällöstä riippuen. Pelkkää puhetta sisältäville signaaleille NS-komponentti kui-

tenkin toimi hyvin, jolloin sillä myös oli äänenlaatua parantava vaikutus.

AGC

34

AGC-komponentti vaikutti toimivan hyvin puheen äänenvoimakkuuden vaihteluiden ta-saamisessa kaikilla testisignaaleilla sekä kuulonvaraisesti että ulostulosignaalien aalto-

muotojen tarkastelun perusteella arvioutuna. Musiikkipalvelua simuloivan testisignaalin

äänenvoimakkuuteen AGC:llä oli kuitenkin melko arvaamaton vaikutus, joka ilmeni sat-

tumanvaraiselta vaikuttavana musiikin tason alenemisena.

Testisignaalilla, joka sisälsi ohjaajan puhetta ja taustamusiikkia AGC:n toiminta ei ollut

muutoin häiritsevää, mutta ulostulosignaalin loppupuolella oli kuitenkin havaittavissa

melko voimakas taustamusiikin äänentason voimistuminen sen jälkeen, kun ohjaajan oli

ollut puhumatta noin 30 sekuntia. Tämä oli myös selvästi nähtävissä ulostulosignaalin

aaltomuotoa tarkasteltaessa.

Pelkkää puhetta sisältävälle testisignaalille AGC-komponentilla oli selvästi äänenlaatua

parantava vaikutus. Musiikkia sisältävien testisignaalien kohdalla AGC:n vaikutusta ää-

nenlaatuun voidaan kuitenkin pitää heikentävänä, sillä se aiheutti musiikkiin hallitsema-

tonta äänentason vaihtelua.

35

6 Äänten miksaaminen Sanoste Oy:n sovelluksessa

Tämän työn tavoitteena oli myös selvittää mahdollisuuksia helppokäyttöisen mikseriso-

velluksen toteuttamiseen osaksi Sanoste Oy:n WebRTC-teknologiaan perustuvaa kuva-

puhelusovellusta. Mikserisovelluksen vaatimien teknologioiden ja teknisten ratkaisujen

testaamiseksi myös käytännössä työn yhteydessä toteutettiin prototyyppi mikserisovel-

luksesta, joka toteuttaa mikserisovellukselta vaaditut toiminnallisuudet.

Tässä luvussa käsitellään mikserisovellukselta vaaditut toiminnallisuudet ja niiden mah-

dolliset toteutustavat Web Audio API:n avulla. Luvun lopussa käydään läpi mikserisovel-

lukselta vaadittujen toimintojen testaaminen prototyyppisovelluksen avulla.

6.1 Mikserisovelluksen vaatimukset

Mikserisovelluksen suunnittelussa huomioon otettavista vaatimuksista tärkeimpiä oli sen

helppokäyttöisyys ja sen integroituminen palveluntuottajan kuvapuhesovellukseen. Käy-

tännössä tämä tarkoitti, että miksaamiseen liittyvien toimintojen, kuten äänentasojen hal-

linnan ja äänilähteiden reititysten, tulisi olla mahdollisimman pitkälle automatisoituja, ja

toteutuksessa käytettävien teknologioiden tulisi toimia selaimessa sekä olla integroita-

vissa WebRTC:n Media Capture and Streams API:n kanssa.

Suunnittelussa tuli lisäksi huomioida, että mikserisovellus ei saa haitata kuvapuheluso-

velluksen muuta toimintaa, eikä sen toiminta saa vaikuttaa havaittavissa olevalla tavalla

kuvan ja äänen synkronointiin. Toteutustavan tuli siis olla sellainen, että signaalinkäsit-

tely suoritetaan mahdollisuuksien mukaan näkymää päivittävän säikeen ulkopuolella. Mi-

käli signaalinkäsittely aiheuttaa mikrofonisignaaliin havaittavissa olevaa viivettä, tulisi ku-

van ja äänen olla uudelleen synkronoitavissa.

Liikuntapalveluissa, joissa käytetään taustamusiikkia, on tärkeää varmistaa puheen kuu-

luvuus musiikin yli. Tämän takia mikserisovelluksen tulisi sisältää talkover-toiminto, joka

laskee musiikin äänentasoa automaattisesti ohjaajan puhuessa. Myös äänen kierron eh-

käiseminen ja äänenlaatu tuli huomioida sekä äänimikserisovelluksessa että laitepuolen

ratkaisuissa.

36

6.2 Mikserisovelluksen teknologiat ja integrointi

Koska Sanoste Oy:n palveluntuottajan kuvapuhelusovellus toimii selaimessa, oli mikse-

risovelluksen toteuttamiseen luontevin vaihtoehto Web Audio API, sillä se on suunniteltu

toimimaan yhdessä WebRTC:n Media Capture and Streams API:n kanssa. Web Audio

API:n signaalinkäsittely tapahtuu AudioWorkerin ansiosta erillisessä säikeessä, jolloin

paljon laskenta-aikaa vaativat signaalinkäsittelyoperaatiot eivät estä näkymän päivitty-

mistä.

Signaalinkäsittelyn suorittaminen erillisessä säikeessä auttaa myös signaalinkäsittelystä

aiheutuvien viiveiden hallinnassa. Mikserisovelluksien vaatimien signaalinkäsittelyope-

raatioiden ei pitäisi aiheuttaa kovinkaan suuria viiveitä äänisignaaliin, mutta mikäli kuvan

ja äänen välille pääsee syntymään havaittavissa oleva synkronointivirhe, voidaan kuvaa

tarvittaessa puskuroida Canvas API:n avulla ja striimata viiveellä Media Capture and

Streams API:n CanvasCaptureMediaStreamTrack-rajapintaa hyödyntäen.

Jotta mikserisovellus olisi integroitavissa palveluntuottajan sovellukseen sen käyttöliitty-

män toteutustavasta riippumatta, mikserisovelluksen ei tulisi toteuttaa mitään käyttöliit-

tymäkomponentteja, vaan ainoastaan tarjota niiden toteuttamiseen vaaditut rajapinnat.

Tämän avulla voidaan varmistaa, että palveluntuottajan sovelluksen käyttöliittymän ul-

koasun muuttaminen ei vaadi muutoksia mikserisovellukseen.

Käyttöliittymäkomponenttien toteutukseen vaadittavien toimintojen mahdollistamiseksi

mikserisovelluksen tulisi tarjota rajapinnat ainakin seuraaviin toimintoihin:

• saatavilla olevien äänilähteiden listaus

• kanavan äänilähteen haku ja muokkaus

• kanavan äänentason haku ja muokkaus

• reaaliaikainen kanavan amplitudin huippu- ja RMS-arvojen haku

• kanavan signaalinkäsittelykomponenttien kytkentä päälle/pois.

Näiden avulla mahdollistetaan muun muassa seuraavat toiminnot:

• sisääntulokanavan äänilähteen valinta

• kanavan äänentason säätö

• kanavan äänentason näyttö (VU-mittari)

37

• signaalinkäsittelykomponenttien valinta.

Mikäli mikserisovelluksen toteuttamisessa ilmenee, että kuva- ja ääni täytyy synkronoida

uudelleen, voidaan synkronointi suorittaa joko mikserisovelluksessa tai palveluntuottajan

sovelluksessa. Mikäli synkronointi toteutetaan palveluntuottajan sovelluksessa, tulee

mikserisovelluksen tarjota rajapinta sen signaalinkäsittelyn aiheuttaman viiveen selvittä-

miseksi. Jos synkronointi suoritetaan mikserisovelluksessa, tulee mikserisovelluksen

sallia kuvan renderöintiin käytettävän käyttöliittymäkomponentin määrittäminen esimer-

kiksi mikserisovelluksen alustamisen yhteydessä.

6.3 Laitekokoonpanot ja signaalin esikäsittely

Koska äänimikserisovelluksen avulla pyritään pääsemään eroon monimutkaisista ja hin-

tavista laitekokoonpanoista, tulisi laitepuolen vaatimusten olla mahdollisimman kevyet.

Äänenlaadun kannalta olisi kuitenkin suotavaa, että palvelun toteuttamiseen käytetään

jotain muuta laitteistoa kuin tietokoneen sisäänrakennettua mikrofonia ja kaiutinta.

Parhaan äänenlaadun saavuttamiseksi olisi suotavaa, että palvelun ohjaaja käyttäisi

kuulokkeita ja suun lähelle sijoitettavaa mikrofonia. Kuulokkeiden käytöllä voidaan täysin

eliminoida äänen kierto ohjaajan ja osallistujien välillä, jolloin WebRTC:n AEC-kompo-

nentti voidaan huoletta kytkeä pois päältä ohjaajan osalta. Liikuntapalveluiden osalta tu-

lee ottaa huomioon, että ohjaajan tulee voida liikkua vapaasti, jolloin sisäänrakennetulla

mikrofonilla varustetut langattomat kuulokkeet ovat todennäköisesti paras vaihtoehto.

Tällöin laitteet eivät haittaa ohjaajan liikkumista ja mikrofoni sijoittuu riittävän lähelle oh-

jaajan suuta.

Palveluissa, joiden sisältö koostuu pääasiassa musiikista, saattaa olla tarpeen käyttää

kuulokkeiden sisäänrakennettua mikrofonia laadukkaampaa ja vapaammin sijoiteltavaa

mikrofonia. Tällöin esimerkiksi USB-väylään liitettävä kondensaattorimikrofoni on hyvä

vaihtoehto. Toinen vaihtoehto on käyttää pientä USB-väylään liitettävää ulkoista mikse-

riä, johon voidaan kytkeä mikrofonin lisäksi myös sähköisiä instrumentteja (esim. sähkö-

piano) tai lisämikrofoneja.

38

Mikäli palvelussa käytetään taustamusiikkia, tarvitaan jokin väylä, jota pitkin musiikkisoit-

timen (yleensä älypuhelin) ulostulosignaali voidaan siirtää tietokoneelle. Joissain tieto-

koneissa saattaa olla valmiina 3,5 mm:n sisääntuloliitäntä, johon puhelimen ulostulo voi-

daan liittää. Mikäli tällaista liitäntää tietokoneesta ei löydy, voidaan tietokoneeseen mu-

siikkisoittimen väliin hankkia ulkoinen USB-väylään liitettävä AD-muunnin. Kun musiikki

syötetään mikserisovellukseen erillisen äänilähteen kautta, voidaan kaikki WebRTC:n

signaalinkäsittelykomponentit kytkeä pois käytöstä musiikkiraidan osalta musiikin äänen-

laadun parantamiseksi.

6.4 Äänilähteet ja niiden hallinta

Koska mikserisovelluksessa ei voida luotettavasti päätellä, mitä laitetta ohjaaja käyttää

musiikkikanavan lähteenä, tulisi mikserisovelluksen kerätä laitteiden tiedot ja tarjota

käyttäjälle valikko äänilähteen valitsemiseksi. Mikrofonikanavan osalta voidaan oletus-

arvoisesti käyttää käyttäjän selaimen oletuslaitetta, mutta myös mikrofonikanavan osalta

voi olla järkevää tarjota mahdollisuus vaihtaa laitetta sen varalta, että selaimen oletus-

laite on asetettu väärin.

Käyttäjän laitteiden tiedot voidaan hakea WebRTC:n Media Capture and Streams API:n

MediaDevices-rajapinnan enumerateDevices()-metodin avulla. Metodi palauttaa listan

MediaDeviceInfo-objekteja, jotka sisältävät oleellisia tietoja käytettävissä olevista multi-

medialaitteista, kuten tiedon siitä, onko laite ääni- vai kuvalaite, sekä laitetunnisteen ja

laitteen selkokielisen nimen.

navigator.mediaDevices.enumerateDevices() .then(function(devices) { devices.forEach(function(device) { if (device.kind == "audioinput") { audioSources.push(device); } else if (device.kind == "audiooutput") { audioDestinations.push(device); } else if (device.kind == "videoinput") { videoSources.push(device); } }); }) .catch(function(err) { /* handle error */ })

Esimerkkikoodi 1. Esimerkki enumerateDevices()-metodin käytöstä mikserisovelluksen alus-tuksessa.

39

Mikserisovelluksessa MediaDevice-objektien tiedot voidaan tallentaa taulukoihin niiden

tyypin, eli kind-parametrin mukaan (ks. esimerkkikoodi 1). Tällöin käyttäjälle voidaan laa-

tia valikko saatavilla olevista äänilähteistä. Näitä tietoja myös tarvitaan myöhemmin strii-

mien alustuksen yhteydessä.

6.5 Striimien alustaminen

Jotta äänilähteiden tuottamiin striimeihin päästään käsiksi mikserisovelluksessa, tulee

niitä kutsua MediaDevices-rajapinnan getUserMedia()-metodin avulla. Tietoturvasyistä

laitteiden käytön ehtona on, että käyttäjä on sallinut laitteiden käytön kyseiselle verkko-

osoitteelle.

Multimedialaitteiden käyttöluvan kysyminen on sisäänrakennettu getUserMedia()-meto-

din toteutukseen. Metodi tarkistaa kutsun yhteydessä, onko selaimen käyttäjä sallinut

multimedialaitteiden kyseiselle verkko-osoitteelle. Mikäli käyttäjä on sallinut laitteiden

käytön, metodi palauttaa MediaStream-objektin, joka edustaa kutsutun laitteen tuotta-

maa striimiä. Mikäli käyttäjä ei salli laitteiden käyttöä, metodi palauttaa NotAllowedError-

virheen.

navigator.mediaDevices.getUserMedia(constraints) .then(function(stream) { if (audioMixer.channels[n].source) { audioMixer.channels[n].source.mediaStream.getTracks() .forEach(track => track.stop()); } audioMixer.channels[n].source = audioContext.createMediaStreamSource(stream); }) .catch(function(err) { /* handle error */ });

Esimerkkikoodi 2. Esimerkki striimin alustamisesta mikserisovelluksessa.

Striimin alustuksen yhteydessä striimistä voidaan luoda Web Audio API:n MediaStream-

SourceNode-objekteja, joita voidaan käyttää mikserisovelluksen kanavien lähteinä (ks.

esimerkkikoodi 2). Striimien alustaminen kannattaa toteuttaa dynaamisesti äänilähteen

valinnan yhteydessä tarpeettomien striimien luonnin välttämiseksi. Kun striimiä ei enää

tarvita, tulisi sen lähteenä toimiva laite vapauttaa kutsumalla striimin sisältämien Media-

StreamTrack-objektien stop()-metodia.

40

6.6 Multimedialaitteiden valinta ja asetukset

getUserMedia()-metodille voidaan antaa parametrina MediaStreamConstraints-objekti,

jossa voidaan määrittää erilaisia ehtoja MediaStream-objektin alustukselle, kuten se,

halutaanko MediaStream-objektin sisältävän vain ääni- tai kuvastriimin vai molemmat.

Lähtökohtaisesti getUserMedia()-metodi palauttaa selaimen asetuksissa määritettyjen

oletuslaitteiden striimit, mutta MediaStreamConstraints-objektissa voidaan myös viitata

tiettyyn laitteeseen enumerateDevices()-metodin palauttaman laitetunnisteen avulla.

const constraints = { audio: { deviceId: deviceId, echoCancellation: false, noiseSuppression: false, autoGainControl: false, sampleRate: 48000, sampleSize: 16, channelCount: 2 } };

Esimerkkikoodi 3. Esimerkki MediaStreamConstraints-objektin määrittelystä musiikkia sisältä-välle striimille.

MediaStreamConstraints-objektissa voidaan myös määrittää muita asetuksia, kuten

näytteenottotaajuus, sananpituus, kanavien lukumäärä ja vaadittavat signaalinkäsittely-

komponentit. Näiden avulla voidaan esimerkiksi kytkeä AEC-, NS- ja AGC-signaalinkä-

sittelykomponentit pois käytöstä musiikkia sisältävien striimien osalta (ks. esimerkkikoodi

3).

Mikrofonikanavan kohdalla ainakin AGC-komponentti kannattaa jättää päälle. Tällöin

varmistetaan, että mikrofonin signaali on koko ajan optimaalisella tasolla ja samalla eh-

käistään signaalin säröytymistä. Valitettavasti kaikki selaimet eivät tue AGC-komponen-

tin käytön määrittämistä erikseen, vaan se kytkeytyy päälle tai pois AEC-komponentin

mukana. Selaimen tukemat asetukset voidaan tarkistaa MediaDevices-rajapinnan get-

SupportedConstraints()-metodin avulla.

41

6.7 Äänentasojen analysointi ja hallinta

Mikserisovelluksen äänentasojen analysointi ja hallinta voidaan toteuttaa Web Audio

API:n AnalyserNode- ja GainNode-rajapintojen avulla. Web Audio API tarjoaa myös Dy-

namicCompressorNode-rajapinnan, jonka avulla voidaan rajoittaa signaalin dynaamiik-

kaa, eli signaalin amplitudin vaihteluita.

AnalyserNode-rajapinta mahdollistaa signaalin reaaliaikaisen amplitudi- ja taajuusinfor-

maation tarkkailun. AnalyserNode-rajapinnan getFloatTimeDomainData()-metodin

avulla saadaan haettua tarkkailtavana olevan signaalin näytteiden arvot välille -1 ja 1

normalisoituina liukulukuina, jotka edustavat näytteiden arvoja aika-alueella. Jokainen

arvo siis kuvaa signaalin amplitudia tietyllä ajanhetkellä. Signaalin amplitudin huippuarvo

on getFloatTimeDomainData()-metodin palauttamien näytteiden itseisarvojen suurin

luku. RMS-arvo voidaan selvittää ottamalla neliöjuuri näytteiden neliöiden keskiarvosta.

Signaalin amplitudiarvoja voidaan hyödyntää äänentasojen mittaroinissa tai äänenta-

sojen automatisoinnissa.

Web Audio API:n GainNode-rajapinnan avulla voidaan hallita sille syötetyn striimin ää-

nentasoa. Sen gain-parametrin voi ajatella olevan kuin liukukytkin mikserissä, jonka nol-

lataso (0 dBFS) on arvossa 1 ja minimitaso (-¥ dBFS) arvossa 0. Koska ohjattavan ka-

navan äänentason muuttaminen äkisti arvosta toiseen kuulostaisi epämiellyttävältä ja

epäluonnolliselta, tulisi kanavan äänentasoa laskea asteittain. GainNode-rajapinnan

gain-parametri toteuttaa AudioParam-rajapinnan, jonka linearRampToValueAtTime()- tai

exponentialRampToValueAtTime()-metodien avulla voidaan automatisoida GainNoden

ulostulon siirtyminen haluttuun tasoon määriteltävissä olevan ajanjakson aikana. Gain-

Node-rajapintaa voidaan käyttää äänentasojen hallintaan sekä mikserisovelluksen että

käyttöliittymän puolella.

Ulostulokanavissa signaalin huipputehon rajoittaminen voi olla tarpeen, sillä signaalien

summaaminen voi potentiaalisesti aiheuttaa kanttiaallon muodostumista, eli havaitta-

vissa olevaa äänen säröytymistä, mikäli summatun signaalin huipputeho nousee yli ar-

von 1. DynamicCompressorNode-rajapinta soveltuu hyvin tämän ehkäisemiseen, sillä

sen knee-parametrin avulla voidaan hallita signaalin vaimennuksen määrää, kun signaa-

lin amplitudi lähestyy vaimennukselle asetettua raja-arvoa. Tällöin signaalin dynaamista

42

aluetta voidaan kaventaa hallitusti asteittain sen sijaan, että signaalin huiput leikkaantui-

sivat äkisti aiheuttaen kanttiaallon muodostumista. Jotta signaalia vaimennetaan vain

lähellä dynaamisen alueen ylärajaa, tulisi vaimennuksen raja-arvo (threshold-parametri)

asettaa lähelle tasoa 0 dBFS ja vaimennuksen kerroin (ratio-parametri) mahdollisimman

korkeaksi.

6.8 Talkover-toiminto

Äänitekniikassa talkover-toiminto tarkoittaa sitä, että muiden kanavien äänentasoa las-

ketaan automaattisesti mikrofonikanavan ollessa aktiivinen. Tämän avulla varmistetaan

puheen kuuluvuus muiden äänilähteiden yli. Etenkin tilanteessa, jossa ohjaaja antaa oh-

jeita osallistujille, on tärkeää, että ohjaajan ääni kuuluu selvästi musiikin yli.

Joskus talkover-toiminto sekoitetaan sidechain-kompressointiin, jossa toisen kanavan

ulostulo ohjaa toiseen kanavaan vaikuttavaa kompressoripiiriä. Tämä kuitenkin eroaa

talkover-toiminnosta siten, että ohjaavan kanavan äänenvoimakkuus vaikuttaa ohjatta-

vana olevan kanavan dynamiikkaan. Talkover-toiminnon tarkoituksena puolestaan on

ainoastaan vaikuttaa toisten kanavien äänenvoimakkuuksiin muuttamatta näiden dyna-

miikkaa. Varsinkin musiikkia sisältävää signaalia käsiteltäessä, jonka dynaamista aluetta

on saatettu jo valmiiksi kaventaa rajusti alkuperäisen äänitteen masterointivaiheessa, on

tärkeää varmistaa, että äänistriimin dynaamista aluetta ei kavenneta entisestään, sillä

pahimmillaan tämä voi johtaa äänen säröytymiseen.

Edellä mainituista syistä johtuen mikserisovelluksen talkover-toiminnon toteutuksessa ei

kannata käyttää DynamicCompressorNode-rajapintaa, vaan se tulisi mieluummin toteut-

taa AnalyserNode- ja GainNode-rajapintoja hyödyntäen. Näiden avulla talkover-toiminto

voidaan toteuttaa siten, että mikrofonikanavan ollessa aktiivinen, muiden kanavien ää-

nentaso lasketaan tietylle tasolle ilman, että vaikutetaan signaalien dynamiikkaan.

Mikrofonikanavan aktiivisuuden tunnistamisen toteuttaminen olisi helppoa, mikäli mikse-

risovellus pääsisi käsiksi WebRTC:n VAD-algoritmin palauttamiin arvoihin. Tämä ei kui-

tenkaan ole mahdollista, sillä WebRTC ei tarjoa tällaista JavaScript-rajapintaa. Mikäli

mikrofonikanavassa on käytössä automaattinen äänentason hallinta, voidaan puheaktii-

visuuden tunnistamisessa hyödyntää tietoa siitä, että WebRTC-standardin määrittelemä

43

tavoitetaso mikrofonisignaalille on noin -22 dBFS. Puheaktiivisuuden voidaan siis tulkita

alkaneeksi, kun mikrofonikanavan amplitudi ylittää -22 dBFS:n raja-arvon, ja päätty-

neeksi, kun amplitudi laskee sen alle. Toisaalta, jos melunpoisto on käytössä, voidaan

olla melko varmoja siitä, että kun signaalin amplitudi ylittää -22 dBFS:n raja-arvon, on

kyse puheesta eikä taustakohinasta.

Koska puheen amplitudi vaihtelee paljon puheessa esiintyvien taukojen takia, voi talko-

ver-komponenttiin olla tarpeen toteuttaa jonkinlainen hystereesi, eli ominaisuus, jonka

avulla voidaan asettaa puheaktiivisuuden päättymiselle erilaiset ehdot kuin puheaktiivi-

suuden alkamiselle.

Käytännössä hystereesi voidaan toteuttaa puheaktiivisuuden tunnistamisessa saatujen

arvojen puskuroinnin avulla. Tällöin puheaktiivisuus voidaan tulkita päättyneeksi, kun pu-

heaktiivisuutta ei ole havaittu jonkin ajanjakson aikana. Tällä voidaan melko tehokkaasti

ehkäistä puheessa esiintyvien taukojen tulkitsemista puheaktiivisuuden päättymiseksi.

Puheaktiivisuuden päättymisen tunnistamiselle voidaan tarvittaessa myös määrittää al-

haisempi amplitudin raja-arvo.

Puheaktiivisuus arvojen puskuroinnin lisäksi ohjattavien kanavien äänentason palaami-

nen alkuperäiselle tasolleen kannattaa asettaa tapahtumaan riittävän hitaasti, mikä voi

myös osaltaan auttaa vähentämään havaittavissa olevia äänentason muutoksia puheen

aikana.

Jos talkover-toiminnon ohjaama kanava on esimerkiksi taustamusiikkia, voi olla jopa toi-

vottavaa, että sen äänentaso ei palaa alkuperäiselle tasolleen välittömästi puheen pää-

tyttyä. Tällöin hystereesin raja-arvot voidaan huoletta asettaa melko alhaisiksi ja pusku-

roinnin aika riittävän pitkäksi, jotta varmistutaan siitä, että puheaktiivisuus on oikeasti

päättynyt.

6.9 Striimien reitittäminen ja miksaaminen

Äänilähteiden striimien miksaaminen tapahtuu reitittämällä ne haluttuihin ulostuloihin.

Toisin sanoen mikserisovelluksen sisääntulokanavien ulostulot tulee yhdistää haluttuihin

44

ulostulokanaviin. Mikserisovelluksen käyttäjän, eli ohjaajan laitteiston valittua ulostulolai-

tetta edustaa Web Audio API:n AudioContext-rajapinnan destination-parametri, eli kaikki

sisääntulokanavat, jotka halutaan reitittää ohjaajan kuunteluun, tulee yhdistää tähän.

Sisääntulokanavien ulostulojen reitittämiseen osallistujille voidaan hyödyntää Web Au-

dio API:n MediaStreamDestinationNode-rajapintaa. MediaStreamDestinationNode-raja-

pinta toimii muuten samaan tapaan, kuin AudioDestinationNode-rajapinta, mutta sillä

erotuksella, että sen ulostulona on striimi, jota voidaan käyttää WebRTC-yhteyden ää-

nistriiminä. MediaStreamDestinationNode-objekti luodaan kutsumalla AudioContext-ra-

japinnan createMediaStreamDestination()-metodia. Liittämällä sisääntulokanavien ulos-

tulot luotuun MediaStreamDestinationNode-objektiin, voidaan eri sisääntulotulokanavat

summata yhdeksi striimiksi, joka voidaan välittää WebRTC-yhteyden yli osallistujille.

Tarvittaessa reititykset voidaan toteuttaa dynaamisesti lisäämällä käyttöliittymään si-

sääntulokanavien yhteyteen mahdollisuus valita sisääntulokanavan ulostulokanavat. Tä-

män avulla ohjaaja voi esimerkiksi valita, haluaako hän kuulla oman äänensä palvelun

aikana. Osallistujilta saapuvien äänistriimit ohjautuvat automaattisesti käyttäjän valittuun

ulostulolaitteeseen, joten niiden reitittämisestä ei tarvitse erikseen huolehtia mikseriso-

velluksessa.

6.10 Asetusten tallentaminen

Jotta käyttäjän valitsemat äänilähteet ja mahdolliset muut mikserisovelluksen asetukset

säilyisivät eri sivujen välillä navigoidessa tai sivun uudelleenlatauksen yli, tulee asetukset

tallentaa jonnekin sellaisessa muodossa, että mikserisovellus voidaan alustaa niiden

avulla siihen tilaan, jossa se oli aiemmin. Mahdollisia paikkoja asetusten tallentamiseen

ovat

• sovelluksen tietokanta

• käyttäjän istunto (cookie)

• Web Storage API (sessionStorage tai localStorage).

Asetusten tallentaminen sovelluksen tietokantaan ei todennäköisesti ole mielekästä, sillä

ensinnäkin se vaatisi tietokantaan uuden taulun, joka vaatisi muutoksia joka kerta, kun

45

mikserisovelluksen tallennettaviin asetuksiin tehdään muutoksia. Toisekseen mikseriso-

velluksen asetukset ovat hyvin pitkälti sidottu käyttäjän sen hetkiseen laitekokoonpa-

noon, joten samojen asetusten käyttö käyttäjän muissa mahdollisissa laitekokoonpa-

noissa ei ole perusteltua. Asetusten tallentaminen käyttäjän istuntoon on myös kyseen-

alaista, sillä asetukset pyyhkiytyisivät muistista heti, kun käyttäjän istunto vanhenee tai

käyttäjä kirjautuu ulos sovelluksesta. Asetusten tallentaminen tietokantaan tai käyttäjän

istuntoon edellyttäisivät myös tietojen lähettämistä taustajärjestelmään.

Edellä mainituista syistä johtuen järkevin paikka mikserisovelluksen asetusten tallenta-

miseen on selaimen oma tallennustila, eli Web Storage API:n sessionStorage tai localS-

torage. Näistä kahdesta localStorage on todennäköisesti parempi vaihtoehto, sillä ase-

tukset säilyvät tällöin muistissa, vaikka käyttäjä vahingossa sulkisi sovelluksen välileh-

den. Web Storage API:n käytön etuna on myös se, että asetusten tallentaminen voidaan

toteuttaa suoraan mikserisovellukseen, mikä tekee mikserisovelluksen integroinnista ja

jatkokehityksestä yksinkertaisempaa.

Jotta varmistetaan, että mikserisovelluksen asetukset tallentuvat esimerkiksi sivun uu-

delleenlatauksen yhteydessä, voidaan mikserisovellukseen toteuttaa asetusten auto-

maattinen tallennus window-objektin beforeunload-tapahtuman yhteydessä. Palvelin-

puolen renderöintiin perustuvassa sovelluksessa tämä todennäköisesti riittää asetusten

tallentamiseen kaikissa tilanteissa, sillä jokainen navigointitapahtuma aiheuttaa uuden

sivun lataamisen, joka puolestaan laukaisee beforeunload-tapahtuman. Asiakaspuolen

renderöintiin perustuvassa yhden sivun sovelluksessa (SPA) asia ei kuitenkaan ole ihan

näin yksinkertainen, sillä näkymien välillä navigointi ei aiheuta uuden sivun lataamista,

jolloin se ei myöskään laukaise beforeunload-tapahtumaa. Muistinkäytön hallitsemiseksi

mikserisovelluksen instanssi halutaan todennäköisesti alustaa vain niissä näkymissä,

joissa sitä tarvitaan, ja tuhota, kun näkymästä poistutaan. Tämän takia mikserisovelluk-

sen tulisi tarjota rajapinta, esimerkiksi save()-metodi, jota kutsumalla asetukset voidaan

tallentaa milloin tahansa.

"settings": { "inputs": [ { "label": "Microphone", "source": "default", "gain": 1.0, "constraints": { "echoCancellation": false, "noiseSuppression": false,

46

"autoGainControl": true, "sampleRate": 48000, "sampleSize": 16, "channelCount": 2 } }, { "label": "Music", "source": null, "gain": 1.0, "constraints": { "echoCancellation": false, "noiseSuppression": false, "autoGainControl": false, "sampleRate": 48000, "sampleSize": 16, "channelCount": 2 } } ], "outputs": [ { "label": "Main", "type": "stream", "gain": 1.0 }, { "label": "Cue", "type": "speaker", "gain": 1.0 } ], "connections": [ {"input": 0, "output": 0}, {"input": 1, "output": 0}, {"input": 1, "output": 1} ], "attenuators": [ {"source": 0, "target": 1} ] }

Esimerkkikoodi 4. Mikserisovelluksen asetusten esittäminen JSON-formaatissa.

Yksinkertaisin formaatti mikserisovelluksen asetusten tallentamiseen on JSON-for-

maatti, sillä se on helposti luettavissa ja muunnettavissa JSON-objektiksi mikserisovel-

luksessa. Jotta mikserisovellus voidaan alustaa aiempaan tilaan, tulisi asetusten sisältää

ainakin tiedot sisään- ja ulostulokanavien asetuksista, näiden välisistä reitityksistä ja

muiden komponenttien, kuten talkover-komponentin, kytkennöistä (ks. esimerkkikoodi

4).

47

6.11 Mikserisovelluksen toimintojen testaaminen

Mikserisovelluksen suunnittelun yhteydessä mikserisovelluksesta kehitettiin yksinkertai-

nen prototyyppisovellus, jonka avulla voitiin testata, että äänilähteiden miksaamiseen ja

äänentasojen automatisointiin esitetyt ratkaisut sekä niiden toteuttamisessa käytettävät

rajapinnat toimivat myös käytännössä niin kuin niiden oli ajateltu toimivan. Testauksessa

käytetty laitteisto koostui kannettavasta tietokoneesta, langallisista integroidulla mikrofo-

nilla varustetuista kuulokkeista ja USB-väylään liitettävästä kaksikanavaisesta äänikor-

tista, johon oli liitetty älypuhelin, joka toimi musiikkisoittimena.

Prototyyppisovelluksen signaalinketju koostui kahdesta sisääntulokanavasta ja kah-

desta ulostulokanavasta sekä musiikkikanavan äänenvoimakkuutta ohjaavasta talkover-

komponentista. Toinen sisääntulokanavista oli tarkoitettu mikrofonisignaalille ja toinen

taustamusiikille. WebRTC:n signaalinkäsittelykomponenttien testauksessa saatujen tu-

losten perusteella, kaikki signaalinkäsittelykomponentit kytkettiin pois päältä musiikkika-

navan osalta. Mikrofonikanavan kohdalla kokeiltiin kaikkien signaalinkäsittelykompo-

nenttien toimintaa, mutta paras äänenlaatu saavutettiin, kun päälle jätettiin ainoastaan

AGC-komponentti. Toinen ulostulokanavista reititettiin ohjaajan kuulokkeisiin AudioDes-

tinationNode-rajapinnan avulla. Toinen puolestaan muunnettiin MediaStreamDestinati-

onNode-rajapinnan avulla osallistujille lähetettäväksi äänistriimiksi. Sovellukseen toteu-

tettiin myös rajapinta ulostuloäänistriimin saamiseksi, jonka avulla sen toimintaa kyettiin

testaamaan Sanoste Oy:n ohjaajan kuvapuhelusovelluksessa. Samalla tuli myös var-

mistettua, että ohjaajan kuvapuhelusovelluksessa käytetty OpenTok-kirjasto tarjoaa ra-

japinnan, joka mahdollistaa istunnossa käytettävän äänistriimin asettamisen.

Sovellukseen toteutettiin myös yksinkertainen käyttöliittymä, joka sisälsi vain testauksen

kannalta oleellisimmat käyttöliittymäkomponentit, eli mikrofoni- ja musiikkikanavien ää-

nilähteiden valitsimet ja äänentasomittarit molemmille ulostulokanaville. Lisäksi proto-

tyyppiin toteutettiin rajapinnat käyttöliittymäkomponenttien renderöintiä varten, jotta ne

saatiin näkyviin ohjaajan kuvapuhelusovelluksessa testattaessa. Sovellukseen toteutet-

tiin myös mikserin asetusten tallentaminen JSON-formaatissa selaimen localStorage-

tallennustilaan sekä mikserin alustaminen tallennettujen tietojen perusteella. Tällöin

mikseriasetukset voitiin asettaa ohjaajan kuvapuhelusovelluksen esikatselunäkymässä

ja lukea ne muistista mikserisovelluksen alustuksen yhteydessä varsinaiseen palvelun-

toteutusnäkymään siirryttäessä.

48

Talkover-toiminnon testaamiseksi prototyyppisovellukseen toteutettiin yksikertainen al-

goritmi, joka sääteli musiikkikanavan ulostuloa edustavan GainNode-objektin gain-para-

metrin arvoa puheaktiivisuuden, eli mikrofonikanavaan kytketyn AnalyserNode-objektin

puskurista laskettujen RMS-arvojen perusteella. Algoritmi tulkitsi puheaktiivisuuden al-

kaneeksi silloin, kun mikrofonisignaalin RMS-arvo ylitti -22 dBFS:ää. Puheaktiivisuuden

algoritmi tulkitsi päättyneeksi vasta, kun mikrofonisignaalin RMS-arvo oli pysynyt -28

dBFS:n alapuolella 500 millisekunnin ajan. Talkover-toiminnon testauksessa kokeiltiin

myös muita raja-arvoja, mutta edellä mainitut arvot vaikuttivat toimivan parhaiten silloin,

kun WebRTC:n AGC-komponentti oli kytketty päälle mikrofonikanavan osalta.

Puheaktiivisuuden aikana talkover-komponentin musiikkikanavaan kohdistaman vai-

mennuksen taso asetettiin -6 dBFS:ään, joka vaikutti olevan riittävä vaimennuksen taso

silloin, kun musiikkikanavan taso oli ennalta asetettu siten, että se oli korvakuulolta arvi-

oituna yhtä lujalla kuin puhe. Puheaktiivisuuden alkaessa musiikkikanavan gain-para-

metrin taso automatisoitiin laskemaan tavoitetasolle AudioParam-rajapinnan linear-

RampToValueAtTime()-funktion avulla 20 millisekunnin aikana. Tason palautuminen

aiemmalle tasolle puheaktiivisuuden päätyttyä asetettiin tapahtumaan huomattavasti hi-

taammin. Tämän avulla minimoitiin äänentason tarpeeton huojunta virkkeiden välissä

esiintyvien taukojen aikana.

Prototyyppisovellus osoittautui sen verran toimivaksi, että hyvin pienillä jatkokehitystoi-

menpiteillä siitä voidaan saada jalostettua tuotantokäyttöön soveltuva mikserisovellus.

Tarvittavia jatkokehitystoimenpiteet liittyvät lähinnä sovelluksen käyttöliittymään ja sen

toteuttamiseen vaadittavien rajapintojen toteuttamiseen. Varsinaiseen äänen miksaami-

seen liittyvä toiminnallisuus oli prototyyppisovelluksessa jo hyvällä tasolla.

49

7 Yhteenveto

Työn tuloksena syntyi selkeä näkemys siitä, miten eri WebRTC-signaalinkäsittelykompo-

nenttien toiminta vaikuttaa erilaisiin äänisignaaleihin, sekä siitä, minkä takia AEC-kom-

ponentti soveltuu heikosti Sanoste Oy:n palveluissa käytettäväksi. Tämän lisäksi tehdyn

tutkimustyön avulla opittiin, että WebRTC:n ruuhkanhallintaominaisuuden takia äänisig-

naalin käsittelyllä voi olla vaikutusta myös kuvan laatuun, mikäli signaalinkäsittely rasit-

taa ohjaajan tietokoneen toimintaa liiaksi. Sanoste Oy:n tapauksessa ruuhkanhallinta-

ominaisuuden vaikutus on onneksi pienempi TokBoxin Scalable Video -ominaisuuden

ansiosta.

Tehtyjen tutkimusten sekä työssä toteutetun mikserisovelluksen prototyypin perusteella

voidaan todeta, että eri äänilähteistä saatavia äänisignaaleja summaavan mikserisovel-

luksen toteuttaminen ja sen integrointi Sanoste Oy:n palveluntuottajan sovellukseen on

mahdollista. Sen lisäksi, että se on mahdollista, on se myös melko yksinkertaista nykyis-

ten Web API:en avulla.

Työssä toteutetun mikserisovelluksen prototyypin kaltaisella ratkaisulla voidaan myös

mahdollistaa vaikeakäyttöisten ja hintavien ulkoisten äänilaitteiden käytöstä luopuminen,

sillä kaikki ulkoisten miksereiden tarjoama toiminnallisuus voidaan toteuttaa ohjelmalli-

sesti mikserisovelluksessa.

Jatkokehitystoimenpiteinä voidaan mainita mikserisovelluksen prototyypin kehittäminen

tuotantokelpoiseksi. Tämä ei todennäköisesti vaadi kovin suurta työtä, sillä prototyypissä

toteutettu äänen miksaamiseen vaadittava toiminnallisuus toimi testauksissa todella hy-

vin. Vain käyttöliittymä ja sen toteuttamiseen vaadittavat rajapinnat vaativat lisätyötä.

Tulevaisuudessa voi myös olla tarpeen testata mikserisovelluksen toimivuutta eri se-

laimissa, sillä prototyyppisovelluksen toimintaa testattiin ainoastaan Google Chrome -

selaimessa, koska se on tällä hetkellä ainoa palveluiden toteutukseen suositeltu selain.

50

Lähteet

1 Overview: Real Time Protocols for Browser-based Applications - draft-ietf-rtcweb-overview-19. 2017. Verkkoaineisto. IETF. <https://tools.ietf.org/html/draft-ietf-rtcweb-overview-19>. Luettu 6.4.2019.

2 Architecture. Verkkoaineisto. <https://webrtc.org/architecture/> WebRTC. Luettu 6.4.2019.

3 WebRTC 1.0: Real-time Communication Between Browsers - W3C Candidate Recommendation. 2018. Verkkoaineisto. W3C. <https://www.w3.org/TR/webrtc/>. Luettu 19.8.2019.

4 Media Capture and Streams - W3C Candidate Recommendation. 2019. Verkko-aineisto. W3C. <https://www.w3.org/TR/mediacapture-streams/>. Luettu 19.8.2019.

5 SDP: Session Description Protocol - RFC 4566. 2006. Verkkoaineisto. IETF. <https://tools.ietf.org/html/rfc4566>. Luettu 19.8.2019.

6 Datagram Transport Layer Security Version 1.2. 2012. Verkkoaineisto. IETF. <https://tools.ietf.org/html/rfc6347>. Luettu 19.8.2019.

7 WebRTC Audio Codec and Processing Requirements. 2016. Verkkoaineisto. IETF. <https://tools.ietf.org/html/rfc7874>. Luettu 6.4.2019.

8 OpenTok Basics - The OpenTok platform. 2019. Verkkoaineisto. <https://tok-box.com/developer/guides/basics/#opentok-platform>. Luettu 19.8.2019.

9 OpenTok.js - Overview. 2019. Verkkoaineisto. TokBox Developers - Client SDKs. <https://tokbox.com/developer/sdks/js/#overview>. Luettu 19.8.2019.

10 OpenTok Basics - Events. 2019. Verkkoaineisto. TokBox Developers - Guides. <https://tokbox.com/developer/guides/basics/#events>. Luettu 19.8.2019.

11 OpenTok Basics - Connection. 2019. Verkkoaineisto. TokBox Developers - Guides. <https://tokbox.com/developer/guides/basics/#connection>. Luettu 19.8.2019.

12 Video Codecs. 2019. Verkkoaineisto. TokBox Developers - Guides. <https://tok-box.com/developer/guides/codecs/>. Luettu 19.8.2019.

13 RTP Payload Format for the Opus Speech and Audio Codec. 2015. Verkkoai-neisto. IETF. <https://tools.ietf.org/html/rfc7587>. Luettu 19.8.2019.

51

14 Yousef O. Sharrab and Nabil J. Sarhan. 2012. Detailed Comparative Analysis of VP8 and H.264. Electrical and Computer Engineering Department & Wayne State Media Research Lab Wayne State University, Detroit. Conference paper.

15 Md Jahangir Alam, Patrick Kenny, Pierre Ouellet, Themos Stafylakis, Pierre Du-mouchel. 2014. Supervised/Unsupervised Voice Activity Detectors for Text- de-pendent Speaker Recognition on the RSR2015 Corpus. Centre de recherche in-formatique de Montréal, Montréal, Canada. <https://www.crim.ca/perso/pat-rick.kenny/Alam_odyssey2014.pdf>

16 Jens Schröder, Jörn Anemüller, Stefan Goetze. 2016. Performance Comparison of GMM, HMM and DNN Based Approaches for Acoustic Event Detection Within Task 3 of The DCASE 2016 Challenge. <https://www.cs.tut.fi/sgn/arg/dcase2016/documents/workshop/Schroeder-DCASE2016workshop.pdf>

17 Umar Iqbal Choudhry, JongWon Kim and Hong Kook Kim. A Highly Adaptive Acoustic Echo Cancellation Solution for VoIP Conferencing Systems. Conference paper.

18 RNNoise: Learning Noise Suppression. 2017. Verkkoaineisto. Mozilla and Xiph.Org. <https://people.xiph.org/~jm/demo/rnnoise/>. Luettu 19.8.2019.

19 Web Audio API - W3C Candidate Recommendation. 2018. Verkkoaineisto. W3C. <https://www.w3.org/TR/webaudio/>. Luettu 19.8.2019.

20 MediaStreamAudioSourceNode. 2019. Verkkoaineisto. Mozilla Developer Net-work. <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudi-oSourceNode>. Luettu 19.8.2019.

21 MediaStreamAudioDestinationNode. 2019. Verkkoaineisto. Mozilla Developer Network. < https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudi-oDestinationNode>. Luettu 19.8.2019.