Quay lại Blog

M3U8 Là Gì? Hướng Dẫn Đầy Đủ Về Giao Thức HLS Và Playlist .m3u8

M3U8 là playlist văn bản UTF-8 mà giao thức HLS (HTTP Live Streaming) sử dụng. Phân tích sâu cấu trúc tệp .m3u8, cách HLS hoạt động, segment .ts/fMP4, khác biệt cốt lõi giữa M3U8 và MP4, cũng như cách phát trực tuyến bitrate thích ứng vận hành.

By

M3U8 là playlist văn bản UTF-8 mà giao thức HLS (HTTP Live Streaming) sử dụng. Bản thân tệp không chứa khung hình video, mà là một manifest liệt kê URL của các segment video (.ts hoặc .m4s), thời lượng từng segment và các biến thể bitrate khả dụng. Trình phát đọc .m3u8, lấy lần lượt các segment và ghép chúng lại trong thời gian thực thành một luồng video phát được — đây chính là cơ chế cốt lõi đằng sau YouTube, Netflix, Twitch, Apple TV+ và hầu hết các dịch vụ phát trực tuyến lớn vào năm 2026.

Sơ đồ quy trình M3U8 và HLS: trình duyệt hoặc trình phát trước tiên yêu cầu master playlist .m3u8, lấy media playlist cho từng biến thể, tải song song các segment .ts hoặc .m4s, rồi ghép lại theo thứ tự tại máy người dùng và giải mã thành luồng video phát được.
Hình 1. Toàn bộ luồng phát HLS từ đầu đến cuối: master playlist → media playlist → tải segment → ghép lại theo thời gian thực.

Bạn đã bao giờ cố lưu một video từ một trang phát trực tuyến và kết thúc với hàng trăm tệp .ts nhỏ thay vì một .mp4 gọn gàng? Hoặc mở tab Network trong trình duyệt của bạn, mong đợi một URL tải xuống sạch sẽ, và thay vào đó tìm thấy một luồng vô tận các đoạn hai giây đổ vào? Bạn không làm gì sai. Bạn đang xem HLS — giao thức cung cấp hầu hết video phát trực tuyến trên web hiện đại — và HLS không vận chuyển video dưới dạng tệp đơn lẻ. Nó vận chuyển chúng dưới dạng công thức cộng với các bộ phận.

Công thức là một tệp văn bản nhỏ gọi là playlist .m3u8. Các bộ phận là các segment video ngắn, có thể giải mã độc lập mà trình phát của bạn ghép lại trong thời gian thực. HLS do Apple tạo ra vào năm 2009 cho iPhone đời đầu và được tiêu chuẩn hóa là RFC 8216; ngày nay hầu hết các trình duyệt, thiết bị di động và TV lớn đều hỗ trợ HLS gốc.

Hướng dẫn này đi qua những gì một .m3u8 thực sự chứa, tại sao các dịch vụ phát trực tuyến đã chọn thiết kế này, cách các segment .ts và fMP4 khớp với nhau, các nền tảng nào sử dụng HLS vào năm 2026, và điều gì xảy ra khi bạn cố lưu một trong các luồng này vào ổ đĩa.

