Wat moet je als je geen Ziggo hebt of het niet je voorkeur heeft om via een reguliere televisie-uitzending naar de formule 1-races te kijken, maar toch live de prestaties van Max Verstappen in volle glorie wilt zien? Sinds een paar jaar is er een mogelijkheid in de vorm van de officiële, betaalde streamingdienst van de formule 1: F1 TV Pro. Voorheen werden de streams van de races aangeboden met lage framerates van maximaal 25 beelden per seconde, maar sinds dit jaar zijn de races via de streamingdienst met de reguliere 50fps te bekijken.
Deze streamingdienst is echter nog geen volledig uitontwikkeld product dat op alle platforms al vlekkeloos werkt en een scala aan opties aan zijn gebruikers voorschotelt. Dat heeft geleid tot diverse onofficiële apps van derden die in feite de officiële app nabootsen en vaak zelfs een betere ervaring bieden, waarbij overigens wel gewoon een F1 TV-abonnement noodzakelijk is.
De 36-jarige .Net-ontwikkelaar Rob van der Pol is de maker van zo'n app, genaamd Race Control. Dit is een Windows desktopclient voor F1 TV. De app maakt gebruik van de officiële api en is onder meer interessant voor power users die bijvoorbeeld de officiële racestream in beeld willen hebben, maar tegelijk ook verschillende on-boardcamerabeelden en andere data willen zien. Tweakers sprak met hem over zijn app Race Control, wat er allemaal mee mogelijk is, waarom hij deze heeft ontwikkeld en wat daar allemaal bij kwam kijken.
Hoe kwam je erop een eigen app te ontwikkelen?
"Eigenlijk heb ik Race Control als hobbyproject opgepakt, vooral vanwege het gebrekkige platform dat door de formule 1 zelf wordt geleverd, en dankzij corona heb ik wat vrije tijd over. Dan begin je dit soort projectjes. In eerste instantie heb ik het gewoon ontwikkeld voor mezelf. Ik heb een dure televisie beneden staan (een LG-oled) en er was geen mogelijkheid om daar formule 1 op te krijgen zonder mijn laptop eraan te hangen. Er waren in het begin al wat kleine opensourceprojectjes en toen dacht ik: dat moet ik ook kunnen en ben aan de slag gegaan. Het is nooit echt mijn bedoeling geweest om de app heel groot te laten worden. Ik had hem bij mijn schoonouders geïnstalleerd op de laptop en bij mijn schoonzusje, zodat zij ook kunnen kijken. Zo begon het een beetje."
Hoeveel gebruikers zijn er nu ongeveer?
"Via het forum van Tweakers en Reddit kwamen er steeds meer gebruikers bij. Hoeveel er nu precies zijn, weet ik niet, maar het aantal downloads is de tienduizend gepasseerd. Daar zitten ook updates van nieuwe versies tussen, maar ik schat dat enkele duizenden mensen het gebruiken. Op GitHub kun je heel leuk zien waar de traffic vandaan komt. Dat varieert van Reddit en Tweakers tot Google en Twitter."
De officiële app vond je niet afdoende?
"De formule 1 heeft een Android-app, maar die is alleen voor mobiel en tablets. Ik had ooit een Amazon FireStick en die is ook Android-based. Daar kon ik het op starten via sideloaden, maar je kon niet inloggen, dus werkte het gewoon niet. Ik had nog een Chromecast in een lade liggen en ging kijken of dat werkte, maar het enige wat ze hadden, was de website en de Android- of iOS-app. De website casten via Chrome werkt wel, maar is een soort screengrab en dan heb je geen native framerate en audiovertraging. Dus toen heb ik het zelf maar gedaan, om dus de stream te kunnen casten. Toen ben ik gaan kijken wat er nog meer mogelijk is en ben ik er wat serieuzer mee aan de slag gegaan. Ik heb hier twee monitoren staan en wilde op het ene scherm de stream van de race zelf en op het andere de on-boardcamera van Max Verstappen, de live timing, de driver tracker en het pitlanekanaal: dat alles in een mooi 4x4-gridje.
Hoe krijg je dat voor elkaar? Door het zelf te ontwikkelen, want via de officiële website moet je dan pakweg vijf tabbladen openen, er op de een of andere manier voor zorgen dat de browser niet meer zichtbaar is en proberen het een beetje netjes te krijgen. Dat is haast niet te doen en het moet dan elk weekend opnieuw, zowel tijdens de race als tijdens de kwalificatie. Dat schiet niet op. Dus toen bedacht ik om één keer de lay-out te maken zoals je die wil hebben. Die sla je op en bij de volgende race kun je het openen en is het meteen goed."
Hoe bevalt het werken met de api van de F1 TV?
"Dit seizoen was het de uitdaging om de app op de nieuwe api aan te sluiten. Die is dit seizoen helemaal op de schop gegaan. De oude api was heel gestructureerd en daar kon je alle gegevens uithalen: welke races er waren, welke sessies, de tijden en de datums. Dat werkte supergoed. Toen hebben ze een nieuwe api geïntroduceerd die totaal niet gestructureerd is en waarbij je heel veel moeite moet doen om dezelfde informatie eruit te krijgen. Dat is vervelend, maar je moest wel, want je wilde de nieuwe streams gebruiken. Nota bene de eigen Android-app van F1 TV zit nog op de oude api, dus nog met de oude streams met 25fps. Het is alleen de website die al op de nieuwe api zit."
De nieuwe api is dus geen gestructureerde bron van gegevens meer?
"Het is nu eigenlijk een pagina waarop het seizoen wordt weergegeven. Het is meer de lay-out van de pagina die ik terugkrijg, in plaats van de harde data. Dan zie je een header met een kopje en een subtekstje en drie plaatjes met de laatste races. Zo is het nu ongeveer gestructureerd. Dat maakt het irritant. Het is nu een kwestie van reverse-engineeren. Er zit een generieke zoekfunctie in, al heeft deze een limiet van honderd resultaten en er is geen paging-mogelijkheid. Deze zoekfunctie gebruik ik voornamelijk om per seizoen de races te achterhalen en per races de verschillende sessies. Dat staat er allemaal pas op zodra de sessie of race start. Bij de oude api waren die sessies al een paar weken van tevoren netjes gepland. Het is er dus niet beter op geworden, maar goed, je hebt nu de 50fps. Dat voegt veel toe. Het grootste voordeel is dat het nu een stuk stabieler is. Vorig seizoen had je nog weleens een paar races waarbij de streams vastliepen of de kwaliteit terugschakelde en het heel korrelig werd. Dat is dit jaar beter.
Hoe gaat dat reverse-engineeren ongeveer in zijn werk?
"Je hebt de website en de achterkant. Wij praten rechtstreeks met de achterkant, maar er is geen documentatie. Het is niet illegaal wat we doen, denk ik, maar het is niet ondersteund en ze zullen er misschien niet heel blij mee zijn dat we dit soort tooltjes maken. Je moet uitvogelen wat mogelijk is en wat je voor informatie moet meesturen, zoals http-headers of sleutels. Als je bijvoorbeeld ingelogd bent, krijg je een token waarmee je de streams kunt opvragen, want je moet een betaald abonnement hebben. Het is trial-and-error, gewoon kijken wat er gebeurt.
Dat is eigenlijk de enige manier waarop je het kunt doen. Je opent de website, je logt in en je kijkt wat er gebeurt. Bijvoorbeeld met een tool als Fiddler, waarmee je al het http-verkeer kunt zien dat vanuit jouw pc naar een website gaat. Ik ga dan kijken wat er gebeurt als ik inlog en een stream aanklik. Dan ga ik kijken of dat in mijn applicatie ook zo kan. Op GitHub zie ik dan allemaal van die Issues ontstaan, waarbij verschillende mensen proberen uit te vogelen of het mogelijk is om de nieuwe api te gebruiken. Uiteindelijk kom je er dan vaak samen uit. Het zijn in feite concurrerende projectjes, maar je werkt met hen samen."
Ontdekte je nog iets aparts tijdens het onderzoeken en proberen?
"Ik kwam erachter dat het op het oude platform van vorig jaar ook zonder abonnement mogelijk was om"Ik had onbewust een soort illegale tool gemaakt"
gewoon de streams te bekijken. Ik had mijn tool gemaakt en dat werkte goed. Ik had toen geen checks ingebouwd of je een geldig abonnement had. Dus ik logde in en stuurde het token mee. Je had een account nodig, maar het bleek dat je gewoon zonder abonnement kon inloggen en alle streams kon bekijken. Het was niet goed genoeg beveiligd. Ik had onbewust een soort illegale tool gemaakt. Toen heb ik het er in het topic op Tweakers met een moderator over gehad wat hiermee te doen. Ik heb vervolgens zelf een check ingebouwd om te controleren of iemand een geldig abonnement had. Dat geeft aan hoe slecht dat geregeld was. Het is zo'n groot bedrijf met zoveel geld, dat moet toch gewoon goed zitten. De nieuwe api is veilig, dus dat is nu opgelost."
Waarom heb je een Windows-app gemaakt en niet bijvoorbeeld een Android-app?
"Mijn eerste ingeving was om een Android-app te maken. Dat heb ik nog nooit eerder gedaan. Ik wilde weleens een mobiele app maken die hetzelfde doet als de officiële app en waarmee ik naar de Chromecast kan casten. Ik ben echter .Net-ontwikkelaar en kan wel voor Android ontwikkelen, maar dat is lastig. Ik was ook steeds meer van plan om naar de races op de desktop te kijken, omdat je daar meer dan één scherm kunt gebruiken. Dus besloot ik een Windows-applicatie te maken en daarbij C# als programmeertaal te gebruiken. Dat ken ik en dat maakte de drempel voor mij wat lager."
Heb je plannen om meer platforms te gaan ondersteunen?
"Het plan is om uiteindelijk multiplatform te gaan, dus ook macOS en Linux te ondersteunen. Dat is redelijk nieuw in de .Net-wereld, maar het moet kunnen. Daar wil ik in de loop van dit seizoen naar kijken. Negentig procent van de code is voor elk platform hetzelfde. Het is nu een redelijk simpele Windows-applicatie. Als ik die stap naar multiplatformondersteuning zet, wil ik ook de UI wat gelikter maken en dat meteen meenemen voor de andere platforms. In ieder geval komt vaak de vraag terug of de app ook op Mac draait. Dat is mijn doel voor dit seizoen, om dat rustig op de achtergrond te ontwikkelen. Hopelijk heb ik dan aan het einde van het seizoen een nieuwe versie daarvoor."
Race Control ondersteunt een interne speler, VLC en MPV. Was het eenvoudig dat in te bouwen?
"Voor de interne speler gebruik ik de .Net-library van VLC media player, waarmee de speler in een applicatie is te integreren. Ik heb wel wat work-arounds moeten gebruiken om het werkend te krijgen, omdat ie soms de streams niet accepteerde. Het probleem is dat als VLC niet werkt, je dan ook niets kunt. Je bent ervan afhankelijk dat het werkt. Ik kan niet die VLC-code aanpassen, al is het natuurlijk open source. De VLC-library wordt gebruikt voor het weergeven van beeld en geluid van de stream. De component eromheen, dus de speler met alle controls, is wat ik heb gemaakt, met ook wat handige knoppen, zodat je een mooi 4x4-raster kunt krijgen. De lay-out kan ik opslaan en weer openen, want het is onderdeel van de applicatie, in plaats van dat het via een externe speler gaat."
Wat is in jouw ogen de unique selling point van Race Control?
"Wat mij betreft is dat dat je je eigen lay-out kunt maken zoals je die zelf wilt hebben. Je slaat het op en de volgende keer staan alle streams met een druk op de knop weer precies waar je wilt. Ik zag weleens foto's voorbijkomen van een gebruiker die bijvoorbeeld drie schermen gebruikte en in totaal negen streams tegelijk had openstaan. Met de officiële site lukt dat niet. Het casten, en dus de Chromecast-ondersteuning, is ook een belangrijk element, maar dat kan inmiddels ook met de F1 TV-website. En dat je een robuuste mediaplayer hebt met een goede kwaliteit. Behalve voor VLC is er ook ondersteuning voor MPV, ook een opensourcemediaspeler met een goede kwaliteit."
Kostte het veel moeite je app in de Microsoft Store te krijgen?
"Het verbaasde me dat het lukte, want je moet je applicatie uploaden, allerlei formulieren invullen en omschrijvingen geven. Ik dacht: ik stuur het in en zie wel wat er gebeurt. Ik kreeg pas nog feedback van iemand van Microsoft die de app zat te testen. Dat verbaasde me, want er zijn honderdduizenden apps in die store, hoewel het misschien steekproefsgewijs gaat. Ik ben blij dat ie sinds eind vorig jaar in de store staat, want dat maakt het updateproces gemakkelijker en zo wordt een nieuwe versie automatisch bij gebruikers geïnstalleerd. Je krijgt dan ook geen bugmeldingen meer van gebruikers die op een oudere versie zitten, hoewel er nog genoeg mensen zijn die gewoon het .msi-bestand van GitHub downloaden. Zij krijgen dan zo'n waarschuwing van SmartScreen of je het zeker weet en dat er geen certificaat aanwezig is. Dat is ook het voordeel van de Microsoft Store, dat er geen gekke waarschuwingen meer volgen."
Officiële afbeeldingen van F1 TV
Levert de app je financieel nog wat op?
"Er is een donatieknop op de GitHub-pagina en er zijn een paar mensen die mij met een maandelijks bedrag sponsoren. Dat zijn leuke kleinigheidjes, want het is toch een beetje waardering voor de vrije tijd die ik erin stop. Het is echter niet zo dat ik het daarvoor doe en ik ga ook niet actief om donaties vragen. Ze mogen er uiteindelijk ook mee doen wat ze willen; het is open source.
Eigenlijk heb ik de donatieoptie oorspronkelijk op de pagina gezet omdat ik een certificaat wilde kopen, zodat ik van die waarschuwingen af zou zijn. In je code kun je dan signen en dan krijg je niet meer die Windows SmartScreen-meldingen en -waarschuwingen dat het gevaarlijk is. Zo'n certificaat is best duur, dus wilde ik kijken of er mensen waren die me daarvoor wilden sponsoren. Nu het in de Microsoft Store staat, is het eigenlijk niet meer nodig."
Lukt het in de app om verschillende streams gelijk te laten lopen?
"Dit is de grootste uitdaging om het goed te krijgen. Ik heb pogingen gedaan om, als alle streams lopen, de timestamp van de streams gelijk te zetten. Dan nog zie je dat er soms afwijkingen in zitten. Dat is inherent aan hoe ze het bij de formule 1 doen. Bij de Moto GP schijnt hier een oplossing voor te zijn, al weet ik niet hoe dat werkt. Bij de formule 1 moet je soms gewoon pauzeren en, bijvoorbeeld vlak voordat de race start, kun je het aan de hand van de stoplichten redelijk synchroon krijgen. Ik ben ermee bezig dat verder te verbeteren.
Dit is een van die dingen waarvan je je afvraagt of ze daar niet over hebben nagedacht. Als je de mogelijkheid biedt om op de pc verschillende streams te bekijken, dan wil je toch ook gewoon dat het synchroon loopt. Daar kan ik alleen niet veel aan doen, ben ik bang. De huidige functie die ik heb ingebouwd, is een knop waarmee het tijdstip van de stream wordt gesynchroniseerd met de openstaande vensters. Dan is het hopen dat het allemaal gelijkloopt. Het is voor nu niet meer dan een work-around."
Heeft de formule 1 nog niet op de stoep gestaan met juridisch bezwaren?
"Ik vraag me af of dat nog gaat gebeuren, maar tot nu toe heb ik nog geen cease-and-desist-brief op de deurmat gehad. Misschien weten ze niet eens dat de app bestaat of vinden ze het prima. Ik heb nog niets gehoord en hoop dat zo te houden. In dit soort gevallen is er vaak negentig procent kans dat ze zeggen: we hebben liever niet dat je dit doet. Aan de andere kant, wat kunnen ze doen? Ze kunnen het nog verder dichttimmeren, maar je kunt altijd achterhalen wat er onder water gebeurt, dat is het mooie met zo'n api. Als je telefoon of website het kan streamen, kan ik ook een app maken die het nabootst, tenzij ze strikte digital rights management-maatregelen gaan nemen. De formule 1 kan het echter ook zien als iets positiefs, dat er hobbyisten en liefhebbers zijn die zo serieus met de sport omgaan.
Toen ik ontdekte dat je bij de vorige versie gratis kon streamen, heb ik nog overwogen om ze te mailen dat ze een gigantisch lek hadden in hun systeem. Uiteindelijk heb ik dat niet gedaan. Zij moeten er tenslotte voor zorgen dat het goed is. Ik ga geen slapende honden wakker maken, straks blokkeren ze nog mijn app, en dat lek is nu toch al opgelost. Ik ben nog wel van plan om het F1-logo uit mijn app te halen, anders krijg ik daar nog gezeur over."