নিচের কন্টেনার ফর্ম্যাটে থাকা স্ট্রিম সরাসরি ExoPlayer-এর মাধ্যমে চালানো যাবে। এছাড়াও, কন্টেনারে থাকা অডিও ও ভিডিও স্যাম্পেল ফর্ম্যাট কাজ করতে হবে (বিস্তারিত জানতে স্যাম্পেল ফর্ম্যাট বিভাগ দেখুন)। ইমেজ কন্টেনার ও ফর্ম্যাট সাপোর্ট সম্পর্কে জানতে, ছবি দেখুন।
| কন্টেনার ফর্ম্যাট | কাজ করে | কমেন্ট |
|---|---|---|
| MP4 | হ্যাঁ | |
| M4A | হ্যাঁ | |
| FMP4 | হ্যাঁ | |
| WebM | হ্যাঁ | |
| Matroska | হ্যাঁ | |
| MP3 | হ্যাঁ | কিছু স্ট্রিম শুধুমাত্র কনস্ট্যান্ট বিটরেট সিকিং ব্যবহার করে খোঁজা যায়** |
| Ogg | হ্যাঁ | Vorbis, Opus ও FLAC আছে |
| WAV | হ্যাঁ | |
| MPEG-TS | হ্যাঁ | |
| MPEG-PS | হ্যাঁ | |
| FLV | হ্যাঁ | সিক করা যায় না* |
| ADTS (AAC) | হ্যাঁ | শুধুমাত্র কনস্ট্যান্ট বিটরেট সিকিং ব্যবহার করে খোঁজা যায়** |
| FLAC | হ্যাঁ | FLAC লাইব্রেরি অথবা ExoPlayer লাইব্রেরিতে FLAC এক্সট্র্যাক্টর ব্যবহার করা*** |
| AMR | হ্যাঁ | শুধুমাত্র কনস্ট্যান্ট বিটরেট সিকিং ব্যবহার করে খোঁজা যায়** |
* কন্টেনারে মেটাডেটা (যেমন, স্যাম্পেল ইনডেক্স) না থাকার কারণে সিকিং কাজ করে না। এর ফলে মিডিয়া প্লেয়ার দক্ষতার সাথে সিকিং পারফর্ম করতে পারে না। সিকিংয়ের প্রয়োজন হলে, আরও উপযুক্ত কন্টেনার ফর্ম্যাট ব্যবহার করার জন্য সাজেস্ট করা হয়।
** এইসব এক্সট্র্যাক্টরে কনস্ট্যান্ট বিটরেট অ্যাজাম্পশন ব্যবহার করে
আনুমানিক সিকিং চালু করার জন্য FLAG_ENABLE_CONSTANT_BITRATE_SEEKING ফ্ল্যাগ আছে। এই
কার্যকারিতা ডিফল্ট হিসেবে চালু করা থাকে না। এই ফাংশনালিটি কাজ করে এমন সব এক্সট্র্যাক্টরের জন্য এটি চালু করার সবচেয়ে সহজ উপায় হল, এখানে
বর্ণিত DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
ব্যবহার করা।
*** FLAC লাইব্রেরি এক্সট্র্যাক্টর থেকে পাওয়া আউটপুট হল র অডিও, যা
সব API লেভেলে ফ্রেমওয়ার্কের মাধ্যমে ম্যানেজ করা যায়। ExoPlayer লাইব্রেরি FLAC এক্সট্র্যাক্টর
FLAC অডিও ফ্রেম আউটপুট করে এবং তাই FLAC ডিকোডার (যেমন, FLAC (API লেভেল ২৭ থেকে প্রয়োজন) হ্যান্ডেল করে এমন MediaCodec
ডিকোডার অথবা FLAC চালু করা
FFmpeg লাইব্রেরি) থাকার উপর নির্ভর করে। DefaultExtractorsFactory, FLAC লাইব্রেরি দিয়ে অ্যাপ্লিকেশন তৈরি করা হলে
এক্সটেনশন এক্সট্র্যাক্টর ব্যবহার করে।
অন্যথায়, এটি ExoPlayer লাইব্রেরি এক্সট্র্যাক্টর ব্যবহার করে।
MediaItem ব্যবহার করা
প্রোগ্রেসিভ স্ট্রিম চালাতে, মিডিয়া URI সহ একটি MediaItem তৈরি করুন এবং সেটি প্লেয়ারে
পাস করুন।
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)) // Prepare the player. player.prepare()
জাভা
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)); // Prepare the player. player.prepare();
ProgressiveMediaSource ব্যবহার করা
আরও কাস্টমাইজেশন বিকল্পের জন্য, আপনি ProgressiveMediaSource তৈরি করতে পারেন এবং
MediaItem-এর পরিবর্তে সরাসরি প্লেয়ারে পাস করতে পারেন।
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a progressive media source pointing to a stream uri. val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
জাভা
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a progressive media source pointing to a stream uri. MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
প্লেব্যাক কাস্টমাইজ করা
ExoPlayer আপনার অ্যাপের প্রয়োজন অনুযায়ী প্লেব্যাক অভিজ্ঞতা কাস্টমাইজ করার একাধিক উপায় প্রদান করে। উদাহরণ দেখতে কাস্টমাইজেশন পৃষ্ঠা দেখুন।