Đị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 cấp cao nhất, các cấp này là:

  • Định dạng của từng mẫu nội dung nghe nhìn (chẳng hạn như một khung hình video hoặc một khung hình â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 định dạng cho video (ví dụ: H.264) và một định dạng cho âm thanh (ví dụ: AAC).
  • Định dạng của vùng chứa lưu trữ các mẫu nội dung nghe nhìn và siêu dữ liệu liên quan. Đây là các định dạng vùng chứa. Tệp phương tiện có một định dạng vùng chứa (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à định dạng vùng chứa có thể giống nhau.
  • Các công nghệ truyền phát 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ả tính năng hỗ trợ cho các định dạng phụ đề độc lập và tính năng phát video HDR.

Phát 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. Các luồng nội dung đa phương tiện phải được phân tách, nghĩa 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à trường hợp ngoại lệ như mô tả trong bảng bên dưới). Định dạng mẫu âm thanh và video có trong tệp 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 Chỉ các luồng đã giải mã
WebM Chỉ các luồng đã giải mã
Matroska Chỉ các luồng đã giải mã
MPEG-TS KHÔNG Không có kế hoạch hỗ trợ
Phụ đề chi tiết/phụ đề
TTML Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30
WebVTT Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30
CEA-608 Được nhúng trong FMP4 khi được báo hiệu bằng cách sử dụng nội dung mô tả Hỗ trợ tiếp cận SCTE
CEA-708 Được nhúng trong FMP4 khi được báo hiệu bằng cách sử dụng nội dung mô tả Hỗ trợ tiếp cận SCTE
Siêu dữ liệu
Siêu dữ liệu EMSG Được nhúng trong FMP4
Biện pháp bảo vệ nội dung
Widevine Lược đồ "cenc": API 19 trở lên; Lược đồ "cbcs": API 25 trở lên
PlayReady SL2000 Android TV, chỉ áp dụng lược đồ "cenc"
ClearKey API 21 trở lên, chỉ áp dụng lược đồ "cenc"
Phát trực tiếp
Phát trực tiếp thông thường
Phát trực tiếp CMAF có độ trễ cực thấp
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) Hướng dẫn tích hợp

SmoothStreaming

ExoPlayer hỗ trợ SmoothStreaming bằng định dạng vùng chứa FMP4. Các luồng nội dung đa phương tiện phải được giải mã, 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. Định dạng mẫu âm thanh và video có trong tệp 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 Chỉ các luồng đã giải mã
Phụ đề chi tiết/phụ đề
TTML Được nhúng trong FMP4
Biện pháp bảo vệ nội dung
PlayReady SL2000 Chỉ phát hành cho Android TV
Phát trực tiếp
Phát trực tiếp thông thường
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) 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. Định dạng mẫu âm thanh và video có trong tệp 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 khuyến khích 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
FMP4/CMAF
ADTS (AAC)
MP3
Phụ đề chi tiết/phụ đề
CEA-608
CEA-708
WebVTT
Siêu dữ liệu
ID3
SCTE-35 KHÔNG
Biện pháp bảo vệ nội dung
AES-128
Mẫu AES-128 KHÔNG
Widevine API 19 trở lên ("cenc") và 25 trở lên ("cbcs")
PlayReady SL2000 Chỉ phát hành cho Android TV
Kiểm soát máy chủ
Bản cập nhật Delta
Chặn tải lại danh sách phát
Chặn tải gợi ý tải trước Ngoại trừ các dải byte có độ dài không xác định
Phát trực tiếp
Phát trực tiếp thông thường
HLS có độ trễ thấp (Apple)
HLS có độ trễ thấp (Cộng đồng) KHÔNG
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) Hướng dẫn tích hợp

Định dạng vùng chứa tăng tiến

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

Định dạng vùng chứa Có thể làm Bình luận
MP4
M4A
FMP4
WebM
Matroska
MP3 Một số luồng chỉ có thể tua bằng tính năng tua theo tốc độ bit không đổi**
Ogg Chứa Vorbis, Opus và FLAC
WAV
MPEG-TS
MPEG-PS
FLV Không thể tua*
ADTS (AAC) Chỉ có thể tua bằng tính năng tua theo tốc độ bit không đổi**
FLAC Sử dụng thư viện FLAC hoặc trình trích xuất FLAC trong thư viện ExoPlayer***
AMR Chỉ có thể tua bằng tính năng tua theo tốc độ bit không đổi**

* Tính năng tua không được hỗ trợ 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 nghe nhìn tua một cách hiệu quả. Nếu cần tính năng tua, bạn nên sử dụng định dạng vùng chứa phù hợp hơn.

** Các trình trích xuất này có cờ FLAG_ENABLE_CONSTANT_BITRATE_SEEKING để bật tính năng tìm kiếm gần đúng bằng cách 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ả trình trích xuất 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ý trên mọi cấp độ API. Trình trích xuất FLAC của thư viện ExoPlayer sẽ xuất ra các khung âm thanh FLAC và do đó, dựa 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 đã 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, trình phát 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. Dưới đây là danh sách các định dạng mẫu và loại mạng được hỗ trợ.

Đị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.

Các loại mạng được hỗ trợ

  • RTP qua giao thức truyền tin một địa chỉ UDP (không hỗ trợ truyền tin đa địa chỉ).
  • RTSP, RTP được xếp kề nhau 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ì ExoPlayer. Hãy tham khảo phần Các định dạng nội dung nghe nhìn được hỗ trợ để biết tài liệu về các định dạng mẫu mà thiết bị Android hỗ trợ. Xin lưu ý rằng từng thiết bị có thể hỗ trợ các định dạng khác ngoài những định dạng được liệt kê.

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

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 bộ giải mã cần đưa vào khi tạo thư viện, như được ghi lại trong 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 (Các) tên bộ giải mã
Vorbis vorbis
Opus opus
FLAC flac
ALAC alac
PCM μ-law pcm_mulaw
PCM A-law 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 mlp truehd

Hình ảnh

ExoPlayer hỗ trợ các định dạng hình ảnh sau. Hãy xem phần Thư viện tải hình ảnh để biết cách tích hợp với các thư viện bên ngoài có thể hỗ trợ nhiều định dạng.

Định dạng hình ảnh Có thể làm Ghi chú
BMP
GIF KHÔNG Không hỗ trợ Trình trích xuất
JPEG
Ảnh động JPEG Hỗ trợ ảnh tĩnh và video
JPEG Ultra HDR Quay lại SDR trước Android 14 hoặc trên màn hình không phải HDR
PNG
WebP
HEIF/HEIC
Ảnh chuyển động HEIC Một phần Chỉ hỗ trợ hình ảnh tĩnh*
AVIF (cơ sở) Chỉ giải mã được trên Android 14 trở lên

* Bạn có thể lấy phần video của ảnh động HEIC bằng MetadataRetriever và phát dưới dạng tệp độc lập.

Đị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ụ đề xuống theo cách không qua cửa hàng như mô tả trên trang mục nội dung nghe nhìn.

Định dạng vùng chứa Có thể làm Loại MIME
WebVTT MimeTypes.TEXT_VTT
TTML / SMPTE-TT MimeTypes.APPLICATION_TTML
SubRip MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) 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 khả năng hỗ trợ của nền tảng Android và thiết bị. Hãy xem phần Phát video HDR để tìm hiểu về cách kiểm tra khả năng giải mã/hiển thị HDR và các giới hạn của tính năng 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 hồ sơ 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ợ hồ sơ đó (nếu có), ngay cả khi một bộ giải mã khác cho cùng một loại MIME không hỗ trợ hồ sơ đó 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.