Phân tích cấu trúc tệp M3U8: Hiểu rõ EXTM3U và các thẻ phát video theo từng dòng

Tệp M3U8 trông giống như một đống các hướng dẫn và liên kết, thực tế nó chính là một "kịch bản quy trình phát video". Trình phát sẽ không tự phán đoán video nên phát như thế nào, mà hoàn toàn làm theo nội dung trong M3U8, thực hiện từng dòng một. Chỉ cần hiểu rõ cấu trúc này, bạn sẽ hiểu tại sao một số luồng trực tuyến có thể phát, một số lại gặp lỗi, và cũng dễ dàng phán đoán vấn đề nằm ở đâu hơn.

cấu trúc tệp m3u8

Trước tiên hãy xem một ví dụ M3U8 cơ bản nhất

Trong thực tế, một tệp M3U8 đơn giản có thể trông như thế này:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.000,
segment1.ts
#EXTINF:10.000,
segment2.ts
#EXT-X-ENDLIST

Đây không phải là mã nguồn, mà là nội dung văn bản thuần túy. Khi trình phát đọc tệp, nó sẽ bắt đầu phân tích từ dòng đầu tiên, gặp các thẻ (tag) thì thiết lập các quy tắc, gặp tên tệp hoặc liên kết thì đi lấy các đoạn âm thanh và video.

Nếu bạn chưa rõ vai trò của M3U8 trong toàn bộ quy trình phát trực tuyến, trước tiên bạn có thể xem lại bài viết 👉 Phân tích đầy đủ về giao thức M3U8 và HLS, sau đó quay lại đọc phần này sẽ rõ ràng hơn nhiều.

Tại sao M3U8 nhất thiết phải là văn bản thuần túy?

Bởi vì trình phát cần đọc và cập nhật nội dung nhanh chóng. Định dạng văn bản thuần túy không chỉ giúp phân tích nhanh mà còn thuận tiện cho việc sửa đổi tức thời, điều này rất quan trọng đối với phát trực tiếp hoặc phát thời gian dài.

#EXTM3U là gì?

#EXTM3U là dấu hiệu bắt đầu của tất cả các tệp M3U8.

Tại sao nhất thiết phải có dòng này?

Công dụng của dòng này là nói cho trình phát biết: "Đây là một danh sách phát M3U định dạng mở rộng". Nếu không có dòng này, hầu hết các trình phát sẽ trực tiếp bỏ qua toàn bộ tệp.

Từ góc độ của trình phát, #EXTM3U giống như chứng minh thư của tệp, không có nó thì trình phát sẽ không tiếp tục đọc xuống dưới.

Các thẻ liên quan đến phiên bản và quy tắc phát

Sau #EXTM3U, thông thường bạn sẽ thấy một số thẻ bắt đầu bằng #EXT-X-, đây đều là những thẻ dùng để mô tả quy tắc phát.

#EXT-X-VERSION làm nhiệm vụ gì?

#EXT-X-VERSION được sử dụng để chỉ định phiên bản quy chuẩn HLS mà danh sách phát này đang sử dụng.

Ví dụ:

#EXT-X-VERSION:3

Điều này có nghĩa là khi trình phát phân tích, nó sẽ sử dụng quy tắc của phiên bản tương ứng để hiểu các hướng dẫn tiếp theo. Các phiên bản khác nhau hỗ trợ các tính năng khác nhau, khi phiên bản không khớp, đôi khi có thể khiến hành vi của trình phát không nhất quán.

Ý nghĩa của #EXT-X-TARGETDURATION

#EXT-X-TARGETDURATION:10

Dòng này có nghĩa là: Trong danh sách phát, thời gian tối đa của mỗi đoạn âm thanh video là khoảng 10 giây.

Trình phát sẽ sử dụng giá trị này để sắp xếp nhịp độ bộ đệm và cập nhật. Nếu thời gian đoạn video thực tế vượt quá giá trị này, trình phát có thể gặp hành vi bất thường.

Mối quan hệ giữa #EXTINF và các đoạn âm thanh video

#EXTINF là một trong những thẻ xuất hiện thường xuyên nhất trong toàn bộ M3U8.

Định dạng cơ bản của #EXTINF

#EXTINF:10.000,
segment1.ts

Điều này có nghĩa là:

  • Độ dài đoạn video này khoảng 10 giây.
  • segment1.ts ở dòng tiếp theo chính là tệp âm thanh video thực tế.

Khi trình phát thấy #EXTINF, nó sẽ ghi nhớ độ dài thời gian trước, sau đó ngay lập tức tải xuống tệp được chỉ định ở dòng tiếp theo.

Tại sao thời gian lại được viết ở đây?

