Định dạng được hỗ trợ

Khi xác định các định dạng mà ExoPlayer hỗ trợ, điều quan trọng cần lưu ý là "định dạng nội dung nghe nhìn" được xác định ở nhiều cấp độ. Từ cấp thấp nhất đến cao nhất, là:

  • Định dạng của từng mẫu nội dung nghe nhìn (chẳng hạn như một khung video hoặc một khung âm thanh). Đây là các định dạng mẫu. Xin lưu ý rằng một tệp video thông thường sẽ chứa nội dung nghe nhìn ở ít nhất hai định dạng mẫu; một cho video (ví dụ: H.264) và một cho âm thanh (ví dụ: AAC).
  • Định dạng của vùng chứa chứa các mẫu nội dung nghe nhìn và siêu dữ liệu được liên kết. Đây là các định dạng vùng chứa. Tệp nội dung nghe nhìn có một định dạng vùng chứa duy nhất (ví dụ: MP4), thường được biểu thị bằng đuôi tệp. Xin lưu ý rằng đối với một số định dạng chỉ có âm thanh (ví dụ: MP3), định dạng mẫu và vùng chứa có thể giống nhau.
  • Các công nghệ phát trực tiếp thích ứng như DASH, SmoothStreaming và HLS. Đây không phải là các định dạng nội dung nghe nhìn, tuy nhiên, bạn vẫn cần xác định mức độ hỗ trợ mà ExoPlayer cung cấp.

Các phần sau đây xác định khả năng hỗ trợ của ExoPlayer ở từng cấp, từ cao nhất đến thấp nhất. Hai phần cuối mô tả khả năng hỗ trợ các định dạng phụ đề độc lập và tính năng phát video HDR.

Truyền trực tuyến thích ứng

DASH (Truyền phát thích ứng động qua HTTP)

ExoPlayer hỗ trợ DASH với nhiều định dạng vùng chứa. Bạn phải loại bỏ các luồng nội dung nghe nhìn, tức là video, âm thanh và văn bản phải được xác định trong các phần tử AdaptationSet riêng biệt trong tệp kê khai DASH (CEA-608 là một trường hợp ngoại lệ theo mô tả trong bảng dưới đây). Các định dạng mẫu âm thanh và video chứa trong đó cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết).

Tính năng Có thể làm Bình luận
Vùng chứa
FMP4 NÊN Chỉ các luồng đã được lọc
WebM NÊN Chỉ các luồng đã được lọc
Tiếng Matroska NÊN Chỉ các luồng đã được lọc
MPEG-TS KHÔNG NÊN Chưa lên kế hoạch hỗ trợ
Phụ đề chi tiết
TTML NÊN Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30
WebVTT NÊN Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30
CEA-608 NÊN Được nhúng trong FMP4 khi được báo hiệu bằng bộ mô tả Hỗ trợ tiếp cận theo chuẩn SCTE
CEA-708 NÊN Được nhúng trong FMP4 khi được báo hiệu bằng bộ mô tả Hỗ trợ tiếp cận theo chuẩn SCTE
Siêu dữ liệu
Siêu dữ liệu về EMSG NÊN Được nhúng trong FMP4
Bảo vệ nội dung
Widevine NÊN Lược đồ "cenc": API 19 trở lên; lược đồ "cbcs": API 25 trở lên
PlayReady SL2000 NÊN Android TV, chỉ giao thức "cenc"
Khoá Xoá NÊN Chỉ API 21 trở lên, giao thức "cenc"
Phát trực tiếp
Phát trực tiếp định kỳ NÊN
Phát trực tiếp CMAF độ trễ thấp nhất NÊN
Dữ liệu ứng dụng đa phương tiện chung (CMCD) NÊN Hướng dẫn tích hợp

SmoothStreaming

ExoPlayer hỗ trợ SmoothStreaming với định dạng vùng chứa FMP4. Các luồng nội dung đa phương tiện phải được ẩn, nghĩa là video, âm thanh và văn bản phải được xác định trong các phần tử StreamIndex riêng biệt trong tệp kê khai SmoothStreaming. Các định dạng mẫu âm thanh và video có trong đó cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết).

Tính năng Có thể làm Bình luận
Vùng chứa
FMP4 NÊN Chỉ các luồng đã được lọc
Phụ đề chi tiết
TTML NÊN Được nhúng trong FMP4
Bảo vệ nội dung
PlayReady SL2000 NÊN Chỉ phát hành cho Android TV
Phát trực tiếp
Phát trực tiếp định kỳ NÊN
Dữ liệu ứng dụng đa phương tiện chung (CMCD) NÊN Hướng dẫn tích hợp

