এক্সোপ্লেয়ারের প্রধান ডেমো অ্যাপটি দুটি প্রাথমিক উদ্দেশ্যে কাজ করে:
- ExoPlayer ব্যবহারের একটি তুলনামূলক সহজ কিন্তু সম্পূর্ণ বৈশিষ্ট্যযুক্ত উদাহরণ প্রদান করার জন্য। ডেমো অ্যাপটি আপনার নিজস্ব অ্যাপ তৈরি করার জন্য একটি সুবিধাজনক সূচনা বিন্দু হিসেবে ব্যবহার করা যেতে পারে।
- এক্সোপ্লেয়ার ব্যবহার করা সহজ করার জন্য। ডেমো অ্যাপটি অন্তর্ভুক্ত নমুনাগুলি ছাড়াও আপনার নিজস্ব সামগ্রীর প্লেব্যাক পরীক্ষা করতে ব্যবহার করা যেতে পারে।
এই পৃষ্ঠায় ডেমো অ্যাপটি কীভাবে পাবেন, কম্পাইল করবেন এবং চালাবেন তা বর্ণনা করা হয়েছে। এটি আপনার নিজস্ব মিডিয়া চালানোর জন্য এটি কীভাবে ব্যবহার করবেন তাও বর্ণনা করে।
কোড পাচ্ছি
মূল ডেমো অ্যাপের সোর্স কোডটি আমাদের GitHub প্রকল্পের demos/main ফোল্ডারে পাওয়া যাবে। যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে প্রকল্পটি একটি স্থানীয় ডিরেক্টরিতে ক্লোন করুন:
git clone https://github.com/androidx/media.git
এরপর, অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি খুলুন। আপনি অ্যান্ড্রয়েড প্রজেক্ট ভিউতে নিম্নলিখিতটি দেখতে পাবেন (ডেমো অ্যাপের প্রাসঙ্গিক ফোল্ডারগুলি প্রসারিত করা হয়েছে):

কম্পাইলিং এবং রানিং
ডেমো অ্যাপটি কম্পাইল এবং রান করতে, Android Studio-তে demo কনফিগারেশনটি নির্বাচন করুন এবং রান করুন। ডেমো অ্যাপটি একটি সংযুক্ত Android ডিভাইসে ইনস্টল এবং রান করবে। সম্ভব হলে আমরা একটি ফিজিক্যাল ডিভাইস ব্যবহার করার পরামর্শ দিচ্ছি। আপনি যদি এর পরিবর্তে একটি এমুলেটর ব্যবহার করতে চান, তাহলে অনুগ্রহ করে সমর্থিত ডিভাইসের এমুলেটর বিভাগটি পড়ুন এবং নিশ্চিত করুন যে আপনার ভার্চুয়াল ডিভাইসটি কমপক্ষে 23 API স্তরের একটি সিস্টেম ইমেজ ব্যবহার করে।