Bởi vì trình phát cần biết mỗi đoạn sẽ phát trong bao lâu để có thể tính toán tiến trình, tải trước nội dung đoạn tiếp theo và chuyển đổi chất lượng hình ảnh vào thời điểm thích hợp.

Các đoạn âm thanh video có thể ở định dạng nào?

Trong HLS thời kỳ đầu, định dạng đoạn video phổ biến nhất là .ts, hiện nay ngày càng thấy nhiều fMP4.

Bất kể hậu tố tệp là gì, đối với M3U8, nó chỉ chịu trách nhiệm chỉ đến vị trí tệp, chứ không quan tâm đến định dạng nội dung. Công việc giải mã thực sự được giao cho trình phát xử lý.

#EXT-X-ENDLIST đại diện cho điều gì?

#EXT-X-ENDLIST

Dòng này đại diện cho việc danh sách phát đã kết thúc, sẽ không có thêm đoạn video mới nào được thêm vào.

Sự khác biệt khi có và không có ENDLIST?

  • Có ENDLIST: Thường đại diện cho video theo yêu cầu (VOD), số lượng đoạn video là cố định.
  • Không có ENDLIST: Thường thấy trong phát trực tiếp (Live), danh sách phát sẽ được cập nhật liên tục.

Trình phát sẽ dựa vào việc có dòng này hay không để quyết định xem có tiếp tục tải lại tệp M3U8 hay không.

Sự khác biệt về cấu trúc giữa danh sách phát chính và danh sách phát phụ

Ngoài danh sách phát chất lượng đơn lẻ, trong thực tế cấu trúc "đa chất lượng" phổ biến hơn nhiều.

Danh sách phát chính thường trông như thế nào?

Danh sách phát chính sẽ không trực tiếp liệt kê các đoạn âm thanh video, mà liệt kê các danh sách phát phụ tương ứng với các mức chất lượng khác nhau, ví dụ:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720
mid.m3u8

Trình phát sẽ đọc danh sách này trước, sau đó dựa vào tình trạng mạng để chọn một trong các danh sách phụ để phát.

Danh sách phát phụ mới là danh sách phát thực sự

Chỉ khi danh sách phát phụ được chọn, nó mới chứa #EXTINF và các đoạn âm thanh video thực tế. Thiết kế này chính là lý do tại sao việc tự động chuyển đổi chất lượng có thể thực hiện được.

Tại sao hiểu rõ cấu trúc lại giúp ích cho việc khắc phục lỗi?

Khi phát thất bại, nếu bạn biết trình phát "hiện đang bị kẹt ở bước nào", bạn có thể phán đoán nguồn gốc vấn đề nhanh hơn.

Các vấn đề liên quan đến cấu trúc thường gặp

  • Liên kết đoạn video bị hỏng.
  • Nội dung danh sách phát không được cập nhật.
  • Dấu thời gian không khớp với đoạn video thực tế.

Các vấn đề này đều có thể tìm thấy manh mối từ nội dung M3U8. Nếu bạn gặp lỗi phát bị kẹt hoặc thông báo lỗi, bạn có thể đối chiếu cùng với bài viết 👉 Các lỗi phát M3U8 thường gặp và giải pháp.

Sau khi hiểu cấu trúc, làm thế nào để kiểm tra phát thực tế?

Hiểu cấu trúc là một chuyện, nhưng xác nhận thực tế có phát được hay không lại là chuyện khác. Khi kiểm tra, bạn nên sử dụng trình phát hoặc công cụ trực tuyến có thể hiển thị thông báo lỗi để dễ dàng nhận biết dòng nào đang gặp vấn đề.

Nếu bạn không chắc chắn nên sử dụng phương thức kiểm tra nào, bạn có thể tham khảo 👉 Cách phát M3U8? Hướng dẫn đầy đủ.

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

Thứ tự trong M3U8 có nhất thiết không được lộn xộn không?
Thứ tự danh sách phát sẽ ảnh hưởng đến quy trình tải xuống và phát của trình phát, khi thứ tự sai sẽ rất dễ gây ra hiện tượng giật lag hoặc bị gián đoạn.

Có thể sửa đổi thủ công tệp M3U8 không?
Về mặt kỹ thuật là có thể, vì nó là một tệp văn bản, nhưng sau khi sửa đổi có thể phát bình thường hay không còn phụ thuộc vào nguồn luồng trực tuyến và việc đoạn video có tồn tại hay không.

Tại sao cùng một tệp M3U8 nhưng kết quả hiển thị trên các trình phát khác nhau lại khác nhau?
Mức độ hỗ trợ các thẻ của các trình phát là khác nhau, việc gặp phải sự khác biệt về tính tương thích là không hiếm gặp.

Sẵn sàng kiểm tra luồng M3U8 của bạn?

🚀 Thử trình phát M3U8 trực tuyến