HLS (Phát trực tuyến dựa trên HTTP)

ExoPlayer hỗ trợ HLS với nhiều định dạng vùng chứa. Các định dạng mẫu âm thanh và video có trong đó cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết). Chúng tôi đặc biệt khuyến khích các nhà sản xuất nội dung HLS tạo luồng HLS chất lượng cao, như mô tả tại đây.

Tính năng Có thể làm Bình luận
Vùng chứa
MPEG-TS NÊN
FMP4/CMAF NÊN
ADTS (AAC) NÊN
MP3 NÊN
Phụ đề chi tiết
CEA-608 NÊN
CEA-708 NÊN
WebVTT NÊN
Siêu dữ liệu
Mã nhận dạng 3 NÊN
SCTE-35 KHÔNG NÊN
Bảo vệ nội dung
AES-128 NÊN
Mẫu AES-128 KHÔNG NÊN
Widevine NÊN API 19+ (lược đồ "cenc") và 25+ (lược đồ cbcs)
PlayReady SL2000 NÊN Chỉ phát hành cho Android TV
Kiểm soát máy chủ
Thông tin cập nhật về Delta NÊN
Chặn tải lại danh sách phát NÊN
Chặn hoạt động tải gợi ý tải trước NÊN Ngoại trừ các dải ô có độ dài không xác định
Phát trực tiếp
Phát trực tiếp định kỳ NÊN
HLS độ trễ thấp (Táo) NÊN
HLS độ trễ thấp (Cộng đồng) KHÔNG NÊN
Dữ liệu ứng dụng đa phương tiện chung (CMCD) NÊN Hướng dẫn tích hợp

Định dạng vùng chứa tiến bộ

ExoPlayer có thể phát trực tiếp các luồng ở các định dạng vùng chứa sau đây. Các định dạng mẫu âm thanh và video bên trong cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết).

Định dạng vùng chứa Có thể làm Bình luận
MP4 NÊN
M4A NÊN
FMP4 NÊN
WebM NÊN
Tiếng Matroska NÊN
MP3 NÊN Một số luồng chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi khi tua**
Ogg NÊN Chứa Vorbis, Opus và FLAC
WAV NÊN
MPEG-TS NÊN
MPEG-PS NÊN
FLV NÊN Không thể tìm kiếm*
ADTS (AAC) NÊN Chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi đang tua**
FLAC NÊN Sử dụng thư viện FLAC hoặc trình trích xuất FLAC trong thư viện ExoPlayer***
AMR (phản ứng cực khoái độc lập về giác quan) NÊN Chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi đang tua**
Ảnh chuyển động JPEG NÊN Chỉ nội dung MP4 được trích xuất

* Không hỗ trợ tính năng tìm kiếm vì vùng chứa không cung cấp siêu dữ liệu (ví dụ: chỉ mục mẫu) để cho phép trình phát nội dung đa phương tiện thực hiện thao tác tìm kiếm một cách hiệu quả. Nếu cần phải tìm kiếm, bạn nên sử dụng định dạng vùng chứa phù hợp hơn.

** Các công cụ trích xuất này có cờ FLAG_ENABLE_CONSTANT_BITRATE_SEEKING để cho phép tìm kiếm gần đúng bằng cách sử dụng giả định tốc độ bit không đổi. Chức năng này không được bật theo mặc định. Cách đơn giản nhất để bật chức năng này cho tất cả các trình trích xuất có hỗ trợ chức năng này là sử dụng DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, như mô tả tại đây.

*** Trình trích xuất thư viện FLAC sẽ xuất ra âm thanh thô mà khung có thể xử lý ở tất cả các cấp độ API. Trình trích xuất FLAC của thư viện ExoPlayer xuất ra các khung âm thanh FLAC và do đó phụ thuộc vào việc có bộ giải mã FLAC (ví dụ: bộ giải mã MediaCodec xử lý FLAC (bắt buộc từ API cấp 27) hoặc thư viện FFmpeg có bật FLAC). DefaultExtractorsFactory sẽ dùng trình trích xuất tiện ích nếu ứng dụng được tạo bằng thư viện FLAC. Nếu không, hệ thống sẽ sử dụng trình trích xuất thư viện ExoPlayer.

RTSP