ডেমো অ্যাপটি নমুনার একটি তালিকা ( SampleChooserActivity ) উপস্থাপন করে। একটি নমুনা নির্বাচন করলে প্লেব্যাকের জন্য দ্বিতীয় একটি কার্যকলাপ ( PlayerActivity ) খুলবে। ডেমোতে প্লেব্যাক নিয়ন্ত্রণ এবং ট্র্যাক নির্বাচন কার্যকারিতা রয়েছে। এটি সিস্টেম লগে দরকারী ডিবাগ তথ্য আউটপুট করার জন্য ExoPlayer এর EventLogger ইউটিলিটি ক্লাসও ব্যবহার করে। এই লগিংটি (অন্যান্য ট্যাগের জন্য ত্রুটি স্তর লগিং সহ) এই কমান্ডের সাহায্যে দেখা যেতে পারে:
adb logcat EventLogger:V *:E
বান্ডেলড ডিকোডার সক্রিয় করা হচ্ছে
এক্সোপ্লেয়ারের বেশ কয়েকটি এক্সটেনশন রয়েছে যা বান্ডেলড সফ্টওয়্যার ডিকোডার ব্যবহারের অনুমতি দেয়, যার মধ্যে রয়েছে AV1, VP9, Opus, FLAC, এবং FFmpeg (শুধুমাত্র অডিও)। ডেমো অ্যাপটি নিম্নলিখিতভাবে এই এক্সটেনশনগুলি অন্তর্ভুক্ত এবং ব্যবহার করার জন্য তৈরি করা যেতে পারে:
- আপনি যে এক্সটেনশনগুলি অন্তর্ভুক্ত করতে চান তার প্রতিটি তৈরি করুন। মনে রাখবেন এটি একটি ম্যানুয়াল প্রক্রিয়া। নির্দেশাবলীর জন্য প্রতিটি এক্সটেনশনের
README.mdফাইলটি দেখুন। অ্যান্ড্রয়েড স্টুডিওর বিল্ড ভ্যারিয়েন্টস ভিউতে, ডেমো মডিউলের বিল্ড ভ্যারিয়েন্টটি
withDecoderExtensionsDebugঅথবাwithDecoderExtensionsReleaseএ সেট করুন, যেমনটি নিচের ছবিতে দেখানো হয়েছে।
স্বাভাবিকভাবে
demoকনফিগারেশন কম্পাইল, ইনস্টল এবং রান করুন।
ডিফল্টরূপে একটি এক্সটেনশন ডিকোডার শুধুমাত্র তখনই ব্যবহার করা হবে যখন একটি উপযুক্ত প্ল্যাটফর্ম ডিকোডার বিদ্যমান না থাকে। নিম্নলিখিত বিভাগগুলিতে বর্ণিত হিসাবে, এক্সটেনশন ডিকোডারগুলিকে অগ্রাধিকার দেওয়া উচিত তা নির্দিষ্ট করা সম্ভব।
আপনার নিজস্ব কন্টেন্ট চালানো হচ্ছে
ডেমো অ্যাপে আপনার নিজস্ব কন্টেন্ট চালানোর একাধিক উপায় রয়েছে।
১. সম্পদ/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. Cannot be combined with mime_type. 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",
"mime_type": "[O] The MIME type of the sample. Cannot be combined with extension.",
"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. Cannot be combined with mime_type. 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",
"mime_type": "[O] The MIME type of the sample. Cannot be combined with extension.",
"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 এ অবস্থিত।
২. একটি বহিরাগত exolist.json ফাইল লোড করা হচ্ছে
ডেমো অ্যাপটি উপরের স্কিমা ব্যবহার করে এবং *.exolist.json কনভেনশন অনুসারে নামকরণ করা হয়েছে এমন বাহ্যিক 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 লিঙ্কে (উদাহরণস্বরূপ, ব্রাউজারে বা ইমেল ক্লায়েন্টে) ক্লিক করলে এটি ডেমো অ্যাপেও খুলবে। অতএব, *.exolist.json JSON ফাইল হোস্ট করা ডেমো অ্যাপে অন্যদের চেষ্টা করার জন্য সামগ্রী বিতরণের একটি সহজ উপায় প্রদান করে।
৩. উদ্দেশ্যপ্রণোদিত হওয়া
নমুনার তালিকা বাইপাস করে সরাসরি প্লেব্যাকে চালু করার জন্য ইন্টেন্ট ব্যবহার করা যেতে পারে। একটি একক নমুনা চালানোর জন্য, ইন্টেন্টের অ্যাকশন androidx.media3.demo.main.action.VIEW তে সেট করুন এবং এর ডেটা URI প্লে করার জন্য নমুনার সাথে সেট করুন। এই ধরনের ইন্টেন্ট টার্মিনাল থেকে ব্যবহার করে চালানো যেতে পারে:
adb shell am start -a androidx.media3.demo.main.action.VIEW \
-d https://yourdomain.com/sample.mp4
একটি একক নমুনা অভিপ্রায়ের জন্য সমর্থিত ঐচ্ছিক অতিরিক্তগুলি হল:
- নমুনা কনফিগারেশন অতিরিক্ত:
-
mime_type[String] নমুনা MIME টাইপ ইঙ্গিত। উদাহরণস্বরূপ DASH কন্টেন্টের জন্যapplication/dash+xml। -
clip_start_position_ms[দীর্ঘ] মিলিসেকেন্ডে নমুনাটি ক্লিপ করার একটি শুরুর বিন্দু। -
clip_end_position_ms[দীর্ঘ] মিলিসেকেন্ডে নমুনাটি ক্লিপ করা উচিত এমন একটি শেষ বিন্দু। -
drm_scheme[String] DRM স্কিম সুরক্ষিত থাকলে। বৈধ মানগুলি হলwidevine,playreadyএবংclearkey। DRM স্কিম UUID গুলিও গ্রহণযোগ্য। -
drm_license_uri[String] লাইসেন্স সার্ভারের URI যদি সুরক্ষিত থাকে। -
drm_force_default_license_uri[বুলিয়ান] নিজস্ব লাইসেন্স URI সহ মূল অনুরোধগুলির জন্যdrm_license_uriব্যবহার জোর করে করা হবে কিনা। -
drm_key_request_properties[স্ট্রিং অ্যারে] সুরক্ষিত থাকলে, কী অনুরোধের শিরোনামগুলি name1, value1, name2, value2 ইত্যাদি হিসাবে প্যাক করা হয়। -
drm_session_for_clear_content[Boolean] ভিডিও এবং অডিও ট্র্যাক সাফ করার জন্য একটি DRM সেশন সংযুক্ত করা হবে কিনা। -
drm_multi_session[বুলিয়ান] সুরক্ষিত থাকলে কী ঘূর্ণন সক্ষম করে। -
subtitle_uri[String] একটি সাবটাইটেল সাইডকার ফাইলের URI। -
subtitle_mime_type[String] subtitle_uri এর MIME প্রকার (subtitle_uri সেট করা থাকলে প্রয়োজন)। -
subtitle_language[String] সাবটাইটেল ফাইলের BCP47 ভাষা কোড (subtitle_uri সেট না থাকলে উপেক্ষা করা হয়)। -
ad_tag_uri[String] [IMA এক্সটেনশন][] ব্যবহার করে লোড করার জন্য একটি বিজ্ঞাপন ট্যাগের URI। -
prefer_extension_decoders[বুলিয়ান] প্ল্যাটফর্ম ডিকোডারের চেয়ে এক্সটেনশন ডিকোডার পছন্দ করা হয় কিনা।
-
adb shell am start to fire একটি ইনটেন্ট ব্যবহার করার সময়, --es (যেমন, --es extension mpd ) দিয়ে একটি ঐচ্ছিক স্ট্রিং অতিরিক্ত সেট করা যেতে পারে। --ez (যেমন, --ez prefer_extension_decoders TRUE ) দিয়ে একটি ঐচ্ছিক বুলিয়ান অতিরিক্ত সেট করা যেতে পারে। --el (যেমন, --el clip_start_position_ms 5000 ) দিয়ে একটি ঐচ্ছিক দীর্ঘ অতিরিক্ত সেট করা যেতে পারে। --esa (যেমন, --esa drm_key_request_properties name1,value1 ) দিয়ে একটি ঐচ্ছিক স্ট্রিং অ্যারে অতিরিক্ত সেট করা যেতে পারে।
নমুনার একটি প্লেলিস্ট চালানোর জন্য, ইন্টেন্টের অ্যাকশনটি androidx.media3.demo.main.action.VIEW_LIST এ সেট করুন। নমুনা কনফিগারেশনের অতিরিক্ত বৈশিষ্ট্যগুলি androidx.media3.demo.main.action.VIEW এর মতোই থাকে, দুটি পার্থক্য ছাড়া:
- অতিরিক্ত কীগুলিতে একটি আন্ডারস্কোর থাকা উচিত এবং নমুনার 0-ভিত্তিক সূচক প্রত্যয় হিসাবে থাকা উচিত। উদাহরণস্বরূপ,
extension_0প্রথম নমুনার জন্য নমুনার ধরণ নির্দেশ করবে।drm_scheme_1দ্বিতীয় নমুনার জন্য DRM স্কিম সেট করবে। - নমুনার uri কে
uri_<sample-index>কী দিয়ে অতিরিক্ত হিসেবে পাস করা হয়।
অন্যান্য অতিরিক্ত, যা নমুনা নির্ভর নয়, পরিবর্তন হয় না। উদাহরণস্বরূপ, আপনি টার্মিনালে নিম্নলিখিত কমান্ডটি চালাতে পারেন যাতে দুটি আইটেম সহ একটি প্লেলিস্ট চালানো যায়, দ্বিতীয় আইটেমের এক্সটেনশনকে ওভাররাইড করে:
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
এক্সোপ্লেয়ারের প্রধান ডেমো অ্যাপটি দুটি প্রাথমিক উদ্দেশ্যে কাজ করে:
- ExoPlayer ব্যবহারের একটি তুলনামূলক সহজ কিন্তু সম্পূর্ণ বৈশিষ্ট্যযুক্ত উদাহরণ প্রদান করার জন্য। ডেমো অ্যাপটি আপনার নিজস্ব অ্যাপ তৈরি করার জন্য একটি সুবিধাজনক সূচনা বিন্দু হিসেবে ব্যবহার করা যেতে পারে।
- এক্সোপ্লেয়ার ব্যবহার করা সহজ করার জন্য। ডেমো অ্যাপটি অন্তর্ভুক্ত নমুনাগুলি ছাড়াও আপনার নিজস্ব সামগ্রীর প্লেব্যাক পরীক্ষা করতে ব্যবহার করা যেতে পারে।
এই পৃষ্ঠায় ডেমো অ্যাপটি কীভাবে পাবেন, কম্পাইল করবেন এবং চালাবেন তা বর্ণনা করা হয়েছে। এটি আপনার নিজস্ব মিডিয়া চালানোর জন্য এটি কীভাবে ব্যবহার করবেন তাও বর্ণনা করে।
কোড পাচ্ছি
মূল ডেমো অ্যাপের সোর্স কোডটি আমাদের GitHub প্রকল্পের demos/main ফোল্ডারে পাওয়া যাবে। যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে প্রকল্পটি একটি স্থানীয় ডিরেক্টরিতে ক্লোন করুন:
git clone https://github.com/androidx/media.git
এরপর, অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি খুলুন। আপনি অ্যান্ড্রয়েড প্রজেক্ট ভিউতে নিম্নলিখিতটি দেখতে পাবেন (ডেমো অ্যাপের প্রাসঙ্গিক ফোল্ডারগুলি প্রসারিত করা হয়েছে):

