แอปเดโมหลักของ ExoPlayer มีวัตถุประสงค์หลัก 2 ประการ ได้แก่
- เพื่อให้ตัวอย่างการใช้งาน ExoPlayer ที่ค่อนข้างเรียบง่ายแต่มีฟีเจอร์ครบถ้วน สามารถใช้แอปเดโมเป็นจุดเริ่มต้นที่สะดวกในการพัฒนา แอปของคุณเองได้
- เพื่อให้ทดลองใช้ ExoPlayer ได้ง่ายๆ ใช้แอปเดโมเพื่อทดสอบการเล่นได้ เนื้อหาของคุณนอกเหนือจากตัวอย่างที่รวมอยู่ในการทดสอบ
หน้านี้จะอธิบายวิธีรับ คอมไพล์ และเรียกใช้แอปเดโม และยังอธิบาย วิธีเล่นสื่อของคุณเอง
กำลังรับรหัส
คุณสามารถดูซอร์สโค้ดของแอปเดโมหลักได้ในโฟลเดอร์ demos/main
ของ
โปรเจ็กต์ GitHub ของเรา โคลนโปรเจ็กต์เป็น
ไดเรกทอรีในเครื่อง:
git clone https://github.com/androidx/media.git
จากนั้นให้เปิดโปรเจ็กต์ใน Android Studio คุณจะเห็นข้อมูลต่อไปนี้ใน มุมมองโปรเจ็กต์ Android (ขยายโฟลเดอร์ที่เกี่ยวข้องของแอปเดโมแล้ว):
การคอมไพล์และการเรียกใช้
หากต้องการคอมไพล์และเรียกใช้แอปเดโม ให้เลือกและเรียกใช้การกำหนดค่า demo
ใน
Android Studio แอปเดโมจะติดตั้งและเรียกใช้ในอุปกรณ์ Android ที่เชื่อมต่ออยู่
เราขอแนะนำให้ใช้อุปกรณ์จริงหากเป็นไปได้ ถ้าต้องการใช้โปรแกรมจำลอง
แทน โปรดอ่านส่วนโปรแกรมจำลองในอุปกรณ์ที่รองรับ
อุปกรณ์เสมือนใช้อิมเมจระบบที่มีระดับ API อย่างน้อย 23
แอปเดโมจะแสดงรายการตัวอย่าง (SampleChooserActivity
) กำลังเลือก
ตัวอย่างจะเปิดกิจกรรมที่ 2 (PlayerActivity
) สำหรับการเล่น เดโม
จะแสดงตัวควบคุมการเล่นและฟังก์ชันการเลือกแทร็ก นอกจากนี้ยังใช้
คลาสยูทิลิตี EventLogger
ของ ExoPlayer เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่เป็นประโยชน์
บันทึกของระบบ สามารถดูการบันทึกนี้ได้ (พร้อมด้วยการบันทึกระดับข้อผิดพลาดของ
อื่นๆ) ด้วยคำสั่ง:
adb logcat EventLogger:V *:E
การเปิดใช้ตัวถอดรหัสแบบแพ็กเกจ
ExoPlayer มีส่วนขยายจำนวนหนึ่งที่อนุญาตให้ใช้ซอฟต์แวร์ที่รวมอยู่ในแพ็กเกจได้ เช่น AV1, VP9, Opus, FLAC และ FFmpeg (เฉพาะเสียง) แอปเดโม สามารถสร้างขึ้นเพื่อรวมและใช้ส่วนขยายเหล่านี้ได้ดังนี้
- สร้างส่วนขยายแต่ละรายการที่คุณต้องการรวมไว้ โปรดทราบว่านี่เป็น
ขั้นตอนที่ต้องทำด้วยตนเอง ดูไฟล์
README.md
ในแต่ละส่วนขยายสำหรับ วิธีทำ ในมุมมองบิลด์ตัวแปรของ Android Studio ให้ตั้งค่าตัวแปรบิลด์สำหรับเดโม
withDecoderExtensionsDebug
หรือwithDecoderExtensionsRelease
เป็น ที่แสดงในภาพต่อไปนี้คอมไพล์ ติดตั้ง และเรียกใช้การกำหนดค่า
demo
ตามปกติ
โดยค่าเริ่มต้น ตัวถอดรหัสส่วนขยายจะใช้เฉพาะในกรณีที่ตัวถอดรหัสแพลตฟอร์มที่เหมาะสมเท่านั้น ไม่มีอยู่ คุณสามารถระบุตัวถอดรหัสส่วนขยาย มากกว่า ตามที่อธิบายไว้ในส่วนต่อไปนี้
การเล่นเนื้อหาของคุณเอง
การเล่นเนื้อหาของคุณเองในแอปเดโมมีหลายวิธี
1. การแก้ไข assets/media.exolist.json
ตัวอย่างที่แสดงในแอปเดโมโหลดจาก assets/media.exolist.json
การแก้ไขไฟล์ JSON นี้จะทำให้คุณสามารถเพิ่มและนำตัวอย่างออกจากการสาธิต
แอป สคีมามีลักษณะดังนี้ โดยที่ [O] ระบุแอตทริบิวต์ที่ไม่บังคับ
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of sample",
"uri": "The URI of the sample",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8",
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks"
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)",
"ad_tag_uri": "[O] The URI of an ad tag to load via the IMA extension"
},
...etc
]
},
...etc
]
คุณสามารถระบุเพลย์ลิสต์ของตัวอย่างได้โดยใช้สคีมา
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of playlist sample",
"playlist": [
{
"uri": "The URI of the first sample in the playlist",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8"
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks",
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)"
},
{
"uri": "The URI of the second sample in the playlist",
...etc
},
...etc
]
},
...etc
]
},
...etc
]
ส่วนหัวของคำขอคีย์จะระบุเป็นออบเจ็กต์ที่มีสตริง หากจำเป็น สำหรับแต่ละส่วนหัว
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
ในกิจกรรมตัวเลือกตัวอย่าง เมนูรายการเพิ่มเติมมีตัวเลือกสำหรับ เพื่อระบุว่าต้องการใช้ตัวถอดรหัสส่วนขยายหรือไม่
URI ไฟล์ในเครื่องและข้อจำกัดของพื้นที่เก็บข้อมูลที่กำหนดขอบเขต
เมื่อระบุ URI ของไฟล์ในเครื่อง แอปเดโมจะขอพื้นที่เก็บข้อมูลที่จำเป็น
สิทธิ์การเข้าถึงเพื่ออ่านไฟล์เหล่านี้ แต่จาก Android 13
สามารถโหลดไฟล์ที่กำหนดเองที่ไม่ได้ลงท้ายด้วยไฟล์สื่อทั่วไป
ส่วนขยาย (เช่น .mp4
) หากคุณจำเป็นต้องโหลดไฟล์ดังกล่าว คุณสามารถวางในไฟล์
ไดเรกทอรีพื้นที่เก็บข้อมูลเฉพาะของแอปเดโมที่ไม่มีข้อจํากัดในการเข้าถึง ช่วงเวลานี้
โดยทั่วไปจะอยู่ที่ /sdcard/Android/data/androidx.media3.demo.main/files
2. กำลังโหลดไฟล์ exolist.json ภายนอก
แอปเดโมสามารถโหลดไฟล์ JSON ภายนอกโดยใช้สคีมาด้านบนและตั้งชื่อแล้ว
ตามข้อตกลง *.exolist.json
ตัวอย่างเช่น หากคุณโฮสต์
ที่ https://yourdomain.com/samples.exolist.json
คุณสามารถเปิดได้ใน
แอปเดโมโดยใช้:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
คลิกลิงก์ *.exolist.json
(เช่น ในเบราว์เซอร์หรืออีเมล
) ในอุปกรณ์ที่ติดตั้งแอปเดโมแล้ว แอปเดโมจะเปิดขึ้นในเดโมด้วย
แอป ดังนั้น การโฮสต์ไฟล์ JSON ของ *.exolist.json
จึงมีวิธีง่ายๆ
เผยแพร่เนื้อหาให้ผู้อื่นลองใช้ในแอปเดโม
3. การเริ่มทำงาน Intent
คุณสามารถใช้ Intent เพื่อข้ามรายการตัวอย่างและเปิดใช้งานโดยตรงไปยัง
การเล่น หากต้องการเล่นตัวอย่างเดียว ให้ตั้งค่าการดำเนินการของ Intent เป็น
androidx.media3.demo.main.action.VIEW
และ URI ข้อมูลไปยัง URI ของ
ตัวอย่างให้เล่น Intent ดังกล่าวสามารถเริ่มทำงานจากเทอร์มินัลได้โดยใช้สิ่งต่อไปนี้
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
ส่วนเพิ่มเติมที่ไม่บังคับซึ่งรองรับสำหรับ Intent ตัวอย่างรายการเดียวมีดังนี้
- ตัวอย่างส่วนเพิ่มเติมของการกำหนดค่า
mime_type
[สตริง] ตัวอย่างคำแนะนำประเภท MIME ตัวอย่างเช่นapplication/dash+xml
สำหรับเนื้อหา DASHclip_start_position_ms
[แบบยาว] จุดเริ่มต้นที่ควรยกตัวอย่าง ตัดเป็นมิลลิวินาทีclip_end_position_ms
[แบบยาว] จุดสิ้นสุดที่ตัวอย่างควรเป็น ตัดเป็นมิลลิวินาทีdrm_scheme
[สตริง] รูปแบบ DRM หากมีการป้องกัน ค่าที่ถูกต้องคือwidevine
playready
และclearkey
ระบบยอมรับ UUID ของรูปแบบ DRM ด้วยdrm_license_uri
[สตริง] URI ของเซิร์ฟเวอร์ใบอนุญาต หากมีการป้องกันdrm_force_default_license_uri
[บูลีน] เลือกว่าจะบังคับใช้หรือไม่drm_license_uri
สำหรับคำขอคีย์ที่มี URI ใบอนุญาตของตนเองdrm_key_request_properties
[อาร์เรย์สตริง] ส่วนหัวของคำขอคีย์ที่แพ็กเป็น name1, value1, name2, value2 ฯลฯ หากได้รับการป้องกันdrm_session_for_clear_content
[บูลีน] เลือกว่าจะแนบเซสชัน DRM หรือไม่ เพื่อล้างแทร็กวิดีโอและแทร็กเสียงdrm_multi_session
[บูลีน] เปิดใช้การหมุนเวียนคีย์หากมีการป้องกันsubtitle_uri
[สตริง] URI ของไฟล์ช่วยเหลือของคำบรรยายsubtitle_mime_type
[สตริง] ประเภท MIME ของ subtitle_uri (ต้องระบุหาก ตั้งค่าคำบรรยาย)subtitle_language
[สตริง] รหัสภาษา BCP47 ของไฟล์คำบรรยาย (ยกเว้นหากไม่ได้ตั้งค่า title_uri ไว้)ad_tag_uri
[สตริง] URI ของแท็กโฆษณาที่จะโหลดโดยใช้ [ส่วนขยาย IMA][]prefer_extension_decoders
[บูลีน] ระบุว่าตัวถอดรหัสส่วนขยายเป็น แนะนำให้ใช้กับแพลตฟอร์ม
เมื่อใช้ adb shell am start
เพื่อให้ Intent เริ่มทำงาน สตริงเพิ่มเติมที่ไม่บังคับจะทำสิ่งต่อไปนี้ได้
ตั้งค่าด้วย --es
(เช่น --es extension mpd
) บูลีนเพิ่มเติมที่ไม่บังคับได้
ตั้งค่าด้วย --ez
(เช่น --ez prefer_extension_decoders TRUE
) ตัวเลือกเพิ่มเติม
คุณสามารถตั้งค่าวิดีโอแบบยาวด้วย --el
(เช่น --el clip_start_position_ms 5000
) CANNOT TRANSLATE
ตั้งค่าอาร์เรย์สตริงเพิ่มเติมได้ด้วย --esa
(เช่น
--esa drm_key_request_properties name1,value1
)
หากต้องการเล่นเพลย์ลิสต์ตัวอย่าง ให้ตั้งค่าการดำเนินการของ Intent เป็น
androidx.media3.demo.main.action.VIEW_LIST
ตัวอย่างการกำหนดค่า
ค่าใช้จ่ายเพิ่มเติมยังคงเหมือนเดิมสำหรับ androidx.media3.demo.main.action.VIEW
แต่มีข้อแตกต่าง 2 ประการดังนี้
- ข้อมูลเพิ่มเติม คีย์ควรมีขีดล่างและดัชนีแบบ 0 ของตัวอย่าง
เป็นคำต่อท้าย ตัวอย่างเช่น
extension_0
จะแนะนำประเภทตัวอย่างสำหรับ ตัวอย่างdrm_scheme_1
จะกำหนดรูปแบบ DRM สำหรับตัวอย่างที่สอง - มีการส่ง URI ของตัวอย่างเป็นส่วนเสริมพร้อมกับคีย์
uri_<sample-index>
ส่วนเพิ่มเติมอื่นๆ ที่ไม่ใช่ตัวอย่าง Dependency จะไม่เปลี่ยนแปลง ตัวอย่างเช่น คุณสามารถ สามารถเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อเล่นเพลย์ลิสต์ที่มี 2 รายการ การลบล้างส่วนขยายของรายการที่ 2
adb shell am start -a androidx.media3.demo.main.action.VIEW_LIST \ --es uri_0 https://a.com/sample1.mp4 \ --es uri_1 https://b.com/sample2.fake_mpd \ --es extension_1 mpd