ExoPlayer hỗ trợ cả RTSP trực tiếp và theo yêu cầu. Bạn có thể xem danh sách các định dạng mạng và định dạng mẫu được hỗ trợ bên dưới.

Định dạng mẫu được hỗ trợ

  • H264 (nội dung mô tả nội dung nghe nhìn SDP phải bao gồm dữ liệu SPS/PPS trong thuộc tính fmtp để khởi chạy bộ giải mã).
  • AAC (với luồng bit ADTS).
  • AC3.

Loại mạng được hỗ trợ

  • RTP qua UDP unicast (không hỗ trợ phát đa hướng).
  • RTSP xen kẽ, RTP qua RTSP bằng TCP.

Định dạng mẫu

Theo mặc định, ExoPlayer sử dụng bộ giải mã nền tảng của Android. Do đó, các định dạng mẫu được hỗ trợ phụ thuộc vào nền tảng cơ bản thay vì trên ExoPlayer. Hãy tham khảo Các định dạng nội dung nghe nhìn được hỗ trợ để xem tài liệu về các định dạng mẫu mà các thiết bị Android hỗ trợ. Xin lưu ý rằng các thiết bị riêng lẻ có thể hỗ trợ thêm các định dạng khác ngoài các định dạng được liệt kê.

Ngoài các bộ giải mã nền tảng của Android, ExoPlayer cũng có thể sử dụng các tiện ích giải mã phần mềm. Bạn phải tạo các lớp này theo cách thủ công và đưa vào các dự án muốn sử dụng. Chúng tôi hiện cung cấp thư viện bộ giải mã phần mềm cho AV1, VP9, FLAC, OpusFFmpeg.

Thư viện FFmpeg

Thư viện FFmpeg hỗ trợ giải mã nhiều định dạng mẫu âm thanh khác nhau. Bạn có thể chọn cần đưa vào bộ giải mã nào khi xây dựng thư viện, như ghi trong tệp README.md của thư viện. Bảng sau đây cung cấp thông tin liên kết từ định dạng mẫu âm thanh đến tên bộ giải mã FFmpeg tương ứng.

Định dạng mẫu Tên bộ giải mã
Vorbis xoáy tròn
Opus đàn opus
FLAC pháo hoa flac
ALAC (Đạo luật bảo vệ quyền riêng tư của California) alac
Bộ luật PCM pcm_mulaw
Luật A của PCM pcm_alaw
MP1, MP2, MP3 mp3
AMR-NB amrnb
AMR-WB amrwb
(chuẩn) AAC aac
AC-3 Ac3
E-AC-3 Eac3
DTS, DTS-HD dca
TrueHD truehd mlp

Định dạng phụ đề độc lập

ExoPlayer hỗ trợ các tệp phụ đề độc lập ở nhiều định dạng. Bạn có thể tải tệp phụ đề không qua cửa hàng ứng dụng như mô tả trên trang mục nội dung đa phương tiện.

Định dạng vùng chứa Có thể làm Loại MIME
WebVTT NÊN MimeTypes.TEXT_VTT
TTML / SMPTE-TT NÊN MimeTypes.APPLICATION_TTML
SubRip NÊN MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) NÊN MimeTypes.TEXT_SSA

Phát video HDR

ExoPlayer xử lý việc trích xuất video có dải động cao (HDR) trong nhiều vùng chứa, bao gồm cả Dolby Vision trong MP4 và HDR10+ trong Matroska/WebM. Việc giải mã và hiển thị nội dung HDR phụ thuộc vào sự hỗ trợ của nền tảng và thiết bị Android. Vui lòng xem phần Phát lại video HDR để tìm hiểu cách kiểm tra khả năng giải mã/hiển thị HDR và các giới hạn của việc hỗ trợ HDR trên các phiên bản Android.

Khi phát luồng HDR yêu cầu hỗ trợ một cấu hình bộ mã hoá và giải mã cụ thể, bộ chọn MediaCodec mặc định của ExoPlayer sẽ chọn một bộ giải mã hỗ trợ cấu hình đó (nếu có), ngay cả khi một bộ giải mã khác cho cùng loại MIME không hỗ trợ cấu hình đó xuất hiện ở vị trí cao hơn trong danh sách bộ mã hoá và giải mã. Điều này có thể dẫn đến việc chọn bộ giải mã phần mềm trong trường hợp luồng vượt quá khả năng của bộ giải mã phần cứng cho cùng một loại MIME.