התאם אישית את רכיבי המדיה

אתה יכול להרחיב את רכיבי מחלץ המדיה ורכיבי ה-Codec המדיה באמצעות הרחבות של ספקים. לא ניתן להתאים אישית את ממשקי ה-API של MediaSession2 ו-MediaParser (אך ניתן לבצע שינויים במעלה הזרם עבור ממשקי ה-API MediaPlayer ו- MediaSession ).

כדי לתמוך בסוגי מדיה נוספים במסגרת המדיה של אנדרואיד, עליך ליצור מחלץ ומפענח מותאמים אישית. לדוגמה, כדי להוסיף תמיכה עבור Windows Media וידאו בקבצי AVI, עליך ליצור AVI Extractor ומפענח וידאו של Windows Media.

לגבי הרחבות

אם מחלצי המדיה המוגדרים כברירת מחדל אינם עומדים בדרישות שלך, תוכל למקם תוספים מותאמים אישית לחילוץ ב- /system/lib[64]/extractors/ . תהליך החילוץ טוען אוטומטית תוספי חילוץ מחבילת APEX שסופקה על ידי Google ומ- /system/lib[64]/extractors/ .

באופן דומה, אתה יכול להגדיר שירותי Codec מדיה מותאמים אישית המשתמשים בממשק Codec 2.0 המוגדר ב- frameworks/av/media/codec2/core/ . ליישום בסיסי, עיין ב- frameworks/av/media/codec2/hidl/services/ . נקודת הכניסה לספרייה היא ממשק C2ComponentStore . לדוגמא, עיין ביישום ברירת המחדל של חנות ה-codec של התוכנה ב- frameworks/av/media/codec2/vndk/C2Store.cpp .

בעת שימוש ב-APEX משלך, מבנה את שירות ה-codec וטען את קובץ ה-APEX באמצעות אותם תהליכים כמו שירות mediaswcodec . לשם כך, הגדר ספרייה משותפת ברמה העליונה האחראית לרישום כל רכיבי C2, ולאחר מכן צור חבילת APEX (עם תלות מעבר) השוכנת במחיצת הספק. כאשר תהליך שירות ה-codec של הספק מתחיל, הוא יכול לטעון את נקודת הכניסה ברמה העליונה הזו.

צור מחלץ

בעת הוספת מחלץ לפורמט חדש, ודא שהחלץ תלוי רק בממשקי API יציבים של NDK ואינו תלוי בממשקי API פרטיים כלשהם. חולצים צריכים ליישם את ה-API המוגדר על ידי frameworks/av/include/media/MediaExtractorPluginApi.h ויכולים להשתמש במעטפת הנוחות של C++ ב- frameworks/av/include/media/MediaExtractorPluginHelper.h . מכיוון ש-Android 10 ומעלה תומך רק בגרסה הגבוהה ביותר של ה-API של החילוץ, הקפד לעצב את החילוץ שלך לפי החולץ עם מספר גרסת ה-API הגבוה ביותר.

הצב חולצים מותאמים אישית ב- /system/lib/64/extractors או ב-APEX של ספק, שנפתח יחד עם Google APEX המכיל את חולצי Google. כדי לוודא שהמסגרת טענה את החילוץ שלך, הפעל את הפקודה הבאה.

adb shell dumpsys media.extractor

אתה אמור לקבל רשימה של מחלצים זמינים הדומה להלן.

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

אם המחלץ המותאם אישית שלך תומך בפורמט שכבר נתמך על ידי מחלץ שסופק על ידי Google, אתה יכול לאלץ את המסגרת להשתמש במחלץ שלך על ידי שימוש בפונקציית Sniff() כדי להחזיר רמת ביטחון גבוהה יותר מזו שסיפקה Google.

כאשר מסגרת המדיה טוענת את המחלץ שלך (מ /system/lib/64/extractors או מ-APEX של ספק), היא מזהה את הקובץ ומקבלת מידע על תוכנו. השלב הבא הוא הוספת מפענח לפורמט כדי שהמסגרת תוכל להבין כיצד לנתח את תוכן הקובץ.

צור מפענח מותאם אישית

אתה צריך מפענח מותאם אישית עבור כל פורמט שעדיין אינו נתמך על ידי מפענח שסופק על ידי Google. לדוגמה:

  • כדי להוסיף תמיכת מסגרת מדיה עבור קבצי AVI המכילים MP3, אתה צריך מחלץ AVI אבל לא צריך מפענח MP3 כי אחד כבר קיים.

  • כדי להוסיף תמיכת מסגרת מדיה עבור קבצי AVI המכילים Windows Media, אתה צריך גם מחלץ AVI וגם מפענח של Windows Media.

הוספת מפענח חדש דומה להוספת מפענחי חומרה משלך עבור AVC או HEVC.

בעוד שהחלץ מפרסם את סוג ה-MIME של רצועות המדיה שהוא מכיל, רכיבי ה-codec התומכים בסוגי MIME הללו צריכים להיות נוכחים כדי שהקובץ יקבל תמיכה מלאה. המחרוזת בפועל של סוג MIME המשמשת היא אך ורק הסכם בין המחלץ ל-codec (אין צורך להוסיף את המחרוזת לקובץ MediaDefs.h ).

שילוב עם סורק מדיה

סורק המדיה מחפש סוגי קבצים חדשים ומוסיף אותם למסד הנתונים של המדיה. כדי שסורק המדיה יטפל בסוג הקובץ המותאם אישית שלך, הסורק צריך לדעת על כך. באנדרואיד 10 ומעלה, MimeUtils (ב- libcore ) שומר על מיפוי MIME-להרחבה. בעבר, מיפוי זה טופל בקובץ MediaFile.java , אשר ממשיך להכיל מיפוי מסוג MIME לקבועים של פורמט MTP.

מחלץ יכול לייצא רשימה של סיומות שמות קבצים בהן הם תומכים (כגון MP3 או MP4). עם זאת, רק LegacyMediaScanner משתמש בזה; אין לו השפעה על ModernMediaScanner , שבו נעשה שימוש כברירת מחדל.