เอกสารนี้อธิบายการรองรับตัวแปลงรหัสสื่อ คอนเทนเนอร์ และโปรโตคอลเครือข่ายที่แพลตฟอร์ม Android มีให้
ตารางด้านล่างอธิบายการรองรับรูปแบบสื่อที่สร้างขึ้นในแพลตฟอร์ม Android "ใช่" หมายความว่ารูปแบบนี้พร้อมใช้งานบนอุปกรณ์พกพาและแท็บเล็ตที่ใช้ Android ทุกเวอร์ชัน หากมีการระบุแพลตฟอร์ม Android ที่เฉพาะเจาะจง รูปแบบนี้จะใช้ได้ในโทรศัพท์มือถือและแท็บเล็ตที่ใช้เวอร์ชันนั้นและเวอร์ชันที่ใหม่กว่าทั้งหมด นอกจากนี้ รูปแบบนี้อาจมีให้บริการในเวอร์ชันก่อนหน้าด้วย แต่ไม่รับประกัน ในรูปแบบของอุปกรณ์อื่นๆ นอกเหนือจากโทรศัพท์มือถือและแท็บเล็ต การรองรับรูปแบบสื่ออาจแตกต่างกันไป
โปรดทราบว่าอุปกรณ์เคลื่อนที่บางเครื่องอาจรองรับรูปแบบหรือประเภทไฟล์เพิ่มเติมที่ไม่ได้แสดงในตารางเหล่านี้ นอกจากนี้ หากคุณใช้ MediaCodec โดยตรง คุณจะเข้าถึงรูปแบบสื่อที่มีอยู่ได้โดยไม่คำนึงถึงประเภทไฟล์และรูปแบบคอนเทนเนอร์ที่รองรับ
การสนับสนุนด้านเสียง
| รูปแบบ | โปรแกรมเปลี่ยนไฟล์ | เครื่องมือถอดรหัส | ประเภทไฟล์ รูปแบบคอนเทนเนอร์ | รายละเอียด | |
|---|---|---|---|---|---|
| เครื่องมือแยกข้อมูล | Muxer | ||||
| AAC LC | ใช่ | ใช่ |
• 3GPP (.3gp) • AAC ดิบ ADTS (.aac, ไม่รองรับ ADIF) • MPEG-TS (.ts, ค้นหาไม่ได้, Android 3.0 ขึ้นไป) |
• 3GPP (.3gp) • AAC ดิบ ADTS (.aac, ไม่รองรับ ADIF) • MPEG-TS (ไม่แน่ใจ) (.ts, ค้นหาไม่ได้, Android 3.0 ขึ้นไป) |
รองรับเนื้อหาโมโน/สเตอริโอ/5.0/5.1 ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 8 ถึง 48 kHz |
| HE-AACv1 (AAC+) | Android 4.1 ขึ้นไป | ใช่ | |||
| HE-AACv2 (AAC+ ที่ปรับปรุงแล้ว) | ใช่ | รองรับเนื้อหาสเตอริโอ/5.0/5.1 ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 8 ถึง 48 kHz | |||
| xHE-AAC | Android 9 ขึ้นไป | รองรับเนื้อหาสูงสุด 8 ช่องที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 8 ถึง 48 kHz | |||
| AAC ELD (AAC ที่ปรับปรุงแล้วที่มีความหน่วงต่ำ) | Android 4.1 ขึ้นไป | Android 4.1 ขึ้นไป | รองรับเนื้อหาโมโน/สเตอริโอ ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 16 ถึง 48 kHz | ||
| AMR-NB | ใช่ | ใช่ |
• 3GPP (.3gp) • AMR (.amr) |
• 3GPP (.3gp) • AMR (.amr) |
4.75 ถึง 12.2 kbps ที่ 8 kHz |
| AMR-WB | ใช่ | ใช่ | มี 9 อัตราตั้งแต่ 6.60 kbit/s ถึง 23.85 kbit/s ที่สุ่มตัวอย่าง @ 16kHz | ||
| FLAC | Android 4.1 ขึ้นไป | Android 3.1 ขึ้นไป |
• FLAC (.flac) • MPEG-4 (.mp4, .m4a, Android 10 ขึ้นไป) • Matroska (.mkv) |
โมโน/สเตอริโอ (ไม่มีหลายช่อง) อัตราการสุ่มตัวอย่างสูงสุด 48 kHz (แต่ขอแนะนำให้ใช้สูงสุด 44.1 kHz ในอุปกรณ์ที่มีเอาต์พุต 44.1 kHz เนื่องจากตัวอย่างที่ลดลงจาก 48 เป็น 44.1 kHz ไม่มีตัวกรองแบบผ่านต่ำ) แนะนำ 16 บิต ไม่มีการใช้การดิทเทอร์สำหรับ 24 บิต | |
| MIDI | ใช่ |
• ประเภท 0 และ 1 (.mid, .xmf, .mxmf) • RTTTL/RTX (.rtttl, .rtx) • OTA (.ota) • iMelody (.imy) |
MIDI ประเภท 0 และ 1 DLS เวอร์ชัน 1 และ 2 XMF และ Mobile XMF รองรับรูปแบบเสียงเรียกเข้า RTTTL/RTX, OTA และ iMelody | ||
| MP3 | ใช่ |
• MP3 (.mp3) • MPEG-4 (.mp4, .m4a, Android 10 ขึ้นไป) • Matroska (.mkv, Android 10 ขึ้นไป) |
โมโน/สเตอริโอ 8-320 Kbps แบบคงที่ (CBR) หรือแบบผันแปร (VBR) | ||
| Opus | Android 10 ขึ้นไป | Android 5.0 ขึ้นไป |
• Ogg (.ogg) • MPEG-4 (.mp4) • Matroska (.mkv) |
• Ogg (.ogg) • WebM (.webm) |
|
| PCM/WAVE | Android 4.1 ขึ้นไป | ใช่ | WAVE (.wav) | PCM เชิงเส้น 8 และ 16 บิต (อัตราสูงสุดตามขีดจำกัดของฮาร์ดแวร์) อัตราการสุ่มตัวอย่าง สำหรับการบันทึก PCM ดิบที่ 8000, 16000 และ 44100 Hz | |
| Vorbis | ใช่ |
• Ogg (.ogg) • Matroska (.mkv, Android 4.0 ขึ้นไป) • MPEG-4 (.mp4, .m4a, Android 10 ขึ้นไป) |
• WebM (.webm) | ||
การรองรับวิดีโอ
รูปแบบวิดีโอ
| รูปแบบ | โปรแกรมเปลี่ยนไฟล์ | เครื่องมือถอดรหัส | ประเภทไฟล์ รูปแบบคอนเทนเนอร์ | รายละเอียด | |
|---|---|---|---|---|---|
| เครื่องมือแยกข้อมูล | Muxer | ||||
| H.263 | ใช่ | ใช่ |
• 3GPP (.3gp) • MPEG-4 (.mp4) • Matroska (.mkv) |
• 3GPP (.3gp) • MPEG-4 (.mp4) |
การรองรับ H.263 เป็นตัวเลือกใน Android 7.0 ขึ้นไป |
| H.264 AVC โปรไฟล์พื้นฐาน (BP) |
Android 3.0+ | ใช่ |
• 3GPP (.3gp) • MPEG-4 (.mp4) • MPEG-TS (.ts, เสียง AAC เท่านั้น, ค้นหาไม่ได้, Android 3.0 ขึ้นไป) • Matroska (.mkv) |
• 3GPP (.3gp) • MPEG-4 (.mp4) |
|
| H.264 AVC โปรไฟล์หลัก (MP) |
Android 6.0 ขึ้นไป | ใช่ | ต้องใช้ตัวถอดรหัส แต่ขอแนะนำให้ใช้ตัวเข้ารหัส | ||
| H.265 HEVC | Android 5.0 ขึ้นไป |
• MPEG-4 (.mp4) • Matroska (.mkv) |
• MPEG-4 (.mp4) | โปรไฟล์หลักระดับ 3 สำหรับอุปกรณ์เคลื่อนที่และโปรไฟล์หลักระดับ 4.1 สำหรับ Android TV | |
| MPEG-4 SP | ใช่ | • MPEG-4 (.mp4) | • MPEG-4 (.mp4) | ||
| VP8 | Android 4.3 ขึ้นไป | Android 2.3.3 ขึ้นไป |
• WebM (.webm) • Matroska (.mkv, Android 4.0 ขึ้นไป) |
• WebM (.webm) | สตรีมได้ใน Android 4.0 ขึ้นไปเท่านั้น |
| VP9 | Android 4.4 ขึ้นไป |
• WebM (.webm) • Matroska (.mkv) • MPEG-4 (.mp4) |
• WebM (.webm) | ||
| AV1 | Android 14 ขึ้นไป | Android 10 ขึ้นไป |
• MPEG-4 (.mp4) • Matroska (.mkv) |
• MPEG-4 (.mp4) | ต้องมีตัวเข้ารหัสและตัวถอดรหัสตั้งแต่ Android 14 เป็นต้นไป |
| APV | Android 16 ปีขึ้นไป | Android 16 ปีขึ้นไป | • MPEG-4 (.mp4) | • MPEG-4 (.mp4) | ต้องมีตัวเข้ารหัสและตัวถอดรหัสตั้งแต่ Android 16 เป็นต้นไป |
คำแนะนำในการเข้ารหัสวิดีโอ
ตารางด้านล่างแสดงโปรไฟล์และพารามิเตอร์การเข้ารหัสวิดีโอของเฟรมเวิร์กสื่อ Android ที่แนะนำสำหรับการเล่นโดยใช้ตัวแปลงรหัสโปรไฟล์พื้นฐาน H.264 คำแนะนำเดียวกันนี้ใช้กับ ตัวแปลงรหัสโปรไฟล์หลัก ซึ่งใช้ได้ใน Android 6.0 ขึ้นไปเท่านั้น
| SD (คุณภาพต่ำ) | SD (คุณภาพสูง) | HD 720p (ไม่พร้อมใช้งานในอุปกรณ์บางรุ่น) | |
|---|---|---|---|
| ความละเอียดของวิดีโอ | 176 x 144 พิกเซล | 480 x 360 พิกเซล | 1280 x 720 พิกเซล |
| อัตราเฟรมวิดีโอ | 12 FPS | 30 fps | 30 fps |
| อัตราบิตของวิดีโอ | 56 Kbps | 500 Kbps | 2 Mbps |
| ตัวแปลงรหัสเสียง | AAC-LC | AAC-LC | AAC-LC |
| ช่องสัญญาณเสียง | 1 (โมโน) | 2 (สเตอริโอ) | 2 (สเตอริโอ) |
| อัตราบิตของเสียง | 24 Kbps | 128 Kbps | 192 Kbps |
ตารางด้านล่างแสดงโปรไฟล์และพารามิเตอร์การเข้ารหัสวิดีโอของเฟรมเวิร์กสื่อ Android ที่แนะนำสำหรับการเล่นโดยใช้ตัวแปลงรหัสสื่อ VP8
| SD (คุณภาพต่ำ) | SD (คุณภาพสูง) | HD 720p (ไม่พร้อมใช้งานในอุปกรณ์บางรุ่น) | HD 1080p (ไม่พร้อมใช้งานในอุปกรณ์บางเครื่อง) | |
|---|---|---|---|---|
| ความละเอียดของวิดีโอ | 320 x 180 พิกเซล | 640 x 360 พิกเซล | 1280 x 720 พิกเซล | 1920 x 1080 พิกเซล |
| อัตราเฟรมวิดีโอ | 30 fps | 30 fps | 30 fps | 30 fps |
| อัตราบิตของวิดีโอ | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
คำแนะนำในการถอดรหัสวิดีโอ
การติดตั้งใช้งานอุปกรณ์ต้องรองรับการสลับความละเอียดวิดีโอและอัตราเฟรมแบบไดนามิกผ่าน Android API มาตรฐานภายในสตรีมเดียวกันสำหรับตัวแปลงรหัส VP8, VP9, H.264 และ H.265 ทั้งหมดแบบเรียลไทม์และสูงสุดตามความละเอียดสูงสุดที่ตัวแปลงรหัสแต่ละตัวรองรับในอุปกรณ์
การใช้งานที่รองรับตัวถอดรหัส Dolby Vision ต้องเป็นไปตามหลักเกณฑ์ต่อไปนี้
- จัดหาตัวแยกที่รองรับ Dolby Vision
- แสดงเนื้อหา Dolby Vision อย่างถูกต้องบนหน้าจออุปกรณ์หรือพอร์ตเอาต์พุตวิดีโอมาตรฐาน (เช่น HDMI)
- ตั้งค่าดัชนีแทร็กของ เลเยอร์ฐานที่เข้ากันได้แบบย้อนหลัง (หากมี) ให้เหมือนกับดัชนีแทร็กของเลเยอร์ Dolby Vision ที่รวมกัน
ข้อกำหนดในการสตรีมวิดีโอ
สำหรับเนื้อหาวิดีโอที่สตรีมผ่าน HTTP หรือ RTSP จะมีข้อกำหนดเพิ่มเติมดังนี้
- สำหรับคอนเทนเนอร์ 3GPP และ MPEG-4 อะตอม
moovต้องอยู่ก่อนอะตอมmdatแต่อะตอม ต้องอยู่หลังอะตอมftyp - สำหรับคอนเทนเนอร์ 3GPP, MPEG-4 และ WebM ตัวอย่างเสียงและวิดีโอที่สอดคล้องกับออฟเซ็ตเวลาเดียวกันอาจมีขนาดต่างกันไม่เกิน 500 KB หากต้องการลดความคลาดเคลื่อนของเสียง/วิดีโอนี้ ให้ลองสลับเสียงและวิดีโอในขนาดก้อนที่เล็กลง
การรองรับรูปภาพ
| รูปแบบ | โปรแกรมเปลี่ยนไฟล์ | เครื่องมือถอดรหัส | รายละเอียด | ประเภทไฟล์ รูปแบบคอนเทนเนอร์ |
|---|---|---|---|---|
| BMP | ใช่ | BMP (.bmp) | ||
| GIF | ใช่ | GIF (.gif) | ||
| JPEG | ใช่ | ใช่ | ฐาน + โปรเกรสซีฟ | JPEG (.jpg) |
| PNG | ใช่ | ใช่ | PNG (.png) | |
| WebP |
Android 4.0 ขึ้นไป ไม่สูญเสียข้อมูล: Android 10 ขึ้นไป ความโปร่งใส: Android 4.2.1 ขึ้นไป |
Android 4.0 ขึ้นไป ไม่สูญเสียคุณภาพ: Android 4.2.1 ขึ้นไป ความโปร่งใส: Android 4.2.1 ขึ้นไป |
การเข้ารหัสแบบไม่สูญเสียข้อมูลทำได้ใน Android 10 โดยใช้คุณภาพ 100 | WebP (.webp) |
| HEIF |
Android 10 ขึ้นไป (ผ่าน MediaCodec หรือ HeifWriter; ไม่ได้อยู่ใน Bitmap.compress)
|
Android 9.0 ขึ้นไป | ไม่จำเป็นต้องใช้อุปกรณ์ ดูการรองรับ 8 บิตได้ที่ ImageDecoder.isMimeTypeSupported("image/heif") การถอดรหัส 10 บิตต้องใช้โปรไฟล์ HEVC Main10 ที่ไม่บังคับ |
HEIF (.heic; .heif) |
| AVIF (โปรไฟล์พื้นฐาน) |
Android 14 ขึ้นไป (ผ่าน MediaCodec; ไม่ได้อยู่ใน Bitmap.compress)
|
Android 12 ขึ้นไป | ระบบรองรับการถอดรหัส 8 บิตตั้งแต่ Android 12 ขึ้นไป การถอดรหัส 10 บิตเป็นแบบไม่บังคับ โปรดตรวจสอบ ImageDecoder.isMimeTypeSupported("image/avif") เพื่อดูการรองรับ 10 บิต (แม้ว่าจะเป็นเท็จ 8 บิตก็ยังใช้งานได้) |
AVIF (.avif) |
โปรโตคอลเครือข่าย
ระบบรองรับโปรโตคอลเครือข่ายต่อไปนี้สำหรับการเล่นเสียงและวิดีโอ
- RTSP (RTP, SDP)
- การสตรีมแบบก้าวหน้าผ่าน HTTP/HTTPS
- ร่างโปรโตคอลการสตรีมแบบสดผ่าน HTTP/HTTPS:
- ไฟล์สื่อ MPEG-2 TS เท่านั้น
- โปรโตคอลเวอร์ชัน 3 Android 4.0 ขึ้นไป
- โปรโตคอลเวอร์ชัน 2 Android 3.x
- ไม่รองรับใน Android เวอร์ชันก่อน 3.0
หมายเหตุ: Android เวอร์ชันก่อน 3.1 ไม่รองรับ HTTPS
รูปแบบวิดีโอ HDR
OEM สามารถเปิดใช้รูปแบบ HDR ที่ต้องการได้ด้วยสถาปัตยกรรม HDR ของ Android ซึ่งมีข้อกำหนดหลักของรูปแบบ HDR ได้แก่ บัฟเฟอร์ 10 บิต ข้อมูลเมตา (คงที่ ไดนามิก และไม่มี) ฟังก์ชันการโอน และการจัดการพื้นที่สี
เรากำหนดให้ OEM รองรับรูปแบบพื้นฐาน 2-3 รูปแบบในอุปกรณ์ที่รองรับ HDR เพื่อให้มั่นใจว่านักพัฒนาแอปจะได้รับประสบการณ์การใช้งานที่สอดคล้องกันและเพื่อรองรับ Use Case หลักๆ ของ HDR ดังนี้
- สำหรับการเล่นเนื้อหาระดับมืออาชีพ เช่น การสตรีมภาพยนตร์ เรากำหนดให้ใช้ HDR10
- สำหรับการจับภาพและเล่นเนื้อหาที่ผู้ใช้สร้างขึ้น เรากำหนดให้ใช้ HLG10 เพื่อมอบประสบการณ์การใช้งานที่สอดคล้องกันในอุปกรณ์ Android
OEM ที่เพิ่มการรองรับ HDR ต้องรองรับรูปแบบเหล่านี้ แต่ก็รองรับรูปแบบเพิ่มเติมได้เช่นกัน เช่น HDR10+ หรือ Dolby Vision
| รูปแบบ | ฟังก์ชันการโอน | ข้อมูลเมตา | ตัวแปลงรหัส | ความลึกของบิต |
|---|---|---|---|---|
| HLG10 | HLG | ไม่ | HEVC | 10 บิต |
| HDR10 | PQ | คงที่ | HEVC | 10 บิต |
| HDR10+ | PQ | คงที่ | HEVC | 10 บิต |
| Dolby Vision 8.4 | HLG | ไดนามิก | HEVC | 10 บิต |
คำแนะนำในการจัดการรูปแบบ
| รูปแบบการจับภาพ | รูปแบบที่อัปโหลด | รูปแบบการนำส่ง |
| HLG | แบ็กเอนด์ของแอปรองรับ HDR HLG | อุปกรณ์ที่รองรับ HDR (HLG)
HLG อุปกรณ์รองรับ HDR (รองรับเฉพาะ PQ ไม่รองรับ HLG): SDR (การแมปโทนจาก HLG เป็น SDR ในแบ็กเอนด์) อุปกรณ์ที่ไม่รองรับ HDR: SDR (การแมปโทนจาก HLG เป็น SDR ในแบ็กเอนด์) |
กรณีการใช้งานที่ 2: การจับภาพด้วยกล้องที่มาพร้อมเครื่องหรือการนำเข้าจากแกลเลอรีของผู้ใช้ (แบ็กเอนด์ของแอปรองรับ HDR)
| รูปแบบการจับภาพ | รูปแบบที่อัปโหลด | รูปแบบการนำส่ง |
| HLG | HLG | เหมือนกับกรณีการใช้งานการจับภาพในแอป |
| HDR10+ | HLG
แมปโทนจาก HDR10+ (PQ) เป็น HLG ก่อนอัปโหลดโดยใช้ Transformer API |
เหมือนกับกรณีการใช้งานการจับภาพในแอป |
| DV8.4 | HLG
(DV8.4 ใช้ HLG และบิตสตรีมจะทำงานเป็น HLG จึงไม่จำเป็นต้องมีการแมปโทนสี) |
เหมือนกับกรณีการใช้งานการจับภาพในแอป |
กรณีการใช้งาน 3: Backend ของแอปไม่รองรับ HDR
| รูปแบบการจับภาพ | รูปแบบที่อัปโหลด | รูปแบบการนำส่ง |
| รูปแบบใดก็ได้ | SDR
แมปโทนจาก HLG เป็น SDR ก่อนอัปโหลดโดยใช้ Transformer API |
SDR |