Как всъщност работи фоновото възпроизвеждане на YouTube на iOS
Едно от първите неща, които хората пробват в talavo, е да заключат телефона си, докато видеото се пуска — и да са леко изненадани, когато аудиото продължава. В стандартния iOS Safari това не би се случило. Ето какво се случва в действителност отдолу, защото честната версия е по-интересна от „включихме настройка“.
Ограничението
talavo рендерира страници в WKWebView — същия WebKit двигател, който Safari използва, и единственият браузърен двигател, който Apple позволява на iOS. WebKit е умишлено агресивен по отношение на фоновия режим: когато уеб изгледът напусне предния план, системата ограничава таймерите и спира медийния конвейер. Това е чудесно за батерията и ужасно за някой, който просто иска видео в стил подкаст да продължи да се пуска с изключен екран. YouTube сам по себе си запазва непрекъснатото фоново възпроизвеждане за Premium.
Поддържане на конвейера активен
Трикът не е таен флаг — той е отказ да се остави медийната сесия да умре. talavo прехваща медийната сесия на страницата и когато системата се опита да паузира възпроизвеждането при преминаване на заден план, поддържа основния елемент „работещ“, вместо да позволи на WebKit да го унищожи. На практика това означава прихващане на паузата, наложена от ОС, и незабавно поддържане на елемента активен — при почти нулева скорост на възпроизвеждане, ако е необходимо — така че аудио конвейерът остава топъл и се възобновява чисто, вместо да бъде изчистен.
Освен това talavo свързва стандартните iOS контроли за текущо пускане (заключен екран, Контролен център, AirPods) с активното видео, така че пауза, пускане и превъртане се държат като нативно медийно приложение, а не като уеб страница, която случайно има звук.
Плаващият мини плейър
Фоновото аудио е половината от историята. Другата половина е плаващият мини плейър: прозорец картина в картина, който откача видеото, така че продължава да се пуска, докато четеш нещо друго в друг раздел — без Premium абонамент. Идеята е същата като системния PiP, предложена за всяко видео, което talavo може да пусне.
Честната уговорка
Това е заобиколно решение, наслоено върху WebKit, а не частен API. Това означава две неща: остава в рамките на това, което уеб платформата предоставя, и може да бъде засегнато, когато YouTube преразпредели вътрешните компоненти на плейъра си. Когато това се случи, го поправяме — това е по-голямата част от това, което прави малка версия като тези в нашия changelog. Предимството на изграждането върху реалния браузърен двигател е, че останалата част от мрежата продължава да работи нормално, докато това се изпълнява.