Blog

Kako reprodukcija YouTube videa u pozadini zapravo funkcionira na iOS-u

Piše talavo5 min čitanja

Jedna od prvih stvari koje ljudi isprobaju u aplikaciji talavo je zaključavanje telefona dok se video reproducira — i blago iznenade kad zvuk nastavlja. Na standardnom iOS Safari ne bi nastavio. Evo što se zapravo događa ispod, jer je iskrena verzija zanimljivija od „uključili smo jednu postavku”.

Ograničenje

talavo prikazuje stranice u WKWebView — istom WebKit pogonu koji koristi Safari, koji je jedini pogon preglednika koji Apple dopušta na iOS-u. WebKit je namjerno agresivan u pogledu pozadinskog rada: kada web pogled napusti prednji plan, sustav usporava tajmere i suspendira medijski cjevovod. To je odlično za bateriju i strašno za nekoga tko želi video nalik podcastu da nastavi s reprodukcijom uz isključen zaslon. YouTube sam rezervira neprekinutu pozadinsku reprodukciju za Premium.

Održavanje cjevovoda živim

Trik nije tajna zastavica — to je odbijanje da medijska sesija umre. talavo presreće medijsku sesiju stranice i, kada sustav pokuša pauzirati reprodukciju pri prelasku u pozadinu, zadržava temeljni element „u radu“ umjesto da dopusti WebKitu da ga uništi. U praksi to znači hvatanje pauze koju OS nameće i odmah zadržavanje elementa aktivnim — pri gotovo nultoj brzini reprodukcije ako je potrebno — kako bi audio cjevovod ostao topao i nastavio čisto umjesto da bude oslobođen iz memorije.

Povrh toga, talavo povezuje standardne iOS kontrole za reprodukciju (zaključani zaslon, Upravljački centar, AirPods) s aktivnim videom, tako da pauza, reprodukcija i premotavanje funkcioniraju kao nativna medijska aplikacija, a ne kao web stranica koja se slučajno čuje.

Plutajući mini-player

Pozadinski zvuk je pola priče. Druga polovica je plutajući mini-player: prozor slike u slici koji odvaja video kako bi nastavio s reprodukcijom dok čitate nešto drugo u drugom tabu — nije potrebna Premium pretplata. Ista ideja kao sistemski PiP, dostupna za bilo koji video koji talavo može reproducirati.

Iskreno upozorenje

Ovo je zaobilazno rješenje postavljeno na vrhu WebKita, nije privatni API. To znači dvije stvari: ostaje unutar onoga što web platforma izlaže, i može biti pogođeno kada YouTube preuredi unutarnje dijelove svog playera. Kada se to dogodi, mi to popravimo — to je većina onoga što radi točkasto izdanje poput onih u našem changelogu. Prednost gradnje na pravom pogonu preglednika jest da ostatak weba nastavlja normalno funkcionirati dok ovo radi.