Vad en nedladdningshanterare gör som en webbläsare inte gör
En fyra gigabyte stor fil, nittio procent klar, och sedan ett telefonsamtal — eller bara en låst skärm — och den är borta. Det här är det vanligaste klagomålet om nedladdning på iOS, och det är ingen bugg. Det är operativsystemet som gör exakt vad det designades för att göra, och anledningen till att en separat appkategori finns.
- 30s Ungefär hur länge en pausad app fortsätter köras innan iOS stoppar den
- 206 HTTP-statusen som gör återupptagning möjlig överhuvudtaget
- 1 byte Hur mycket av en korrekt återupptagen överföring som laddas ner igen
Varför överföringen stannar när du byter app
iOS låter inte en app fortsätta arbeta bara för att den skulle vilja det. När du lämnar en app pausas den inom sekunder, och en pausad app har ingen CPU-tid, inga nätverkssocklar och inget sätt att märka att den har stoppats. Allt den höll i minnet finns fortfarande kvar, men fryst — och om systemet behöver minnet avslutas appen helt utan att bli tillsagd.
En nedladdning som körs över en vanlig anslutning inuti appen tar därför slut vid hemgesten. Vissa appar döljer det här genom att be om några extra sekunders bakgrundstid, vilket är varför en nedladdning ibland överlever att bli bakgrundskörd exakt så länge det tar dig att märka att den inte gjorde det.
Det rätta svaret skiljer sig till sin art. iOS erbjuder en bakgrundsöverföringstjänst: du ger systemet en lista med URL:er och destinationer, och systemet gör nedladdningen själv, i sin egen process, på sitt eget schema. Din app kan vara pausad, avslutad, eller inte köras alls — överföringen fortsätter, och appen startas om i bakgrunden när det finns något att rapportera. Det är mekanismen bakom varje nedladdning som överlever en låst skärm, och att använda den är ett designbeslut en app tar från början, inte en inställning du kan slå på.
De fyra mekanikerna som avgör om en nedladdning överlever
- Intervallförfrågan
- En HTTP-förfrågan som ber om byte 5 000 000 och framåt i stället för hela filen. Om servern svarar
206 Partial Contentär återupptagning från mitten möjlig; om den svarar200 OKoch börjar från början är den det inte — filen måste hämtas igen från noll. - Parallella anslutningar
- Att dela upp en fil i flera intervall och hämta dem samtidigt. Det hjälper eftersom en enda anslutning ofta är strypt av servern eller begränsad av tur-och-retur-latens, inte för att din internetuppkoppling blir snabbare med fler öppna socklar.
- Bekräftad position
- Hur mycket av filen som säkert är skriven till disk, till skillnad från fortfarande på väg. En nedladdning som återupptas från den senast bekräftade byten är korrekt; en som återupptas från vad den *tror* den tagit emot skapar en korrupt fil som bara avslöjar sig timmar senare.
- Bakgrundssession
- Den systemdrivna överföringen beskriven ovan. Den startar långsammare, kan inte ges godtycklig anpassad logik, och den är det enda som fortsätter köras när appen inte gör det.
Varför en nedladdning misslyckas, och hur varje typ av misslyckande ser ut
De flesta rapporter om "fastnad nedladdning" är en av dessa fem, och de är lätta att skilja åt när du känner till formen.
| Vad du ser | Vad som faktiskt händer | Vad som hjälper |
|---|---|---|
| Stannar i samma stund du lämnar appen | Överföringen kördes i appens process, inte i en bakgrundssession. | Inget du kan göra utifrån — det här är en apputvecklingsfråga. |
| Startar om från 0 % varje gång | Servern ignorerar intervallförfrågningar, så det finns inget sätt att fortsätta från mitten. | En stabil anslutning, eller en mindre fil. Vissa värdar tillåter intervall bara för signerade länkar. |
| Misslyckas efter några minuter, upprepade gånger | Länken har gått ut. Många värdar utfärdar URL:er giltiga i fem eller tio minuter. | Hämta länken igen från dess sida och börja om; den gamla kommer aldrig fungera. |
| Laddar ner snabbt, sedan öppnas inte filen | Det som kom fram var en HTML-felsida eller en inloggningssida med ett videofilnamn. | Kontrollera storleken — en "film" på 14 KB är en webbsida. Inspektera länken innan du binder dig till den. |
| Väldigt långsam trots en snabb anslutning | Strypning per anslutning på serversidan. | Fler parallella anslutningar, om servern tillåter dem. Om den begränsar per IP-adress i stället för per sockel hjälper inget. |
När det inte finns någon fil att ladda ner alls
En stor del av videon på webben levereras inte som en fil. Den levereras som HLS — en .m3u8-spellista som listar hundratals små segment, några sekunder vardera, ofta på flera kvalitetsnivåer så att spelaren kan växla när din anslutning förändras. Det finns ingen enskild URL som håller filmen, eftersom filmen bara existerar som en sekvens.
Att spara en betyder att hämta varje segment och sedan remuxa dem: skriva video- och ljudströmmarna in i en vanlig MP4-behållare. Inget kodas om, så inget går förlorat och det tar sekunder snarare än filmens hela längd. Resultatet är en vanlig fil som spelas upp överallt.
Det är också därför "ladda ner den här strömmen" märkbart tar längre tid att starta än att ladda ner en fil: spellistan måste hämtas och tolkas, en kvalitetsnivå väljas, och först då kan segmenten börja komma. Och det är därför vissa strömmar inte kan sparas alls — om segmenten är krypterade under ett DRM-schema är nycklarna avsiktligt inte åtkomliga, och inget verktyg som respekterar lagen kommer förbi det.
Vad som skiljer en riktig nedladdningshanterare från en nedladdningsknapp
Den överlever att appen stängs
Bakgrundsöverföringar som lämnats till systemet, med en överlämning som fortsätter från samma bekräftade byte i stället för att starta filen igen.
Den berättar vad en länk är innan du binder dig
Storlek, typ och om servern stödjer återupptagning — allt går att veta från en enda HEAD-förfrågan, och allt användbart innan du spenderar fyra gigabyte av en dataplan.
Den köar snarare än översvämmar
Tio filer samtidigt är långsammare än tre åt gången, eftersom varje anslutning får en mindre andel och misslyckandena mångdubblas. En kö med en förnuftig samtidighetsgräns blir klar snabbare.
Det som landar är en vanlig fil
I en mapp du kan se, namngiven på ett förnuftigt sätt, spelbar av vad som helst — inte en databasklump som bara den appen kan öppna.
Vanor som förhindrar de flesta nedladdningsproblem
- Starta stora filer på Wi-Fi och håll skärmen på de första sekunderna
Överlämningen till bakgrundssessionen sker tidigt; efter det spelar skärmen ingen roll längre.
- Köa inte tjugo objekt samtidigt
Tre till fem samtidiga överföringar är sötpunkten på nästan varje anslutning.
- Kontrollera ledigt utrymme innan, inte efter
En överföring som fyller disken misslyckas vid 98 %, och iOS kan redan ha rensat dina cachar i ett försök att skapa plats.
- Behandla ett omedelbart "slutfört" med misstänksamhet
En film som blev klar på två sekunder är en felsida. Titta på filstorleken.
- Hämta utgångna länkar igen från deras sida
Att försöka igen med en död signerad URL kommer misslyckas för evigt, oavsett hur många gånger appen försöker.
Hur det här skiljer sig mellan enheter
Den strängaste miljön: pausning är aggressiv och lagringen är knapp. Bakgrundssessioner är inte en optimering här, de är det enda som fungerar.
Samma regler, med mer plats att köra på — och den enda iOS-enheten där ett stort bibliotek rimligen kan landa på en extern hårddisk i stället för intern lagring.
Ingen pausning alls, så långa överföringar beter sig som de gör på vilken dator som helst. Den praktiska gränsen är servern, inte operativsystemet.
Frågor det här väcker
Betyder fler anslutningar alltid en snabbare nedladdning?
Nej. De hjälper när en server begränsar hastigheten på varje enskild anslutning, vilket är vanligt. De gör ingenting när gränsen är din egen anslutning, och de kan göra saker värre när en värd räknar socklar per IP-adress och börjar avvisa dem. Någonstans mellan fyra och åtta är det användbara intervallet; trettio är kontraproduktivt.
Kan en nedladdning fortsätta medan skärmen är låst?
Ja, om den lämnades till systemets bakgrundsöverföringstjänst. Låsskärmen är irrelevant för den tjänsten — det är att appen pausas som spelar roll, och hela poängen med mekanismen är att den fortsätter oavsett.
Varför startar min nedladdning om i stället för att återupptas?
Servern respekterade inte intervallförfrågan. Du kan se det på att förloppet går tillbaka till noll i stället för att fortsätta. Vissa värdar stödjer intervall bara på sina signerade nedladdnings-URL:er, vissa inaktiverar dem helt, och några respekterar dem för små filer men inte stora.
Är det samma sak att konvertera en ström till MP4 som att koda om den?
Nej. Remuxning flyttar den befintliga videon och ljudet in i en MP4-behållare orört — förlustfritt, och snabbt nog att bli klart på sekunder. Omkodning bygger om bilden med en annan kodek och förlorar alltid kvalitet. Om att spara en tvåtimmars ström tar två timmar kodar något om trots att det inte behövde.
Hur FoxDL laddar ner
Motorn har två spår: ett processinternt spår som är snabbt medan appen är på skärmen, och systemets bakgrundssession som tar över från samma byte när den inte är det.
- Parallella delar för en enda fil, skrivna direkt till sin slutgiltiga plats på disk i stället för till tillfälliga delar som måste slås ihop efteråt.
- Bakgrundsöverföringar som fortsätter efter att appen lämnar skärmen, och fortsätter från senast bekräftade position — inte från senaste byten appen trodde den hade.
- Återupptagning efter ett avbrott, en omstart eller en tvångsavslutning, förutsatt att servern respekterar intervallförfrågningar. När den inte gör det säger FoxDL det i stället för att loopa.
- HLS-strömmar remuxade till MP4, så att det som landar i biblioteket är en vanlig fil, inte en mapp med segment.
- En nedladdningsinspektör som rapporterar den verkliga storleken, typen och återupptagningsstödet för en länk innan du börjar.
- Allt landar i en vanlig mapp som Filer-appen kan se.
Gratistilldelningar skiljer sig per plattform: på iPhone och iPad ett litet antal turer fyllda på med en kort belönad video du startar själv; på Mac, där det inte finns någon reklam alls, ett fast dagligt antal. Pro tar bort gränsen på alla enheter.
Vanliga frågor
- Fortsätter nedladdningar när jag lämnar appen?
- Kan en avbruten nedladdning återupptas där den stannade?
- Kan FoxDL ladda ner en HLS-ström (m3u8)?
- Varför är min nedladdning långsam, och kan jag göra den snabbare?
- Hur många nedladdningar kan jag göra i gratisversionen?
Läs vidare
Vad som måste hända innan en webbsida ger dig sin fil
De fyra sätten en sida levererar video, och varför bara ett av dem är en fil du kan behålla.
Var dina filer faktiskt bor på en iPhone, och vem som kan se dem
Sandlådan, var nedladdningar faktiskt hamnar, och varför att byta namn på en fil ställer till det för så många appar.
Varför din iPhone öppnar en videofil och vägrar nästa
Behållare, kodekar, och de tre sätten att titta på en fil iOS vägrar öppna.
Ditt bibliotek, äntligen på ett ställe.
Gratis nedladdning. Inget konto, ingen registrering — hela funktionsuppsättningen finns i gratisversionen.