Codecs
Dit artikel gaat in op codecs, de manier waarop die mobiel en op het vastnet bruikbaar zijn, en hoe ze de geluidskwaliteit verbeteren kunnen.
Inhoud
Alternatieven voor GSM
Een telefoongesprek wordt normaalgesproken gecomprimeerd. GSM is een voorbeeld van zo'n codec, en die is jaaaaren geleden als standaard ingebouwd in het telefoonnetwerk. Het is een codec waar onderhand flink wat op aan te merken valt:
- GSM is een zeer gesloten codec, met patentgedonder en geheimhouding
- GSM is bepaald geen moderne codec, er is veel meer te bereiken in de bitrate
- GSM biedt geen versleutelingsmogelijkheden
Er zijn hele goede codecs ontwikkeld, waaronder een aantal die zich lenen voor encryptie en decryptie die niet te snel mag plaatsvinden.
G.711, het zusje van GSM
In het vaste telefoonverkeer is de standaard niet de GSM codec, maar G.711 ofwel uLaw of A-Law. Dit is afkomstig uit de ISDN-wereld. Zover ik weet is de hele POTS backbone ermee opgezet, en het is dus ook geen wonder dat VoIP technologie vaak op G.711 gebaseerd is. Hoewel de codec openbaar is en niet beperkt wordt, is het beslist niet modern en wordt het ook niet versleuteld.
G.722, het stiefzusje van GSM en G.711
Tegenwoordig zie je dat "HD Audio" in opgang is in de VoIP-wereld. Klinkt heel wat, nietwaar? Inderdaad is de gesprekskwaliteit een heel stuk beter dan G.711 en dat in dezelfde bitrate. Maar het is verre van modern -- het is een codec die 25 jaar oud is, en iedereen heeft zitten wachten tot de patenten erop verlopen waren. Zucht... dat doen we in de open source wereld duidelijk beter.
OPUS en Codec2 (en Speex)
Open codecs die op dit moment het beste geschikt zijn voor VoIP, zijn OPUS en Codec2. OPUS is dusdanig compact dat het Speex voorbijstreeft, met behoud van gesprekskwaliteit. Speex is hooguit nog interessant vanuit een behoeft aan compatibility met oudere software.
OPUS is geschikt voor een grote range aan toepassingen, met een kwaliteit die zich met mono MP3 vergelijkt in maar 64 kbps; alleen is OPUS niet het summum qua extreem lage bitrates. Op dat punt is Codec2 de leidende codec. Codec2 doet ook meer concessies aan de geluidskwaliteit dan OPUS, en specialiseert zich op spraak, doordat het de mondvorm als het ware beschrijft in een gecomprimeerde vorm van zo'n 1200 bps. Het heeft niet extreem veel last van omgevingsgeluiden, maar meerdere sprekers tegelijk vallen buiten de boot. Als je erin zingt dan worden noten afgerond op valse toonhoogtes, en een hoge C is out-of-range en komt er als kikkergekwaak uit -- maar voor normale spraak is het uitstekend toegerust.
CSD: Andere codecs op je mobiel
Als je een GSM-call opzet dan krijg je die met codec en al. Geen keuze mogelijk. Via UMTS kun je weliswaar een VoIP-gesprek opzetten, maar dan zit je met een stevige latency en een enorme jitter, wat funest is voor de gesprekskwaliteit.
De gouden middenweg is Carrier Switched Data, een voorloper van GPRS die nog altijd beschikbaar is op mobiele netwerken. Dit is een realtime verbinding, vergelijkbaar met die voor een GSM-gesprek, maar je krijgt hem als dataverbinding beschikbaar. Je kunt dan een eigen codec inschieten, en die wordt in een voorspelbaar tempo afgeleverd. Dit bitrate is niet heel hoog, maar de moderne codecs kunnen er prima doorheen. Bovendien heeft Rick een protocol uitgeknobbeld dat mengen met een bescheiden hoeveelheid data mogelijk maakt -- bijvoorbeeld voor chat.
De setup van CSD zou op een gangbare mobiel moeten gebeuren met native code. Het gebruikstarief is in principe gelijk aan dat van een GSM-call, dus beprijzing per minuut.
G.711+data: Andere codecs op het vastnet
Ook op het vastnet is het mogelijk een andere codec te kiezen. Als je namelijk weet dat G.711 een floating point getal maakt van elke sample, dan snap je dat de minst waardevolle bit kan worden misbruikt voor data, en dat daarmee opportunistisch is te polsen of beide kanten bereid zijn over te schakelen. Je hoeft dan niet via andere methodes vast te stellen dat zoiets geaccepteerd wordt, en je bent niet afhankelijk van de vraag of dat afhankelijk is van het toestel dat opneemt. Ook hiervoor heeft Rick een protocol uitgeknobbeld dat (uiteraard) prettig aansluit op de CSD-variant.
End-to-end encryptie
Een grote duh is natuurlijk dat langs deze weg ook encryptie te bereiken is -- wie een codec onderhandelt kan ook meteen sleutels uitwisselen.
Studentenopdrachten
De kans is groot dat je in je opleiding opdrachten moet doen om bepaalde vaardigheden te ontwikkelen. Dat kun je minimalistisch aanpakken door voorgekauwde standaardopdrachten te doen, maar er zijn ook genoeg studenten die liever een wat grotere, "echte" opdracht doen en iets zinvols nalaten. Docenten vinden dat soort initiatieven vaak alleen maar leuk.
Als jij zo'n opdracht zou willen doen binnen de hier geschetste richting, laat dat dan eens weten. Rick heeft titels Dr.Ir. en dat kan helpen hem als begeleider erkend te krijgen binnen je opleiding. Rick is bereid open source ontwikkelwerk in deze richting inhoudelijk aan te sturen -- mits open source, mits in een geschikte programmeercontext -- maar een extra eis bovenop het halen van je vak is dan wel dat je iets werkbaars aflevert. Als je dit redelijk en interessant vindt neem dan vooral contact op. Dat kan via Limesco of rechtstreeks bij OpenFortress. We zouden het werk vermoedelijk in een ARPA2 project vormgeven, omdat het goed past bij de idealen van InternetWide.