Dùng thử
← Quay lại blog

Vì sao video streaming không tải được: phân đoạn, blob, liên kết hết hạn

Bạn bấm lưu một video, công cụ tải quay hết sức lắc mà vẫn nhả ra một tập tin hỏng — hoặc thẳng thắn báo "không phát hiện video". Đặt kết luận lên trước: phần lớn video streaming không tải được không phải vì công cụ kém, mà vì streaming ngay từ đầu không có "một tập tin video hoàn chỉnh" nào cho bạn tải. Đi qua ba cơ chế — phân đoạn, liên kết, bitrate — theo đúng trình tự phát, bạn tự đánh giá được video của mình rơi vào trường hợp nào và nên lưu bằng cách nào.

Nguyên nhân gốc: video streaming chưa bao giờ là một tập tin duy nhất

Bản chất của streaming là "vừa tải vừa phát": video bị cắt thành các phân đoạn nhỏ vài giây, truyền lần lượt qua các yêu cầu web bình thường, và trình phát ghép nối theo thời gian thực — không có tập tin lớn nào có sẵn để tải.

Theo tài liệu nhà phát triển chính thức của Apple, giao thức HLS của họ cắt video thành các phân đoạn dài vài giây rồi phân phối qua HTTP từng phần một — đây cũng là cách truyền nền tảng của rất nhiều nền tảng video. "Một video" bạn thấy trong trình phát thực chất là hàng trăm phân đoạn được nối liền mạch theo thứ tự trong danh sách phát:

  • Tập tin danh sách phát (như m3u8) ghi lại địa chỉ và thứ tự của từng phân đoạn;
  • Trình phát kéo phân đoạn theo thứ tự, giải mã và phát;
  • Công cụ tải tìm "một tập tin video duy nhất", nên đương nhiên chẳng thấy gì.

Đây là lý do phổ biến nhất của thông báo "không phát hiện video": không phải video giấu sâu, mà là trang đó vốn dĩ không có tập tin đó. Về hướng xử lý ở tầng công cụ, chúng tôi đã viết trong làm gì khi công cụ tải video gặp trục trặc, không nhắc lại ở đây.

Liên kết blob là gì: vì sao "sao chép địa chỉ video" không ăn

Địa chỉ video bạn sao chép bằng chuột phải nhiều khi là một tham chiếu bộ nhớ bắt đầu bằng blob:, không trỏ tới tập tin nào trên bất kỳ máy chủ nào.

Theo tài liệu chính thức của MDN, liên kết blob là một tham chiếu dùng một lần tới dữ liệu nằm trong bộ nhớ: trình phát tải các phân đoạn vào bộ nhớ và ghép theo thời gian thực, rồi giao kết quả đã ghép cho thẻ phát dưới một địa chỉ bộ nhớ. Điều đó có nghĩa là:

  • Địa chỉ chỉ hợp lệ trên trang hiện tại — tải lại hoặc đóng trang là mất tác dụng;
  • Gửi cho bạn bè hay sang thiết bị khác đều không mở được;
  • Dùng công cụ tải nào đi nữa để phân tích địa chỉ đó thì kết quả vẫn vậy.

Hiểu lầm thường gặp là "có địa chỉ là có video" — địa chỉ blob chỉ là một dấu trang trong bộ nhớ, không phải tập tin; dấu trang rời khỏi cuốn sách thì thành vô dụng.

Liên kết hết hạn và bitrate thích ứng: lấy được địa chỉ chưa phải lấy được video

Dù vượt qua blob và có được địa chỉ máy chủ thật, phía trước vẫn còn hai cơ chế động: liên kết hết hạn và chất lượng tự đổi.

  • Chữ ký có thời hạn: địa chỉ danh sách phát mà nền tảng giao cho trình phát phần lớn kèm chữ ký và cửa sổ hiệu lực — vài phút đến vài giờ — hết hạn là từ chối truy cập ngay. Sao chép địa chỉ gửi cho bạn bè, họ mở lên chỉ thấy báo lỗi.
  • Bitrate thích ứng: các giao thức như MPEG-DASH (tiêu chuẩn quốc tế định nghĩa trong ISO/IEC 23009-1) dựng cùng một video thành hơn chục bậc chất lượng cùng nhiều rãnh âm thanh, và trình phát đổi bậc theo từng phân đoạn dựa trên băng thông lúc đó của bạn. Tải tĩnh thường chỉ dính một mẩu nhỏ của một bậc; vài giây sau bậc đổi, nội dung bạn tải được đã khác.
  • Rào cản ghép nối: dù lấy đủ phân đoạn, vẫn phải ghép theo đúng thứ tự danh sách phát và khớp âm với hình — việc trình phát làm theo thời gian thực, làm tay gần như bất khả thi.

