Blog

Hur bakgrundsuppspelning av YouTube faktiskt fungerar på iOS

Av talavo5 min läsning

En av de första sakerna folk provar i talavo är att låsa telefonen medan ett video spelas — och bli lite förvånade när ljudet fortsätter. I vanliga iOS Safari skulle det inte göra det. Här är vad som faktiskt händer under huven, eftersom den ärliga versionen är mer intressant än “vi slog på en inställning”.

Begränsningen

talavo renderar sidor i en WKWebView — samma WebKit-motor som Safari använder, vilket är den enda webbläsarmotor Apple tillåter på iOS. WebKit är medvetet aggressiv med bakgrundshantering: när webbvyn lämnar förgrunden stryper systemet timers och pausar mediapipelinen. Det är bra för batteriet och förödande för någon som bara vill ha en poddliknande video att fortsätta spela med skärmen avstängd. YouTube reserverar oavbruten bakgrundsuppspelning för Premium.

Hålla pipelinen vid liv

Tricket är inte en hemlig flagga — det är att vägra låta mediesessionen dö. talavo fångar upp sidans mediesession och håller, när systemet försöker pausa uppspelningen vid bakgrundsläge, det underliggande elementet “igång” i stället för att låta WebKit riva ner det. I praktiken innebär det att fånga pausen som OS tvingar fram och omedelbart hålla elementet tickande — med nästan noll uppspelningshastighet om det behövs — så att ljudpipelinen förblir varm och återupptas rent i stället för att skräpsamlas.

Utöver det kopplar talavo de vanliga iOS-uppspelningskontrollerna (låsskärm, Kontrollcenter, AirPods) till det aktiva videon, så att pausa, spela och söka beter sig som en inbyggd mediaapp snarare än en webbsida som råkar ha ljud.

Den flytande minispelaren

Bakgrunds-ljud är halva historien. Den andra hälften är den flytande minispelaren: ett bild-i-bild-fönster som frigör videon så att den fortsätter spela medan du läser något annat i en annan flik — ingen Premium-prenumeration krävs. Det är samma idé som system-PiP, tillgänglig för vilken video som helst som talavo kan spela.

Den ärliga varningen

Det här är en lösning ovanpå WebKit, inte ett privat API. Det innebär två saker: den håller sig inom vad webbplattformen exponerar, och den kan påverkas när YouTube omstrukturerar sina spelardetaljer. När det händer åtgärdar vi det — det är det mesta av vad en punktversion som de i vår changelog gör. Fördelen med att bygga på den riktiga webbläsarmotorn är att resten av webben fortsätter fungera normalt medan detta körs.