Điểm Chính {#key-takeaways}

  • HLS là một giao thức phát trực tuyến, không phải một định dạng tệp. Nó cung cấp video dưới dạng một playlist (.m3u8) cộng với các segment ngắn (.ts hoặc fragmented MP4) qua HTTP thông thường.
  • .m3u8 là chỉ mục, không phải video. Lưu một mình tệp .m3u8 cho bạn một công thức không có nguyên liệu.
  • Apple đã tạo ra HLS vào năm 2009 cho iPhone và tiêu chuẩn hóa nó là RFC 8216 vào năm 2017. Nó hiện là bắt buộc trên iOS/Safari và được hỗ trợ gần như phổ biến ở những nơi khác.
  • Segment dài 2–10 giây mỗi cái — đủ ngắn để chuyển đổi chất lượng giữa chúng, đủ dài để giữ chi phí HTTP hợp lý.
  • Master playlist liệt kê các biến thể; media playlist liệt kê các segment. Trình phát đọc master, chọn một biến thể, sau đó tải media playlist của biến thể đó.
  • Các segment .ts đang được thay thế bởi fragmented MP4 (CMAF), để cùng một tệp có thể phục vụ các trình phát HLS và DASH từ một origin.
  • Hầu hết phát trực tuyến hiện đại nằm trên HLS hoặc DASH, thường là cả hai cùng lúc — bao gồm YouTube, Netflix, Disney+, Twitch, Apple TV+, và Cloudflare Stream.

M3U8 vs MP4: So Sánh Khác Biệt Cốt Lõi

Phần lớn mọi người gặp .m3u8 lần đầu khi cố tải video xuống nhưng thay vì tệp .mp4 quen thuộc, lại nhận được một tệp văn bản nhỏ. Hai định dạng này thường xuất hiện cùng quy trình nhưng về bản chất là hai loại khác hẳn — một bên là playlist (manifest), bên kia là container. Bảng sau tổng hợp các khác biệt được tìm kiếm nhiều nhất trong thực tế.

Tiêu chíM3U8 (playlist HLS)MP4 (container video)
Bản chấtPlaylist văn bản UTF-8 (manifest)Container nhị phân tự chứa video
Cách lưuMột tệp .m3u8 + hàng chục đến hàng trăm segment .ts/.m4sMột tệp .mp4 duy nhất
Kích thướcManifest chỉ vài KB; tổng segment tương đương MP4 cùng chất lượngToàn bộ video gói trong một tệp
Đổi chất lượngHỗ trợ adaptive bitrate (chuyển biến thể tức thì)Cố định một chất lượng duy nhất
Phát trực tiếpHỗ trợ gốc (manifest có thể thêm segment mới động)Không phù hợp với live
Tua/SeekTua tức thì theo biên segmentYêu cầu máy chủ hỗ trợ HTTP Range
Mã hoáHỗ trợ AES-128 cho segment và các lớp DRM như FairPlay/WidevineMặc định không mã hoá; có thể bọc DRM riêng
Yêu cầu trình phátCần trình phát hỗ trợ HLS (Safari, VLC, IINA, hls.js…)Hầu như mọi trình phát đều phát được
Dùng điển hìnhPhát online trên Netflix, YouTube, Twitch, Apple TV+Phát máy local, tải xuống, dựng, đính kèm email
Để phát offlinePhải ghép toàn bộ segment theo thứ tự playlist thành một MP4Đã sẵn sàng là tệp có thể chia sẻ

Tóm tắt một câu: M3U8 là “mục lục”, còn MP4 là “tệp thành phẩm”. Khi xem online trình duyệt nhận manifest M3U8 và kéo segment theo nhu cầu. Khi muốn lưu trữ lâu dài hoặc chia sẻ cho bạn bè, người dùng thường kết thúc bằng việc ghép các segment trở lại thành MP4.

Giải Thích Đơn Giản

Quên các giao thức trong giây lát. Hãy tưởng tượng một đạo diễn cần vận chuyển một bộ phim đã hoàn thành đến những người xem trên toàn thế giới qua internet không đáng tin cậy. Gửi một MP4 khổng lồ là không khả thi: nếu kết nối của người xem bị rớt giữa quá trình tải xuống, họ trở về số không, và không có cách nào để chuyển đổi chất lượng mà không cần tải lại. Vì vậy, thay vào đó, đạo diễn cắt bộ phim thành hàng trăm clip 6 giây và viết một playlist được đánh số nói “phát clip 001, sau đó 002, sau đó 003…” Trình phát của người xem tải xuống playlist, lấy vài clip đầu tiên, và bắt đầu phát trong khi phần còn lại trôi vào phía sau. Nếu kết nối chậm lại, trình phát chuyển sang phiên bản chất lượng thấp hơn của clip tiếp theo mà không bỏ lỡ một khung hình.

Đó là HLS trong một câu: một bộ phim được cắt thành các clip ngắn, cộng với một tệp playlist .m3u8 nói cho trình phát biết clip nào sẽ phát tiếp theo.

Từ chỗ ngồi của người xem, thiết kế này giấu rất nhiều phép màu. Seek tức thì vì trình phát có thể nhảy đến bất kỳ segment nào bao phủ dấu thời gian mục tiêu thay vì phát qua toàn bộ tệp. Thay đổi chất lượng mượt mà vì trình phát có thể chọn một biến thể khác cho segment tiếp theo mà không cần khởi động lại quá trình phát. Đệm nhẹ nhàng vì trình phát chỉ cần giữ vài segment phía trước — thường là 10 đến 30 giây — thay vì tải xuống trước các đoạn lớn của tệp. Và phát trực tiếp hoạt động được vì các segment mới có thể được nối thêm vào playlist khi nhà phát sóng tạo ra chúng, với trình phát thăm dò .m3u8 cho các mục mới sau mỗi vài giây.

Nếu bạn từng tự hỏi tại sao một luồng YouTube hoặc Netflix tự nó lấy lại mượt mà khi Wi-Fi của bạn dao động, trong khi một bản tải xuống MP4 trực tiếp từ một trang web ngẫu nhiên dừng lại và chết, đây là lý do. Toàn bộ stack được thiết kế xung quanh giả định rằng internet lộn xộn và các kết nối đến và đi. Một cuộc thảo luận dài về cách các trình phát thích ứng chất lượng trên đường nằm trong bài viết riêng của nó; ở đây, chỉ nhận thấy rằng thiết kế segment-và-playlist là thứ làm cho sự thích ứng đó có thể thực hiện được.

HLS Thực Sự Hoạt Động Như Thế Nào

Một luồng HLS là hai lớp playlist cộng với một đống segment, tất cả được phục vụ qua HTTP thông thường. Không có gì kỳ lạ, không có giao thức tùy chỉnh — trình duyệt của bạn đã biết cách làm mọi phần của điều này.

Master Playlist

Điều đầu tiên mà một trình phát lấy là master playlist. Đó là một tệp văn bản nhỏ với phần mở rộng .m3u8 liệt kê mọi biến thể có sẵn của luồng — thường là các mức chất lượng khác nhau — cùng với băng thông và độ phân giải của mỗi cái. Đây là cách một cái thực trông như, được cắt gọn nhẹ:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"
1080p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2"
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854x480,CODECS="avc1.4d401e,mp4a.40.2"
480p/index.m3u8

Dòng #EXTM3U đánh dấu tệp là một playlist M3U mở rộng. #EXT-X-VERSION:6 khai báo phiên bản giao thức HLS nào đang được sử dụng. Mỗi khối #EXT-X-STREAM-INF mô tả một biến thể: bitrate, độ phân giải, và chuỗi codec của nó, theo sau là một URL trỏ đến playlist thứ hai cho biến thể đó. Trình phát đọc tệp này, ước tính băng thông của bạn, và chọn biến thể mà nó nghĩ bạn có thể duy trì.

Media Playlist

Khi trình phát chọn một biến thể, nó lấy media playlist của biến thể đó. Đây là nơi các URL segment thực tế nằm:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:6.000,
segment000.ts
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST

#EXT-X-TARGETDURATION:6 nói không segment nào dài hơn 6 giây. Mỗi dòng #EXTINF:6.000, công bố thời lượng chính xác của segment, theo sau là URL segment. #EXT-X-ENDLIST nói với trình phát đây là một luồng video-theo-yêu-cầu — sẽ không có thêm segment nào được thêm vào. Các luồng trực tiếp bỏ qua #EXT-X-ENDLIST, và trình phát yêu cầu lại playlist này sau mỗi vài giây để phát hiện các segment mới.

Segment: .ts và fMP4

Segment là các đoạn ngắn của video và âm thanh — thường là 2 đến 10 giây — được cắt trên ranh giới khung hình khóa để trình phát có thể bắt đầu giải mã từ đầu bất kỳ segment nào. Khi playlist tuyên bố #EXT-X-INDEPENDENT-SEGMENTS, mọi segment được đảm bảo có thể phát một mình; nếu không có cờ đó, các segment hạ nguồn có thể phụ thuộc vào dữ liệu được mang trong các segment trước đó. Trong lịch sử, các segment là các tệp MPEG-2 Transport Stream với phần mở rộng .ts — cùng định dạng container vận chuyển TV vệ tinh và cáp. MPEG-TS được thiết kế cho các kênh phát sóng ồn ào, nên nó mạnh mẽ chống lại sự hư hỏng một phần, và bất kỳ trình phát nào có thể giải mã các gói .ts đều có thể phát một segment HLS.

Độ dài segment điển hình là 2 đến 10 giây. Segment ngắn hơn nghĩa là độ trễ thấp hơn và chuyển đổi bitrate linh hoạt hơn, nhưng nhiều yêu cầu HTTP hơn và nhiều chi phí hơn mỗi phút video. Segment dài hơn nghĩa là hiệu quả nén tốt hơn và ít yêu cầu hơn, nhưng phản ứng chậm hơn với thay đổi băng thông. Đặc tả gốc của Apple đề xuất segment 10 giây; các dịch vụ hiện đại thường ổn định ở phạm vi 2–6 giây.

Kể từ năm 2016, ngành công nghiệp đã di chuyển từ .ts sang các segment fragmented MP4 — cụ thể là Common Media Application Format (CMAF), được tiêu chuẩn hóa là ISO/IEC 23000-19. Các segment CMAF sử dụng cùng phân mảnh MP4 như MPEG-DASH, nghĩa là một tập tệp duy nhất trên một CDN có thể phục vụ cả các trình phát HLS và DASH. Đây là một chiến thắng chi phí đáng kể cho các dịch vụ phát trực tuyến: một lần mã hóa, một tập byte, hai giao thức. Các luồng HLS hiện đại từ YouTube, Netflix, và Apple gần như tất cả đều là CMAF chứ không phải MPEG-TS cũ.

HTTP Từ Đầu Đến Cuối

“HTTP” trong HTTP Live Streaming là cao trào. Không có giao thức đặc biệt trên đường dây — mọi phần của HLS đi qua cùng các yêu cầu HTTPS mà trình duyệt của bạn dùng cho HTML và JPEG. CDN yêu thích điều này vì chúng đã được tối ưu hóa cho HTTP. Tường lửa cho phép nó vì không có gì trông bất thường. CDN có thể cache các segment phổ biến ở biên. Yêu cầu phạm vi, gzip, HTTP/2, HTTP/3, TLS — tất cả đều hoạt động miễn phí.

Đây cũng là lý do HLS đã thắng. Các giao thức phát trực tuyến trước đó như RTMP, RTSP, và MMS cần các cổng chuyên dụng, máy chủ stateful, và các quy tắc tường lửa đặc biệt. HLS chỉ trông như một trang web phục vụ rất nhiều tệp nhỏ.

Hầu hết người dùng không cần xử lý điều này thủ công — VidMost phân tích manifest .m3u8 và hợp nhất các segment thành một MP4 sạch trong nền.

Bạn Gặp HLS Ở Đâu Trong Thực Tế

HLS có mặt trên hầu như mọi dịch vụ phát trực tuyến lớn vào năm 2026, thường cùng với DASH. Apple đã phát minh ra HLS vào năm 2009 cụ thể để cung cấp video cho iPhone gốc — thiết bị không thể xử lý tốt việc tải xuống tuần tự qua mạng di động, và Apple muốn một định dạng phát trực tuyến chỉ trông giống như lưu lượng HTTP đối với các nhà mạng. Giao thức đã trở thành mặc định cho một lát cắt khổng lồ của internet kể từ đó.

  • Các dịch vụ riêng của Apple chỉ dùng HLS. Apple TV+, iTunes Store, podcast trên Apple Podcasts, và mọi video phát trên Safari, iOS, hoặc tvOS đều nằm trên HLS. Các nền tảng Apple không vận chuyển bộ giải mã MPEG-DASH tích hợp, vì vậy bất kỳ dịch vụ nào muốn phát trên iPhone phải cung cấp feed HLS.
  • YouTube sử dụng MPEG-DASH làm giao thức chính trên web và Android, nhưng vận chuyển HLS cho iOS, Safari, AirPlay, và hầu hết các ứng dụng TV. Mở công cụ phát triển trình duyệt trên YouTube trong Safari và bạn sẽ thấy các yêu cầu .m3u8; trong Chrome trên Android, bạn sẽ thấy các yêu cầu DASH .mpd thay vào đó.
  • Netflix, Disney+, Hulu, Max, và Amazon Prime Video đều dùng kết hợp. Các ứng dụng TV thông minh và console của họ thường dùng HLS với DRM FairPlay hoặc PlayReady; các trình phát web của họ thường chuyển sang DASH với Widevine. Cùng nội dung, giao thức khác nhau cho mỗi client.
  • Twitch đã chạy trên HLS kể từ năm 2014 khi nó bỏ stack RTMP cũ ở phía phát. Mọi luồng trực tiếp và mọi VOD trên Twitch đều là HLS dưới mui xe.
  • Các nền tảng cam trực tiếp và sáng tạo nội dung — Bigo Live, Chaturbate, OnlyFans live, các luồng Fansly — hầu như đều sử dụng HLS cho phát phía trình duyệt vì nó hoạt động không cần plugin và chịu được các kết nối không đáng tin cậy.
  • Các nhà cung cấp video được lưu trữ như Vimeo, Mux, JW Player, và Cloudflare Stream cung cấp HLS theo mặc định. Nếu một trang web nhúng iframe Vimeo hoặc Mux, video bên dưới gần như chắc chắn là HLS.
  • Các đài phát sóng thể thao và tin tức — ESPN, BBC iPlayer, DAZN, Sling TV — tất cả đều dựa vào HLS để phân phối sự kiện trực tiếp, thường với DRM được xếp lớp lên trên.

HLS đã thoát khỏi nguồn gốc iOS của nó vì nó giải quyết các vấn đề thực sự cho mọi người, không chỉ Apple. Đến lúc DASH ra mắt vào năm 2012, HLS đã có hỗ trợ CDN rộng rãi, các trình phát hoạt động trong thực tế, và đà phát triển. Ngày nay hai giao thức cùng tồn tại; một dịch vụ phát trực tuyến chu đáo hỗ trợ cả hai, và nhiều dịch vụ vận chuyển cùng các segment CMAF dưới cả hai định dạng manifest. Để biết thêm về cách DASH so với HLS chi tiết, bài viết anh em đề cập nó từ đầu đến cuối.

Điều Này Có Ý Nghĩa Gì Nếu Bạn Muốn Lưu Video

Biết HLS hoạt động như thế nào làm cho một vấn đề thực tế trở nên rõ ràng đột ngột: bạn không thể chỉ “nhấp chuột phải → Save As” để tải xuống một video HLS. Một vài lý do là cơ học, một vài là tinh tế, và một hoặc hai sẽ làm bạn bất ngờ.

  • Save As của trình duyệt chỉ lưu .m3u8. .m3u8 là những gì trang thực sự tải xuống khi bắt đầu phát — một tệp văn bản nhỏ. Lưu nó cho bạn công thức, không phải thức ăn. Mở tệp đó trong VLC đôi khi hoạt động (VLC sẽ theo các URL bên trong), nhưng chỉ khi phiên gốc vẫn còn hiệu lực và các URL chưa hết hạn.
  • Mỗi segment là một yêu cầu HTTP riêng biệt. Một video 30 phút với các segment 6 giây là 300 lần tải xuống riêng biệt. Bạn sẽ cần liệt kê playlist, lấy mọi segment, và nối chúng theo đúng thứ tự trước khi chúng có thể phát được như một tệp duy nhất.
  • Lựa chọn biến thể là một sự lựa chọn thực sự. Master playlist liệt kê nhiều chất lượng. Chọn sai sẽ cho bạn một bản sao 480p của một bộ phim đang phát trực tuyến ở 1080p. Lựa chọn đúng thường là biến thể có băng thông cao nhất mà bộ nhớ và sự kiên nhẫn của bạn có thể hấp thụ.
  • HTTPS bảo vệ các byte trong quá trình vận chuyển, không phải các byte trên đĩa. Các URL segment hầu như luôn được phục vụ qua HTTPS, vì vậy một kẻ nghe trộm trên mạng không thể đọc những gì bạn đang phát trực tuyến. Nhưng khi một segment đến trình duyệt của bạn, nó là video văn bản thô — TLS không làm gì để ngăn chặn một công cụ đã có quyền truy cập vào phản hồi.
  • HLS hỗ trợ mã hóa segment AES-128 như một lớp nội dung. Khi .m3u8 mang một thẻ #EXT-X-KEY, mỗi segment được mã hóa bằng AES-128 và playlist trỏ đến một URL khóa mà trình phát lấy qua HTTPS. Lưu các segment mà không có khóa và bạn có một thư mục văn bản mã hóa. Đây là mã hóa nội dung, tách biệt với bảo mật vận chuyển, và nó không có kiểm tra quyền nào được tích hợp — chính URL khóa là cổng.
  • DRM thương mại là một vấn đề khác. Các dịch vụ cao cấp như Netflix, Disney+, và Apple TV+ xếp lớp HLS với FairPlay (Apple), Widevine (Google), hoặc PlayReady (Microsoft). Mã hóa trên đường dây vẫn dựa trên AES, nhưng các khóa được phát hành bởi một máy chủ giấy phép chỉ sau khi trình phát chứng minh quyền trên một thiết bị đáng tin cậy, và việc giải mã xảy ra bên trong một mô-đun bảo mật được hỗ trợ bởi phần cứng để các khung hình không bao giờ chạm vào bộ nhớ ứng dụng. Xem Nội Dung Được Bảo Vệ Bởi DRM Là Gì? để biết toàn cảnh.
  • Token và URL có chữ ký hết hạn. Nhiều URL .m3u8 và URL segment được ký bằng các token ngắn hạn hết hạn trong vài phút. Đến lúc bạn đã viết script tải xuống thủ công, một nửa các liên kết của bạn có thể đã chết.

Đây là nơi VidMost được xây dựng để tiếp quản. VidMost được thiết kế để sao lưu hợp pháp nội dung HLS mà bạn có quyền truy cập chính đáng — bản lưu trữ buổi livestream của chính bạn, các bài giảng có phí mà bạn đã mua, video có giấy phép tự do hoặc thuộc phạm vi công cộng, tài liệu đào tạo doanh nghiệp không có DRM thương mại, và các nội dung thuê bao trả phí mà điều khoản dịch vụ cho phép tải xuống. VidMost phân tích manifest .m3u8, chọn biến thể chất lượng cao nhất có sẵn, tải xuống mỗi segment song song từ cùng CDN mà trình duyệt của bạn đã nói chuyện, xử lý mã hóa AES-128 ở mức segment một cách tự động, và remux các segment thành một tệp MP4 sạch duy nhất khi hoàn tất. Các luồng được bảo vệ bởi DRM thương mại như FairPlay, Widevine hay PlayReady trên các dịch vụ cao cấp (Netflix, Disney+, Apple TV+) nằm ngoài phạm vi thiết kế của VidMost — vui lòng tuân thủ điều khoản dịch vụ của từng nền tảng và luật pháp tại nơi bạn cư trú. Với các trường hợp còn lại, trải nghiệm người dùng là “dán một URL hợp lệ, nhận một MP4” — lớp giao thức biến mất.

Những Hiểu Lầm Và Cạm Bẫy Phổ Biến

Một số ít hiểu lầm về HLS xuất hiện trong các chủ đề diễn đàn lặp đi lặp lại. Đáng để làm rõ.

  • “.m3u8 không phải là tệp video.” Nó là chỉ mục. Video thực sự nằm trong các segment mà playlist tham chiếu. Nếu một công cụ đề nghị “tải xuống m3u8,” hãy hỏi liệu nó cũng lấy và hợp nhất các segment hay không — nếu không bạn có một tệp văn bản vô dụng.
  • “Tệp .ts sẽ không phát trực tiếp trong hầu hết các trình phát.” Một segment đơn lẻ có thể phát vài giây trong VLC, nhưng toàn bộ video không phải là một chuỗi các tệp .ts trong một thư mục — nó là một chuỗi mà mỗi cái phải được giải mã theo thứ tự và được ghép lại với nhau. Các trình phát không nói HLS sẽ tốt nhất là phát segment đầu tiên và dừng lại.
  • “HLS không phải lúc nào cũng có nghĩa là trực tiếp.” “HTTP Live Streaming” là một cái tên gây hiểu lầm vào năm 2026. HLS hoạt động tốt như nhau cho video theo yêu cầu: cùng playlist, cùng segment, chỉ với #EXT-X-ENDLIST đánh dấu một luồng hữu hạn. Đại đa số nội dung danh mục Netflix, Disney+, và Apple TV+ là VOD HLS, không phải trực tiếp.
  • “Bitrate cao hơn không phải lúc nào cũng là chất lượng tốt hơn nếu kết nối của bạn bị rớt.” Một biến thể 10 Mbps trông tuyệt vời trên cáp quang và lắp bắp khổ sở trên một đường truyền di động 3 Mbps. Toàn bộ điểm của thiết kế thích ứng là trình phát chọn những gì kết nối của bạn có thể duy trì — ghi đè nó thủ công thường làm cho trải nghiệm tệ hơn, không tốt hơn.
  • “Các công cụ tải xuống trình duyệt thường thất bại với HLS.” Các tiện ích mở rộng “video downloader” chung tìm các thẻ <video src="..."> trỏ vào tệp MP4. Các luồng HLS không phơi bày một URL như vậy; trình phát sử dụng Media Source Extensions để đưa các segment vào phần tử video theo cách lập trình. Đây chính là lý do tại sao các công cụ chuyên dụng phân tích manifest tồn tại.

Suy Nghĩ Kết Luận

HLS là hạ tầng im lặng dưới hầu hết video bạn xem. Nó hoạt động vì nó đã từ bỏ việc cố gắng thông minh về vận chuyển — không có giao thức tùy chỉnh, không có máy chủ đặc biệt, chỉ có các tệp văn bản .m3u8 và các segment .ts hoặc fMP4 được lấy qua cùng HTTP mà trình duyệt của bạn đã nói. Apple đã giải quyết một vấn đề điện thoại vào năm 2009 và vô tình xây dựng định dạng phát trực tuyến thống trị của hai thập kỷ tiếp theo.

Một khi bạn có thể nhận ra một yêu cầu .m3u8 trong tab mạng của trình duyệt và đọc một playlist, một lượng khổng lồ hành vi phát trực tuyến — các chuyển đổi chất lượng ngắn ngủi, seek tức thì, chỉ báo “đệm trước,” thư mục lạ của các tệp .ts mà bạn kết thúc với — ngừng là bí ẩn. Tất cả đều là cùng vòng lặp: lấy playlist, chọn biến thể, lấy segment, giải mã, lặp lại.

Nếu bạn muốn bỏ qua hoàn toàn lớp giao thức và chỉ lưu video, VidMost xử lý HLS, DASH, fMP4, và các luồng được bảo vệ bởi DRM.

Đọc thêm

Câu hỏi thường gặp

Tệp m3u8 là gì?
Tệp .m3u8 là một playlist văn bản UTF-8 được sử dụng bởi HTTP Live Streaming (HLS). Bản thân nó không chứa video — nó là một manifest liệt kê URL của các segment video thực tế (thường là tệp .ts hoặc .m4s) cùng với thời lượng và metadata của chúng. Trình phát đọc .m3u8 để biết các clip nào sẽ lấy và theo thứ tự nào. Tệp về cơ bản là mục lục cho một video phát trực tuyến.
Tôi mở tệp m3u8 như thế nào?
Tệp .m3u8 chỉ là một tệp văn bản, nên bất kỳ trình soạn thảo văn bản nào cũng sẽ mở nó để đọc. Để thực sự phát video mà nó trỏ đến, bạn cần một trình phát nói HLS: VLC, IINA, mpv, ffplay, Safari trên macOS hoặc iOS, hoặc bất kỳ trình duyệt web hiện đại nào thông qua hls.js. Nhấp đúp vào tệp hiếm khi hoạt động vì các URL bên trong thường là tương đối và chỉ hợp lệ trong bối cảnh phát trực tuyến gốc.
Tại sao video của tôi đến dưới dạng một loạt các tệp nhỏ?
Bởi vì các luồng HLS được chủ ý cắt thành các segment ngắn — thường là 2 đến 10 giây của .ts hoặc fragmented-MP4 mỗi cái, được cắt trên ranh giới khung hình khóa để trình phát có thể bắt đầu giải mã từ bất kỳ segment nào. Các công cụ tải xuống phía trình duyệt cố gắng lưu một luồng thường lưu mỗi segment như một tệp riêng biệt thay vì hợp nhất chúng. Để có được một MP4 có thể phát đơn lẻ, các segment phải được nối theo thứ tự liệt kê trong manifest .m3u8, và các track âm thanh và video được remux vào một container.
HLS có giống DASH không?
Không. Cả hai đều là các giao thức phát trực tuyến HTTP thích ứng và cả hai đều vận chuyển video dưới dạng một manifest cộng với các segment, nhưng chúng là các đặc tả khác nhau. HLS được tạo ra bởi Apple vào năm 2009 và được tiêu chuẩn hóa là RFC 8216; DASH (Dynamic Adaptive Streaming over HTTP) là một tiêu chuẩn ISO/IEC từ năm 2012. HLS dùng manifest .m3u8; DASH dùng manifest XML .mpd. HLS là bắt buộc trên iOS và Safari; DASH thống trị trên các TV thông minh, Android, và nhiều trình phát web.
Tôi có thể phát trực tiếp các tệp .ts không?
Đôi khi. Một tệp .ts là một container MPEG transport stream chứa video H.264 hoặc H.265 và âm thanh AAC. VLC, mpv, và ffplay thường có thể phát một segment .ts đơn lẻ, nhưng bạn chỉ thấy vài giây cảnh. Để xem toàn bộ video, bạn cần mọi segment được liệt kê trong .m3u8, theo thứ tự. Hầu hết các trình phát tiêu dùng gặp khó khăn với các chuỗi tệp .ts ngay cả khi tất cả chúng đều có mặt — bạn thường sẽ cần remux chúng thành MP4 trước.
Tại sao HLS chọn các chất lượng khác nhau ở các thời điểm khác nhau?
Đó là phát trực tuyến bitrate thích ứng (ABR). Master playlist cung cấp một số biến thể — ví dụ 1080p ở 5 Mbps, 720p ở 3 Mbps, 480p ở 1.5 Mbps — và trình phát đo tốc độ tải xuống của các segment. Khi kết nối của bạn chậm lại, trình phát giảm xuống một biến thể thấp hơn tại ranh giới segment tiếp theo; khi nó tăng tốc, trình phát leo trở lại. Kết quả là ít đệm lại hơn với cái giá là sự thay đổi chất lượng có thể nhìn thấy đôi khi.
Sự khác biệt giữa master playlist m3u8 và media playlist là gì?
Master playlist là một chỉ mục của các chỉ mục: nó liệt kê mọi biến thể chất lượng có sẵn với băng thông, độ phân giải, và codec của nó, nhưng không có URL segment thực tế. Media playlist là lịch trình thực sự cho một biến thể duy nhất — một danh sách có thứ tự các URL segment với thời lượng của chúng. Trình phát tải master trước để chọn một biến thể, sau đó tải media playlist của biến thể đó để bắt đầu lấy các segment. Một số luồng chỉ vận chuyển một media playlist nếu chỉ có một mức chất lượng.
Tải xuống các luồng HLS có hợp pháp không?
Phụ thuộc vào nội dung và khu vực pháp lý của bạn. Tải xuống các luồng HLS mà bạn có quyền hợp pháp để xem — các bản lưu trữ livestream của riêng bạn, các bài giảng bạn đã trả tiền, nội dung được cấp phép tự do — thường không sao. Tải xuống các luồng thương mại được bảo vệ bởi DRM (Netflix, Disney+, Apple TV+) thường vi phạm điều khoản dịch vụ của nền tảng và có thể kích hoạt các luật chống phá vỡ như DMCA §1201 ở Hoa Kỳ. Luôn kiểm tra các quy tắc nơi bạn sống và các điều khoản bạn đã đồng ý.