Vì vậy các "công cụ phân tích địa chỉ" hầu như bất lực trước streaming: tìm được danh sách phát, nhưng không qua được ba cửa — hết hạn, đổi bậc, ghép nối.

Các tầng streaming chặn công cụ tải

Chốt thứ ba: phân đoạn của nội dung được bảo vệ được mã hóa

Các cơ chế trên giải thích chuyện "không tìm thấy tập tin", nhưng video trên nền tảng thuê bao còn thêm một tầng: bản thân phân đoạn được mã hóa, tải về cũng không phát được.

Cơ chế mã hóa và cấp quyền này đã được phân tích kỹ trong một bài kỹ thuật trước; ở đây chỉ nêu kết luận: dữ liệu phân đoạn được mã hóa, khóa giải mã chỉ được phát tạm thời lúc phát và gắn với thiết bị hiện tại — phân đoạn tải về cũng không mở nổi, quay cứng bằng phần mềm ghi màn hình thì gặp bảo vệ mạnh sẽ quay ra một màn đen (nguyên nhân tập tin màn đen và cách xử lý, xem cẩm nang sửa lỗi màn đen). Video trên các nền tảng thuê bao như OnlyFans và Fansly phần lớn thuộc dạng này: phát được nhưng không lưu được là chuyện bình thường — không phải lỗi, mà là thiết kế.

Luồng khác nhau, cách lưu khác nhau

Cách lưu đi theo cơ chế: có tập tin độc lập thì tải trực tiếp, luồng phân đoạn và nội dung bảo vệ thì quay lại — một trình duyệt video desktop bao trùm cả hai.

Với VidBrowser, gồm bốn bước:

Bước 1: Tải xuống và cài đặt VidBrowser

VidBrowser là trình duyệt video cho Windows và Mac, dùng xem video, cắt khoảnh khắc và lưu về máy, tích hợp sẵn hai tính năng tải xuống và ghi hình. Cài đặt chỉ mất vài phút.

Bước 2: Mở trang video trong VidBrowser và phát

Mở VidBrowser, truy cập trang chứa video (đăng nhập trước nếu cần), phát video bạn muốn lưu.

Bước 3: Nếu tải trực tiếp được, dùng nút tải xuống

VidBrowser tự động nhận diện tài nguyên video trên trang; khi thấy tập tin độc lập tải được, nó liệt kê vào bảng "Thư viện video" bên phải — bấm nút "Tải xuống" màu cam để lưu thành MP4 (chọn sẵn độ phân giải trong menu lọc trước cũng được).

Bước 4: Nếu không tải được, lưu bằng tính năng ghi hình

Luồng phân đoạn không có tập tin độc lập, nội dung bảo vệ không lấy nổi luồng đầy đủ — cả hai trường hợp đều dùng ghi hình: rê chuột lên video, bảng điều khiển ghi hình sẽ hiện đè lên; chọn tốc độ (1x thời gian thực, hoặc 2x/4x cho nhanh xong), bấm "Ghi toàn bộ" để ghi cả video, nút ghi bên trái bắt đầu hoặc tạm dừng bất cứ lúc nào. Video ghi lại được lưu ở chất lượng trang thực tế phát và xem ngoại tuyến bằng mọi trình phát đều được. (Quy trình đầy đủ tải xuống cộng ghi hình, xem cẩm nang ghi hình và tải xuống.)

FAQ

Vì sao có video tải một phát ăn ngay, có video cố mấy cũng không?

Do cách truyền: trang nào tự gắn sẵn tập tin video hoàn chỉnh thì công cụ tải lấy trực tiếp được; luồng phân đoạn, phát bằng blob và nội dung bảo vệ đều không có tập tin sẵn, con đường duy nhất là ghi hình trong đường ống phát.

Gửi địa chỉ m3u8 lấy được cho người khác có dùng được không?

Gần như không: loại địa chỉ này phần lớn kèm chữ ký và thời hạn — có cái vài phút là hết — và người nhận còn cần công cụ hỗ trợ phát phân đoạn cùng ghép âm hình mới mở nổi. Muốn chia sẻ, cứ lưu thành tập tin hoàn chỉnh ở máy rồi hẵng gửi.

Chất lượng bản ghi hình thế nào?

Ghi hình lưu theo chất lượng trang đang thực tế phát — trang cho bậc nào thì ghi bậc đó. Muốn chất lượng cao hơn, hãy tự chuyển trình phát lên bậc cao nhất trước khi ghi.

Thêm bài viết