কম্পাইলিং এবং রানিং
ডেমো অ্যাপটি কম্পাইল এবং রান করতে, Android Studio-তে demo কনফিগারেশনটি নির্বাচন করুন এবং রান করুন। ডেমো অ্যাপটি একটি সংযুক্ত Android ডিভাইসে ইনস্টল এবং রান করবে। সম্ভব হলে আমরা একটি ফিজিক্যাল ডিভাইস ব্যবহার করার পরামর্শ দিচ্ছি। আপনি যদি এর পরিবর্তে একটি এমুলেটর ব্যবহার করতে চান, তাহলে অনুগ্রহ করে সমর্থিত ডিভাইসের এমুলেটর বিভাগটি পড়ুন এবং নিশ্চিত করুন যে আপনার ভার্চুয়াল ডিভাইসটি কমপক্ষে 23 API স্তরের একটি সিস্টেম ইমেজ ব্যবহার করে।

The demo app presents of a list of samples ( SampleChooserActivity ). Selecting a sample will open a second activity ( PlayerActivity ) for playback. The demo features playback controls and track selection functionality. It also uses ExoPlayer's EventLogger utility class to output useful debug information to the system log. This logging can be viewed (along with error level logging for other tags) with the command:
adb logcat EventLogger:V *:E
বান্ডেলড ডিকোডার সক্রিয় করা হচ্ছে
এক্সোপ্লেয়ারের বেশ কয়েকটি এক্সটেনশন রয়েছে যা বান্ডেলড সফ্টওয়্যার ডিকোডার ব্যবহারের অনুমতি দেয়, যার মধ্যে রয়েছে AV1, VP9, Opus, FLAC, এবং FFmpeg (শুধুমাত্র অডিও)। ডেমো অ্যাপটি নিম্নলিখিতভাবে এই এক্সটেনশনগুলি অন্তর্ভুক্ত এবং ব্যবহার করার জন্য তৈরি করা যেতে পারে:
- আপনি যে এক্সটেনশনগুলি অন্তর্ভুক্ত করতে চান তার প্রতিটি তৈরি করুন। মনে রাখবেন এটি একটি ম্যানুয়াল প্রক্রিয়া। নির্দেশাবলীর জন্য প্রতিটি এক্সটেনশনের
README.mdফাইলটি দেখুন। অ্যান্ড্রয়েড স্টুডিওর বিল্ড ভ্যারিয়েন্টস ভিউতে, ডেমো মডিউলের বিল্ড ভ্যারিয়েন্টটি
withDecoderExtensionsDebugঅথবাwithDecoderExtensionsReleaseএ সেট করুন, যেমনটি নিচের ছবিতে দেখানো হয়েছে।
স্বাভাবিকভাবে
demoকনফিগারেশন কম্পাইল, ইনস্টল এবং রান করুন।
ডিফল্টরূপে একটি এক্সটেনশন ডিকোডার শুধুমাত্র তখনই ব্যবহার করা হবে যখন একটি উপযুক্ত প্ল্যাটফর্ম ডিকোডার বিদ্যমান না থাকে। নিম্নলিখিত বিভাগগুলিতে বর্ণিত হিসাবে, এক্সটেনশন ডিকোডারগুলিকে অগ্রাধিকার দেওয়া উচিত তা নির্দিষ্ট করা সম্ভব।
আপনার নিজস্ব কন্টেন্ট চালানো হচ্ছে
ডেমো অ্যাপে আপনার নিজস্ব কন্টেন্ট চালানোর একাধিক উপায় রয়েছে।
১. সম্পদ/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. Cannot be combined with mime_type. 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",
"mime_type": "[O] The MIME type of the sample. Cannot be combined with extension.",
"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. Cannot be combined with mime_type. 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",
"mime_type": "[O] The MIME type of the sample. Cannot be combined with extension.",
"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 এ অবস্থিত।
২. একটি বহিরাগত exolist.json ফাইল লোড করা হচ্ছে
ডেমো অ্যাপটি উপরের স্কিমা ব্যবহার করে এবং *.exolist.json কনভেনশন অনুসারে নামকরণ করা হয়েছে এমন বাহ্যিক 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 লিঙ্কে (উদাহরণস্বরূপ, ব্রাউজারে বা ইমেল ক্লায়েন্টে) ক্লিক করলে এটি ডেমো অ্যাপেও খুলবে। অতএব, *.exolist.json JSON ফাইল হোস্ট করা ডেমো অ্যাপে অন্যদের চেষ্টা করার জন্য সামগ্রী বিতরণের একটি সহজ উপায় প্রদান করে।
৩. উদ্দেশ্যপ্রণোদিত হওয়া
নমুনার তালিকা বাইপাস করে সরাসরি প্লেব্যাকে চালু করার জন্য ইন্টেন্ট ব্যবহার করা যেতে পারে। একটি একক নমুনা চালানোর জন্য, ইন্টেন্টের অ্যাকশন androidx.media3.demo.main.action.VIEW তে সেট করুন এবং এর ডেটা URI প্লে করার জন্য নমুনার সাথে সেট করুন। এই ধরনের ইন্টেন্ট টার্মিনাল থেকে ব্যবহার করে চালানো যেতে পারে:
adb shell am start -a androidx.media3.demo.main.action.VIEW \
-d https://yourdomain.com/sample.mp4
একটি একক নমুনা অভিপ্রায়ের জন্য সমর্থিত ঐচ্ছিক অতিরিক্তগুলি হল:
- নমুনা কনফিগারেশন অতিরিক্ত:
-
mime_type[String] নমুনা MIME টাইপ ইঙ্গিত। উদাহরণস্বরূপ DASH কন্টেন্টের জন্যapplication/dash+xml। -
clip_start_position_ms[দীর্ঘ] মিলিসেকেন্ডে নমুনাটি ক্লিপ করার একটি শুরুর বিন্দু। -
clip_end_position_ms[দীর্ঘ] মিলিসেকেন্ডে নমুনাটি ক্লিপ করা উচিত এমন একটি শেষ বিন্দু। -
drm_scheme[String] DRM স্কিম সুরক্ষিত থাকলে। বৈধ মানগুলি হলwidevine,playreadyএবংclearkey। DRM স্কিম UUID গুলিও গ্রহণযোগ্য। -
drm_license_uri[String] লাইসেন্স সার্ভারের URI যদি সুরক্ষিত থাকে। -
drm_force_default_license_uri[বুলিয়ান] নিজস্ব লাইসেন্স URI সহ মূল অনুরোধগুলির জন্যdrm_license_uriব্যবহার জোর করে করা হবে কিনা। -
drm_key_request_properties[স্ট্রিং অ্যারে] সুরক্ষিত থাকলে, কী অনুরোধের শিরোনামগুলি name1, value1, name2, value2 ইত্যাদি হিসাবে প্যাক করা হয়। -
drm_session_for_clear_content[Boolean] ভিডিও এবং অডিও ট্র্যাক সাফ করার জন্য একটি DRM সেশন সংযুক্ত করা হবে কিনা। -
drm_multi_session[বুলিয়ান] সুরক্ষিত থাকলে কী ঘূর্ণন সক্ষম করে। -
subtitle_uri[String] একটি সাবটাইটেল সাইডকার ফাইলের URI। -
subtitle_mime_type[String] subtitle_uri এর MIME প্রকার (subtitle_uri সেট করা থাকলে প্রয়োজন)। -
subtitle_language[String] সাবটাইটেল ফাইলের BCP47 ভাষা কোড (subtitle_uri সেট না থাকলে উপেক্ষা করা হয়)। -
ad_tag_uri[String] [IMA এক্সটেনশন][] ব্যবহার করে লোড করার জন্য একটি বিজ্ঞাপন ট্যাগের URI। -
prefer_extension_decoders[বুলিয়ান] প্ল্যাটফর্ম ডিকোডারের চেয়ে এক্সটেনশন ডিকোডার পছন্দ করা হয় কিনা।
-
adb shell am start to fire একটি ইনটেন্ট ব্যবহার করার সময়, --es (যেমন, --es extension mpd ) দিয়ে একটি ঐচ্ছিক স্ট্রিং অতিরিক্ত সেট করা যেতে পারে। --ez (যেমন, --ez prefer_extension_decoders TRUE ) দিয়ে একটি ঐচ্ছিক বুলিয়ান অতিরিক্ত সেট করা যেতে পারে। --el (যেমন, --el clip_start_position_ms 5000 ) দিয়ে একটি ঐচ্ছিক দীর্ঘ অতিরিক্ত সেট করা যেতে পারে। --esa (যেমন, --esa drm_key_request_properties name1,value1 ) দিয়ে একটি ঐচ্ছিক স্ট্রিং অ্যারে অতিরিক্ত সেট করা যেতে পারে।
নমুনার একটি প্লেলিস্ট চালানোর জন্য, ইন্টেন্টের অ্যাকশনটি androidx.media3.demo.main.action.VIEW_LIST এ সেট করুন। নমুনা কনফিগারেশনের অতিরিক্ত বৈশিষ্ট্যগুলি androidx.media3.demo.main.action.VIEW এর মতোই থাকে, দুটি পার্থক্য ছাড়া:
- অতিরিক্ত কীগুলিতে একটি আন্ডারস্কোর থাকা উচিত এবং নমুনার 0-ভিত্তিক সূচক প্রত্যয় হিসাবে থাকা উচিত। উদাহরণস্বরূপ,
extension_0প্রথম নমুনার জন্য নমুনার ধরণ নির্দেশ করবে।drm_scheme_1দ্বিতীয় নমুনার জন্য DRM স্কিম সেট করবে। - নমুনার uri কে
uri_<sample-index>কী দিয়ে অতিরিক্ত হিসেবে পাস করা হয়।
অন্যান্য অতিরিক্ত, যা নমুনা নির্ভর নয়, পরিবর্তন হয় না। উদাহরণস্বরূপ, আপনি টার্মিনালে নিম্নলিখিত কমান্ডটি চালাতে পারেন যাতে দুটি আইটেম সহ একটি প্লেলিস্ট চালানো যায়, দ্বিতীয় আইটেমের এক্সটেনশনকে ওভাররাইড করে:
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