Điều một trình quản lý tải xuống làm mà trình duyệt web thì không
Một tệp bốn gigabyte, hoàn thành chín mươi phần trăm, rồi một cuộc gọi điện thoại — hoặc chỉ là khóa màn hình — và nó biến mất. Đây là lời phàn nàn phổ biến nhất về việc tải xuống trên iOS, và nó không phải là một lỗi. Đó là hệ điều hành đang làm chính xác những gì nó được thiết kế để làm, và là lý do một nhóm ứng dụng riêng biệt tồn tại.
- 30 giây Khoảng thời gian một ứng dụng bị tạm dừng còn tiếp tục chạy trước khi iOS dừng nó
- 206 Mã trạng thái HTTP khiến việc tiếp tục phát trở nên khả thi
- 1 byte Lượng dữ liệu bị tải lại của một lượt chuyển được tiếp tục đúng cách
Vì sao lượt chuyển tệp dừng lại khi bạn chuyển ứng dụng
iOS không để một ứng dụng tiếp tục hoạt động chỉ vì nó muốn vậy. Khi bạn rời một ứng dụng, nó bị tạm dừng chỉ trong vài giây, và một ứng dụng bị tạm dừng không có thời gian CPU, không có socket mạng và không có cách nào để nhận ra rằng nó đã bị dừng. Mọi thứ nó đang giữ trong bộ nhớ vẫn còn đó, nhưng đông cứng — và nếu hệ thống cần bộ nhớ đó, ứng dụng sẽ bị chấm dứt hoàn toàn mà không được báo trước.
Một lượt tải xuống chạy trên một kết nối thông thường bên trong ứng dụng vì vậy kết thúc ngay tại cử chỉ về màn hình chính. Một số ứng dụng che giấu điều này bằng cách xin thêm vài giây thời gian chạy nền, đó là lý do một lượt tải xuống đôi khi sống sót qua việc đưa xuống nền đúng bằng khoảng thời gian bạn nhận ra nó đã không sống sót.
Câu trả lời đúng đắn khác biệt về bản chất. iOS cung cấp một dịch vụ chuyển tệp nền: bạn trao cho hệ thống một danh sách URL và đích đến, và hệ thống tự thực hiện việc tải xuống, trong tiến trình riêng của nó, theo lịch trình riêng của nó. Ứng dụng của bạn có thể bị tạm dừng, chấm dứt, hoặc hoàn toàn không chạy — lượt chuyển vẫn tiếp tục, và ứng dụng được khởi chạy lại trong nền khi có gì đó cần báo cáo. Đây là cơ chế đứng sau mọi lượt tải xuống sống sót qua một màn hình khóa, và việc sử dụng nó là một quyết định thiết kế mà một ứng dụng đưa ra ngay từ đầu, không phải một cài đặt bạn có thể bật lên.
Bốn cơ chế quyết định liệu một lượt tải xuống có sống sót hay không
- Range request
- Một yêu cầu HTTP xin các byte từ vị trí 5.000.000 trở đi thay vì toàn bộ tệp. Nếu máy chủ trả lời
206 Partial Content, việc tiếp tục từ giữa chừng là khả thi; nếu nó trả lời200 OKvà bắt đầu từ đầu, thì không — tệp phải được tải lại từ số không. - Kết nối song song
- Chia một tệp thành nhiều khoảng và tải chúng cùng lúc. Nó hữu ích vì một kết nối đơn thường bị giới hạn tốc độ bởi máy chủ hoặc bị hạn chế bởi độ trễ khứ hồi, không phải vì internet của bạn nhanh hơn khi mở nhiều socket hơn.
- Vị trí đã cam kết
- Bao nhiêu phần của tệp đã được ghi an toàn ra đĩa, khác với phần vẫn đang trên đường truyền. Một lượt tải xuống tiếp tục từ byte đã cam kết cuối cùng là đúng đắn; một lượt tải xuống tiếp tục từ những gì nó *nghĩ* nó đã nhận được tạo ra một tệp hỏng chỉ lộ ra hàng giờ sau đó.
- Phiên nền
- Lượt chuyển do hệ thống vận hành được mô tả ở trên. Nó khởi động chậm hơn, không thể được trao logic tùy chỉnh tùy ý, và nó là thứ duy nhất tiếp tục chạy khi ứng dụng không chạy.
Vì sao một lượt tải xuống thất bại, và mỗi kiểu thất bại trông như thế nào
Hầu hết các báo cáo "tải xuống kẹt" là một trong năm trường hợp sau, và chúng dễ phân biệt khi bạn biết hình dạng của chúng.
| Điều bạn thấy | Điều thực sự đang xảy ra | Điều giúp ích |
|---|---|---|
| Dừng ngay khoảnh khắc bạn rời ứng dụng | Lượt chuyển đang chạy trong tiến trình, không phải trong một phiên nền. | Không có gì bạn có thể làm từ bên ngoài — đây là vấn đề thiết kế ứng dụng. |
| Khởi động lại từ 0% mỗi lần | Máy chủ bỏ qua các yêu cầu range, nên không có cách nào tiếp tục từ giữa chừng. | Một kết nối ổn định, hoặc một tệp nhỏ hơn. Một số máy chủ chỉ cho phép range với các liên kết đã ký. |
| Thất bại sau vài phút, lặp đi lặp lại | Liên kết đã hết hạn. Nhiều máy chủ cấp URL chỉ có hiệu lực trong năm hoặc mười phút. | Lấy lại liên kết từ trang gốc của nó và bắt đầu lại; liên kết cũ sẽ không bao giờ hoạt động. |
| Tải xuống nhanh, nhưng tệp không mở được | Những gì đến là một trang lỗi HTML hoặc một trang đăng nhập mang tên tệp video. | Kiểm tra kích thước — một "bộ phim" 14 KB là một trang web. Kiểm tra liên kết trước khi chốt. |
| Rất chậm dù kết nối nhanh | Giới hạn tốc độ theo từng kết nối ở phía máy chủ. | Thêm kết nối song song, nếu máy chủ cho phép. Nếu nó giới hạn theo địa chỉ IP thay vì theo socket, không gì giúp được. |
Khi hoàn toàn không có tệp nào để tải xuống
Một phần lớn video trên web không được phân phối dưới dạng một tệp. Nó được phân phối dưới dạng HLS — một danh sách phát .m3u8 liệt kê hàng trăm đoạn nhỏ, mỗi đoạn vài giây, thường ở nhiều mức chất lượng để trình phát có thể chuyển đổi khi kết nối của bạn thay đổi. Không có một URL duy nhất nào giữ bộ phim, vì bộ phim chỉ tồn tại như một chuỗi.
Lưu một luồng như vậy nghĩa là tải về từng đoạn rồi remux chúng: ghi các luồng video và âm thanh vào một container MP4 thông thường. Không gì bị mã hóa lại, nên không gì bị mất và nó chỉ mất vài giây thay vì bằng thời lượng của bộ phim. Kết quả là một tệp thông thường phát được ở bất cứ đâu.
Đây cũng là lý do vì sao "tải luồng này xuống" mất nhiều thời gian hơn đáng kể để bắt đầu so với tải một tệp: danh sách phát phải được tải về và phân tích, một mức chất lượng được chọn, và chỉ sau đó các đoạn mới có thể bắt đầu đến. Và đó là lý do vì sao một số luồng hoàn toàn không thể lưu được — nếu các đoạn được mã hóa dưới một cơ chế DRM, các khóa cố ý không thể lấy được, và không công cụ nào tôn trọng pháp luật có thể vượt qua điều đó.
Điều phân biệt một trình quản lý tải xuống thực sự với một nút tải xuống
Nó sống sót qua việc đóng ứng dụng
Lượt chuyển nền được trao cho hệ thống, với một bàn giao tiếp tục từ đúng byte đã cam kết thay vì bắt đầu tệp lại từ đầu.
Nó cho bạn biết một liên kết là gì trước khi bạn chốt
Kích thước, loại và liệu máy chủ có hỗ trợ tiếp tục hay không — tất cả đều biết được từ một yêu cầu HEAD duy nhất, và tất cả đều hữu ích trước khi bạn tiêu tốn bốn gigabyte dữ liệu di động.
Nó xếp hàng thay vì tràn ngập
Mười tệp cùng lúc chậm hơn ba tệp một lúc, vì mỗi kết nối nhận được phần chia sẻ nhỏ hơn và các thất bại nhân lên. Một hàng đợi với giới hạn đồng thời hợp lý sẽ hoàn thành sớm hơn.
Những gì tới nơi là một tệp thông thường
Trong một thư mục bạn có thể thấy, được đặt tên hợp lý, phát được bởi bất cứ thứ gì — không phải một blob cơ sở dữ liệu mà chỉ ứng dụng đó mới mở được.
Những thói quen ngăn ngừa hầu hết các vấn đề tải xuống
- Bắt đầu tệp lớn trên Wi-Fi và để màn hình bật trong vài giây đầu
Việc bàn giao sang phiên nền diễn ra sớm; sau đó màn hình không còn quan trọng nữa.
- Đừng xếp hàng hai mươi mục cùng lúc
Ba đến năm lượt chuyển đồng thời là điểm ngọt trên gần như mọi kết nối.
- Kiểm tra dung lượng trống trước, không phải sau
Một lượt chuyển làm đầy ổ đĩa thất bại ở 98%, và iOS có thể đã xóa bộ nhớ đệm của bạn trong lúc cố tìm chỗ trống.
- Nghi ngờ một thông báo "đã hoàn thành" tức thì
Một bộ phim hoàn thành trong hai giây là một trang lỗi. Hãy nhìn vào kích thước tệp.
- Lấy lại các liên kết đã hết hạn từ trang gốc của chúng
Thử lại một URL đã ký chết sẽ thất bại mãi mãi, bất kể ứng dụng thử lại bao nhiêu lần.
Sự khác biệt giữa các thiết bị
Môi trường khắt khe nhất: việc tạm dừng diễn ra quyết liệt và dung lượng lưu trữ chật hẹp. Các phiên nền ở đây không phải là một sự tối ưu hóa, chúng là thứ duy nhất hoạt động.
Cùng những quy tắc đó, với nhiều không gian hơn để chạy — và là thiết bị iOS duy nhất mà một thư viện lớn có thể hợp lý rơi vào một ổ đĩa ngoài thay vì bộ nhớ trong.
Hoàn toàn không có tạm dừng, nên các lượt chuyển dài hoạt động theo cách chúng vẫn hoạt động trên bất kỳ máy tính để bàn nào. Giới hạn thực tế là máy chủ, không phải hệ điều hành.
Câu hỏi điều này thường gợi ra
Nhiều kết nối hơn có luôn nghĩa là tải xuống nhanh hơn không?
Không. Chúng giúp ích khi một máy chủ giới hạn tốc độ của mỗi kết nối riêng lẻ, điều này phổ biến. Chúng không làm gì khi giới hạn nằm ở kết nối của chính bạn, và chúng có thể khiến mọi thứ tệ hơn khi một máy chủ đếm số socket theo địa chỉ IP và bắt đầu từ chối chúng. Khoảng giữa bốn và tám là phạm vi hữu ích; ba mươi lại phản tác dụng.
Một lượt tải xuống có thể tiếp tục khi màn hình bị khóa không?
Có, nếu nó đã được trao cho dịch vụ chuyển tệp nền của hệ thống. Màn hình khóa không liên quan tới dịch vụ đó — điều quan trọng là ứng dụng bị tạm dừng, và toàn bộ điểm mấu chốt của cơ chế này là nó tiếp tục chạy bất kể điều đó.
Vì sao lượt tải xuống của tôi khởi động lại thay vì tiếp tục?
Máy chủ không tôn trọng yêu cầu range. Bạn có thể nhận biết vì tiến độ quay về số không thay vì tiếp tục. Một số máy chủ chỉ hỗ trợ range trên các URL tải xuống đã ký của họ, một số vô hiệu hóa hoàn toàn, và một số tôn trọng nó với tệp nhỏ nhưng không với tệp lớn.
Chuyển đổi một luồng thành MP4 có giống với mã hóa lại nó không?
Không. Remux di chuyển video và âm thanh có sẵn vào một container MP4 nguyên vẹn — không mất chất lượng, và đủ nhanh để hoàn thành trong vài giây. Mã hóa lại dựng lại hình ảnh với một codec khác và luôn mất chất lượng. Nếu lưu một luồng dài hai giờ mất hai giờ, có gì đó đang mã hóa lại khi không cần thiết.
FoxDL tải xuống như thế nào
Bộ máy có hai làn: một làn trong tiến trình nhanh khi ứng dụng đang hiển thị trên màn hình, và phiên nền hệ thống tiếp quản từ đúng byte đó khi không.
- Các phần song song cho một tệp duy nhất, được ghi thẳng vào vị trí cuối cùng của chúng trên đĩa thay vì vào các phần tạm phải được ghép lại sau đó.
- Lượt chuyển nền tiếp tục sau khi ứng dụng rời khỏi màn hình, và tiếp tục ở vị trí đã cam kết cuối cùng — không phải ở byte cuối mà ứng dụng nghĩ nó đã nhận được.
- Tiếp tục sau khi rớt kết nối, khởi động lại hay bị buộc thoát, miễn là máy chủ tôn trọng các yêu cầu range. Khi không, FoxDL sẽ nói rõ điều đó thay vì lặp vô ích.
- Luồng HLS được remux thành MP4, nên những gì tới thư viện là một tệp thông thường, không phải một thư mục chứa các đoạn.
- Một công cụ kiểm tra tải xuống báo cáo kích thước, loại và khả năng tiếp tục thực sự của một liên kết trước khi bạn bắt đầu.
- Mọi thứ tới một thư mục bình thường mà ứng dụng Tệp có thể thấy.
Hạn mức miễn phí khác nhau theo nền tảng: trên iPhone và iPad là một số lượt hạn chế được cộng thêm bằng một video có thưởng ngắn do chính bạn bắt đầu; trên Mac, nơi hoàn toàn không có quảng cáo, là một số lượng cố định theo ngày. Pro gỡ bỏ giới hạn trên mọi thiết bị.
Câu hỏi thường gặp
- Tải xuống có tiếp tục chạy khi tôi rời khỏi ứng dụng không?
- Một lượt tải xuống bị gián đoạn có tiếp tục được từ chỗ dừng không?
- FoxDL có tải được luồng HLS (m3u8) không?
- Vì sao lượt tải của tôi chậm, và tôi có thể làm nó nhanh hơn không?
- Tôi tải xuống được bao nhiêu lượt trong bản miễn phí?
Đọc tiếp
Điều gì phải xảy ra trước khi một trang web trao cho bạn tệp của nó
Bốn cách một trang cung cấp video, và vì sao chỉ một trong số đó là một tệp bạn có thể giữ.
Tệp của bạn thực sự nằm ở đâu trên một chiếc iPhone, và ai có thể thấy chúng
Sandbox, nơi các lượt tải xuống thực sự đi tới, và vì sao đổi tên một tệp làm hỏng nhiều ứng dụng đến vậy.
Vì sao iPhone của bạn mở được video này mà từ chối video kia
Container, codec, và ba cách xem một tệp mà iOS từ chối mở.
Thư viện của bạn, cuối cùng cũng ở một nơi.
Tải miễn phí. Không tài khoản, không đăng ký — đủ tính năng trong bản miễn phí.