İndirme yöneticisi ne yapıyor da web tarayıcısı yapmıyor
Dört gigabaytlık dosya, yüzde doksanda; sonra bir telefon çalıyor — ya da sadece ekran kilitleniyor — ve her şey gidiyor. iOS’ta indirmeyle ilgili en yaygın şikâyet bu ve bir hata değil. İşletim sistemi tam olarak tasarlandığı işi yapıyor; ayrı bir uygulama sınıfının var olma sebebi de bu.
- 30 sn Askıya alınan bir uygulamanın iOS onu durdurmadan önce kabaca ne kadar çalıştığı
- 206 Devam etmeyi mümkün kılan HTTP durum kodu
- 1 bayt Düzgün devam eden bir aktarımın yeniden indirdiği kadarı
Uygulama değiştirince aktarım neden kesiliyor
iOS, bir uygulamanın canı istediği için çalışmaya devam etmesine izin vermiyor. Uygulamadan çıktığın anda saniyeler içinde askıya alınıyor; askıya alınmış bir uygulamanın işlemci zamanı yok, ağ bağlantısı yok, durdurulduğunu fark etme imkânı da yok. Bellekte tuttuğu her şey yerinde ama donmuş halde — ve sistem belleğe ihtiyaç duyarsa uygulama haber verilmeden kapatılıyor.
Dolayısıyla uygulamanın içindeki sıradan bir bağlantı üzerinden yürüyen indirme, ana ekrana çıktığın yerde bitiyor. Bazı uygulamalar bunu birkaç saniye ek arka plan süresi isteyerek gizliyor; indirmenin bazen tam da devam etmediğini fark edeceğin ana kadar sürmesinin sebebi bu.
Doğru cevap türce farklı. iOS bir arka plan aktarım servisi sunuyor: sisteme adreslerin ve hedeflerin listesini veriyorsun, indirmeyi sistem kendi süreci içinde, kendi programına göre yapıyor. Uygulaman askıda, kapatılmış ya da hiç çalışmıyor olabilir — aktarım sürüyor ve bildirilecek bir şey olduğunda uygulama arka planda yeniden başlatılıyor. Kilitli ekranda kesilmeyen her indirmenin arkasındaki mekanizma bu; kullanmak da uygulamanın baştan verdiği bir tasarım kararı, açıp kapatabileceğin bir ayar değil.
Bir indirmenin kesilip kesilmeyeceğini belirleyen dört mekanizma
- Range isteği
- Dosyanın tamamı yerine 5.000.000. bayttan sonrasını isteyen HTTP isteği. Sunucu
206 Partial Contentyanıtı veriyorsa ortadan devam etmek mümkün;200 OKverip baştan gönderiyorsa değil — dosyanın sıfırdan çekilmesi gerekiyor. - Paralel bağlantı
- Bir dosyayı birkaç aralığa bölüp aynı anda çekmek. İşe yaramasının sebebi daha çok soket açınca internetinin hızlanması değil; tek bir bağlantının çoğu zaman sunucu tarafından kısılması ya da gidiş-dönüş gecikmesiyle sınırlanması.
- İşlenmiş konum (committed offset)
- Dosyanın diske güvenle yazılmış kısmı — hâlâ yolda olanın aksine. Son işlenmiş bayttan devam eden indirme doğru çalışıyor; aldığını *sandığı* yerden devam eden ise saatler sonra ortaya çıkan bozuk bir dosya üretiyor.
- Arka plan oturumu
- Yukarıda anlatılan, sistemin yürüttüğü aktarım. Başlaması daha yavaş, keyfi özel mantık verilemiyor ve uygulama çalışmadığında çalışmayı sürdüren tek şey bu.
İndirme neden başarısız oluyor ve her biri nasıl görünüyor
“Takılan indirme” bildirimlerinin çoğu bu beşten biri ve biçimlerini bir kez öğrenince ayırt etmek kolay.
| Gördüğün | Asıl olan | Ne işe yarar |
|---|---|---|
| Uygulamadan çıkar çıkmaz duruyor | Aktarım arka plan oturumunda değil, uygulamanın kendi içinde yürüyordu. | Dışarıdan yapabileceğin bir şey yok — bu bir uygulama tasarımı meselesi. |
| Her seferinde %0’dan başlıyor | Sunucu range isteklerini yok sayıyor, ortadan devam etmenin yolu yok. | Kararlı bir bağlantı ya da daha küçük dosya. Bazı sunucular range’i yalnızca imzalı bağlantılarda açıyor. |
| Birkaç dakika sonra tekrar tekrar hata veriyor | Bağlantının süresi dolmuş. Çoğu servis beş on dakika geçerli adresler üretiyor. | Bağlantıyı sayfasından yeniden al ve baştan başla; eskisi bir daha çalışmaz. |
| Hızlıca iniyor ama dosya açılmıyor | Gelen şey, video adı taşıyan bir HTML hata ya da giriş sayfası. | Boyuta bak — 14 KB’lık “film” bir web sayfası. Başlamadan önce bağlantıyı incele. |
| Hızlı bağlantıya rağmen çok yavaş | Sunucu tarafında bağlantı başına hız kısıtı. | Sunucu izin veriyorsa daha çok paralel bağlantı. Kısıt sokete değil IP adresine göreyse hiçbir şey işe yaramaz. |
İndirilecek bir dosyanın hiç olmadığı durum
Webdeki videonun büyük bölümü dosya olarak sunulmuyor. HLS olarak sunuluyor — birkaç saniyelik yüzlerce küçük parçayı, çoğu zaman birkaç kalite seviyesinde listeleyen bir .m3u8 listesi; böylece oynatıcı bağlantın değiştikçe seviyeler arasında geçiş yapabiliyor. Filmi tutan tek bir adres yok, çünkü film yalnızca bir dizi parça olarak var.
Böyle bir şeyi kaydetmek, bütün parçaları çekip sonra remux etmek demek: video ve ses akışlarını normal bir MP4 kapsayıcısına yazmak. Yeniden kodlama yok, dolayısıyla kayıp da yok; filmin süresi kadar değil, saniyeler sürüyor. Sonuçta elinde her yerde oynayan sıradan bir dosya kalıyor.
Bu aynı zamanda “yayını indir”in dosya indirmeye göre neden gözle görülür biçimde geç başladığını açıklıyor: önce listenin çekilip ayrıştırılması, bir kalitenin seçilmesi gerekiyor; parçalar ancak ondan sonra gelmeye başlıyor. Bazı yayınların neden hiç kaydedilemediğini de açıklıyor: parçalar bir DRM şemasıyla şifrelenmişse anahtarlar bilinçli olarak elde edilemiyor ve yasaya saygılı hiçbir araç bunu aşmaz.
Gerçek bir indirme yöneticisini indirme düğmesinden ayıran şey
Uygulama kapanınca da devam eder
Sisteme devredilmiş arka plan aktarımları ve dosyayı baştan başlatmak yerine aynı işlenmiş bayttan sürdüren bir devir teslim.
Başlamadan önce bağlantının ne olduğunu söyler
Boyut, tür ve sunucunun devam etmeyi destekleyip desteklemediği — hepsi tek bir HEAD isteğiyle öğrenilebiliyor ve dört gigabaytlık kotayı harcamadan önce işe yarıyor.
Sele değil kuyruğa çevirir
Aynı anda on dosya, üçer üçer indirmekten yavaş; her bağlantıya daha az pay düşüyor ve hatalar çoğalıyor. Makul bir eşzamanlılık sınırı olan kuyruk daha erken bitiyor.
İnen şey normal bir dosyadır
Görebildiğin bir klasörde, düzgün adlandırılmış, her şeyin oynatabildiği — yalnızca o uygulamanın açabildiği bir veritabanı yığını değil.
İndirme sorunlarının çoğunu önleyen alışkanlıklar
- Büyük dosyaları Wi-Fi’de başlat ve ilk birkaç saniye ekranı açık bırak
Arka plan oturumuna devir erken oluyor; sonrasında ekranın bir önemi kalmıyor.
- Aynı anda yirmi dosyayı sıraya koyma
Neredeyse her bağlantıda üç ile beş eşzamanlı aktarım en verimli aralık.
- Boş alanı sonra değil önce kontrol et
Diski dolduran aktarım %98’de düşüyor ve iOS bu sırada yer açmak için önbelleklerini çoktan temizlemiş olabiliyor.
- Anında gelen “tamamlandı”ya şüpheyle bak
İki saniyede biten film bir hata sayfası. Dosya boyutuna bak.
- Süresi dolmuş bağlantıyı sayfasından yenile
Ölü bir imzalı adresi yeniden denemek, uygulama kaç kez denerse denesin sonsuza kadar başarısız olur.
Cihazlara göre fark
En katı ortam: askıya alma agresif, depolama dar. Arka plan oturumları burada bir iyileştirme değil, çalışan tek yöntem.
Aynı kurallar, biraz daha geniş bir alan — ve büyük bir kütüphanenin dahilî depolama yerine makul biçimde harici diske inebildiği tek iOS cihazı.
Askıya alma hiç yok; uzun aktarımlar herhangi bir masaüstündeki gibi davranıyor. Pratik sınır işletim sistemi değil, sunucu.
Bunun doğurduğu sorular
Daha çok bağlantı her zaman daha hızlı indirme demek mi?
Hayır. Sunucu her bağlantının hızını ayrı ayrı kısıyorsa işe yarıyor ve bu yaygın. Sınır kendi bağlantınsa hiçbir şey değişmiyor; sunucu IP başına soket sayıyorsa işleri kötüleştirip reddedilmeye yol açıyor. Dört ile sekiz arası faydalı aralık; otuz ters teper.
Ekran kilitliyken indirme sürer mi?
Sistemin arka plan aktarım servisine devredildiyse evet. Kilit ekranı o servis için ilgisiz — önemli olan uygulamanın askıya alınması ve bu mekanizmanın bütün amacı buna rağmen devam etmek.
İndirmem neden devam etmek yerine baştan başlıyor?
Sunucu range isteğini karşılamamış. İlerlemenin kaldığı yerden değil sıfırdan başlamasından anlarsın. Bazı servisler range’i yalnızca imzalı indirme adreslerinde destekliyor, bazıları tamamen kapatıyor, birkaçı küçük dosyalarda açıp büyüklerde kapatıyor.
Yayını MP4’e çevirmek yeniden kodlamayla aynı şey mi?
Hayır. Remux, mevcut video ve sesi olduğu gibi bir MP4 kapsayıcısına taşıyor — kayıpsız ve saniyeler içinde bitiyor. Yeniden kodlama görüntüyü başka bir kodekle yeniden kuruyor ve her zaman kalite kaybettiriyor. İki saatlik bir yayını kaydetmek iki saat sürüyorsa, gereği yokken bir şey yeniden kodlanıyor.
FoxDL nasıl indiriyor
Motorun iki şeridi var: uygulama ekrandayken hızlı çalışan uygulama içi şerit ve ekrandan çıktığın anda aynı bayttan devralan sistem arka plan oturumu.
- Tek dosya için paralel parçalar; sonradan birleştirilmesi gereken geçici parçalara değil, doğrudan diskteki nihai konumlarına yazılıyor.
- Arka plan aktarımları uygulama ekrandan çıktıktan sonra da sürüyor ve son işlenmiş konumdan devam ediyor — uygulamanın aldığını sandığı bayttan değil.
- Kopma, yeniden başlatma ya da zorla kapatma sonrası devam, sunucu range isteklerini karşıladığı sürece. Karşılamıyorsa FoxDL döngüye girmek yerine bunu söylüyor.
- HLS yayınları MP4’e sarılıyor; kütüphaneye inen şey parça klasörü değil, sıradan bir dosya.
- İndirme incelemesi, başlamadan önce bağlantının gerçek boyutunu, türünü ve devam desteğini bildiriyor.
- Her şey Dosyalar uygulamasının görebildiği normal bir klasöre iniyor.
Ücretsiz haklar platforma göre değişiyor: iPhone ve iPad’de kendi başlattığın kısa ödüllü videoyla tazelenen az sayıda hak; reklamın hiç olmadığı Mac’te ise sabit bir günlük sayı. Pro her cihazda sınırı kaldırıyor.
Bu konuda sorulanlar
- Uygulamadan çıkınca indirmeler devam ediyor mu?
- Yarım kalan bir indirme kaldığı yerden devam eder mi?
- FoxDL bir HLS (m3u8) yayınını indirebilir mi?
- İndirmem neden yavaş, hızlandırabilir miyim?
- Ücretsiz sürümde kaç indirme yapabilirim?
Okumaya devam
Bir web sayfasından dosyayı alabilmen için önce ne olması gerekiyor
Bir sayfanın videoyu sunduğu dört yol ve neden yalnızca biri saklayabileceğin bir dosya.
iPhone’da dosyaların gerçekte nerede duruyor ve kim görebiliyor
Kum havuzu, indirmelerin gerçekte nereye gittiği ve yeniden adlandırmanın neden bu kadar çok uygulamayı bozduğu.
iPhone neden bir videoyu açıyor da öbürünü açmıyor
Kapsayıcılar, kodekler ve iOS’un açmadığı bir dosyayı izlemenin üç yolu.
Kütüphanen sonunda tek yerde.
İndirmesi ücretsiz. Hesap yok, kayıt yok; tüm özellik seti ücretsiz sürümde.