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 | CÓ | Chỉ các luồng đã giải mã |
WebM | CÓ | Chỉ các luồng đã giải mã |
Matroska | CÓ | 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 | CÓ | Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30 |
WebVTT | CÓ | Thô hoặc nhúng trong FMP4 theo ISO/IEC 14496-30 |
CEA-608 | CÓ | Đượ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Ó | Đượ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Ó | Được nhúng trong FMP4 |
Biện pháp bảo vệ nội dung | ||
Widevine | CÓ | Lược đồ "cenc": API 19 trở lên; Lược đồ "cbcs": API 25 trở lên |
PlayReady SL2000 | CÓ | Android TV, chỉ áp dụng lược đồ "cenc" |
ClearKey | CÓ | 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 | CÓ | |
Phát trực tiếp CMAF có độ trễ cực thấp | CÓ | |
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) | CÓ | 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 | CÓ | Chỉ các luồng đã giải mã |
Phụ đề chi tiết/phụ đề | ||
TTML | CÓ | Được nhúng trong FMP4 |
Biện pháp bảo vệ nội dung | ||
PlayReady SL2000 | CÓ | Chỉ phát hành cho Android TV |
Phát trực tiếp | ||
Phát trực tiếp thông thường | CÓ | |
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) | CÓ | 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 | CÓ | |
FMP4/CMAF | CÓ | |
ADTS (AAC) | CÓ | |
MP3 | CÓ | |
Phụ đề chi tiết/phụ đề | ||
CEA-608 | CÓ | |
CEA-708 | CÓ | |
WebVTT | CÓ | |
Siêu dữ liệu | ||
ID3 | CÓ | |
SCTE-35 | KHÔNG | |
Biện pháp bảo vệ nội dung | ||
AES-128 | CÓ | |
Mẫu AES-128 | KHÔNG | |
Widevine | CÓ | API 19 trở lên ("cenc") và 25 trở lên ("cbcs") |
PlayReady SL2000 | CÓ | Chỉ phát hành cho Android TV |
Kiểm soát máy chủ | ||
Bản cập nhật Delta | CÓ | |
Chặn tải lại danh sách phát | CÓ | |
Chặn tải gợi ý tải trước | 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 | CÓ | |
HLS có độ trễ thấp (Apple) | CÓ | |
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) | CÓ | 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 | CÓ | |
M4A | CÓ | |
FMP4 | CÓ | |
WebM | CÓ | |
Matroska | CÓ | |
MP3 | CÓ | Một số luồng chỉ có thể tua bằng tính năng tua theo tốc độ bit không đổi** |
Ogg | CÓ | Chứa Vorbis, Opus và FLAC |
WAV | CÓ | |
MPEG-TS | CÓ | |
MPEG-PS | CÓ | |
FLV | CÓ | Không thể tua* |
ADTS (AAC) | CÓ | Chỉ có thể tua bằng tính năng tua theo tốc độ bit không đổi** |
FLAC | CÓ | Sử dụng thư viện FLAC hoặc trình trích xuất FLAC trong thư viện ExoPlayer*** |
AMR | CÓ | 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, MIDI và IAMF.
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 | CÓ | |
GIF | KHÔNG | Không hỗ trợ Trình trích xuất |
JPEG | CÓ | |
Ảnh động JPEG | CÓ | Hỗ trợ ảnh tĩnh và video |
JPEG Ultra HDR | CÓ | Quay lại SDR trước Android 14 hoặc trên màn hình không phải HDR |
PNG | CÓ | |
WebP | CÓ | |
HEIF/HEIC | CÓ | |
Ảnh chuyển động HEIC | Một phần | Chỉ hỗ trợ hình ảnh tĩnh* |
AVIF (cơ sở) | CÓ | 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 | CÓ | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | CÓ | MimeTypes.APPLICATION_TTML |
SubRip | CÓ | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | CÓ | 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.