Media3
| লেটেস্ট আপডেট | স্টেবল রিলিজ | রিলিজ ক্যান্ডিডেট | বিটা রিলিজ | আলফা রিলিজ |
|---|---|---|---|---|
| ১১ নভেম্বর, ২০২৬ | ১.১১.১ | - | 1.12.0-beta01 | - |
ডিপেন্ডেন্সি ঘোষণা করা
Media3-তে ডিপেন্ডেন্সি যোগ করতে, আপনার প্রোজেক্টে Google Maven রিপোজিটরি যোগ করতে হবে। আরও তথ্যের জন্য Google-এর Maven রিপোজিটরি পড়ুন।
আপনার অ্যাপ বা মডিউলের জন্য build.gradle ফাইলে আপনার প্রয়োজনীয় আর্টিফ্যাক্টের জন্য ডিপেন্ডেন্সি যোগ করুন:
গ্ৰুভি
dependencies { def media3_version = "1.11.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
ডিপেন্ডেন্সি সম্পর্কে আরও তথ্যের জন্য, বিল্ড ডিপেন্ডেন্সি যোগ করুন দেখুন।
মতামত
আপনার মতামত Jetpack-কে আরও ভাল করে তুলতে সাহায্য করে। আপনি Media3 ইস্যু ট্র্যাকার ব্যবহার করে প্রশ্নের উত্তর, পরিচিত সমস্যা ও ফিচার সংক্রান্ত অনুরোধ খুঁজে পেতে এবং নতুন সমস্যা ফাইল করতে পারবেন।
ভার্সন 1.12.0
ভার্সন 1.12.0-beta01
১১ নভেম্বর, ২০২৬
ভার্সন 1.12.0-beta01-এ নিম্নলিখিত কমিট রয়েছে।
- কমন লাইব্রেরি:
65536থেকেC.DEFAULT_BUFFER_SEGMENT_SIZEকমিয়ে65520করুন যাতে প্রতিটি বাফার অ্যালোকেশন (তারbyte[]অবজেক্ট হেডার সহ) ART-এর বড় অবজেক্ট স্পেসে সম্পূর্ণ OS পেজে ফিট করে, যা ৪ KiB-পেজ ডিভাইসে ~৬% এবং ১৬ KiB-পেজ ডিভাইসে ~২০% স্যাম্পেল বাফার মেমরি ব্যবহার কমায়।androidx.media3.common.util.NullableType-এর পরিবর্তে JSpecifyorg.jspecify.annotations.Nullableব্যবহার করুন।- JSpecify nullness অ্যানোটেশনের জন্য
androidx.media3.common.util.UnknownNullসরান।RunnableFutureTask-এর Kotlin সাবক্লাস, যার ফলাফলের ধরন নালেবেল (যেমনVoid?), সেটিকে অবশ্যই নালেবেল ধরনের আর্গুমেন্ট (যেমনRunnableFutureTask<Void?, Exception>) নির্দিষ্ট করতে হবে। - ভিডিও কন্টেনার প্রদান করতে
AdViewProvider.getAdVideoView()যোগ করুনViewযা বিজ্ঞাপন প্লেব্যাক চলাকালীন ছোট বড় করা যেতে পারে। MimeTypes.getMediaMimeType-এmlpaRFC 6381 কোডেক স্ট্রিংMimeTypes.AUDIO_TRUEHD-এ ম্যাপ করুন, HLS চাঙ্কলেস প্রস্তুতি চলাকালীন অনুপস্থিত মাক্সড Dolby TrueHD অডিও ট্র্যাক ঠিক করা হচ্ছে (#3485)।- পাস করা অ্যারে কপি করতে
AdPlaybackState.withAdDurationsUsএবং বিজ্ঞাপন গ্রুপের সব অ্যারে ফিল্ড কপি করতেAdPlaybackState.fromAdPlaybackStateঠিক করুন, যাতে রিটেন করা বা শেয়ার করা অ্যারের মাধ্যমে কোনও ইনস্ট্যান্স আর পরিবর্তন করা না যায়। IllegalStateException("ভুল থ্রেডে প্লেয়ার অ্যাক্সেস করা হয়েছে।") সমস্যার সমাধান করুন, যখন প্লেয়ারের অ্যাপ্লিকেশন থ্রেড ছাড়া অন্য কোনও থ্রেড থেকেPlayer.listenবাPlayer.listenToবাতিল করা হয় (যেমন, Compose UI টেস্ট টিয়ারডাউন চলাকালীন) (#৩০০৫)।
- ExoPlayer:
- আসন্ন মিডিয়া পিরিয়ডের জন্য আগে থেকে চালু করা রেন্ডারার, প্লেব্যাক ট্রানজিশন সেই পিরিয়ডে পৌঁছানোর আগেই রেন্ডারিং শুরু করে দিতে পারে, এই সমস্যার সমাধান করা হয়েছে।
CompositeMediaSource-এর Kotlin সাবক্লাস যা নালেবল চাইল্ড সোর্স আইডি (যেমনVoid?) ব্যবহার করে, সেটিকে অবশ্যই নালেবল টাইপ আর্গুমেন্ট (যেমনCompositeMediaSource<Void?>) নির্দিষ্ট করতে হবে।AdsMediaSource-এ যাচাই করুন যেAdPlaybackState.removedAdGroupCountAdPlaybackStateআপডেট জুড়ে কমে না।- বিভিন্ন রেন্ডারার ব্যবহার করে এমন মিডিয়া পিরিয়ডের মধ্যে ট্রানজিশন করার সময় একটি সমস্যার সমাধান করুন
আউটগোয়িং রেন্ডারার রেন্ডারিং শেষ করার আগে ইনকামিং রেন্ডারারকে অকালিকভাবে সক্ষম করতে পারে (উদাহরণস্বরূপ, থ্রোয়িং
IllegalStateException("একাধিক রেন্ডারার মিডিয়া ঘড়ি সক্ষম করা হয়েছে।")) যখনFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONসক্ষম করা হয়। - কাস্টম প্লেব্যাক স্পিডে বিজ্ঞাপনে ট্রানজিশন করার সময় হওয়া সমস্যা সমাধান করুন
যেখানে
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONচালু থাকলে বিজ্ঞাপন দেখানোর সময় সব রেন্ডারারকে অগ্রসর করতে দেরি হতে পারে। - মিডিয়া পিরিয়ড ট্রানজিশন ও ট্র্যাক রিসিলেকশনের সময় প্রি-ওয়ার্মিং রেন্ডারার সংক্রান্ত সমস্যার সমাধান করা।
MediaPeriod.supportsStreamPrerollFlags()(ডিফল্ট হিসেবেfalse) যোগ করুন যাতে কাস্টমMediaPeriodইমপ্লিমেন্টেশনSampleStream.getFlags()ব্যবহার করে প্রাথমিক ডিসকন্টিনিউটি রিপোর্ট করার বিকল্প বেছে নিতে পারে, কাজ না করলেMediaPeriod.readDiscontinuity()-এ ফিরে যায় এবংFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONচালু করা থাকে।- একই বিজ্ঞাপন গ্রুপের মধ্যে একটি বিজ্ঞাপন স্কিপ করার পরে আরেকটি বিজ্ঞাপন দেখানো হলে,
DISCONTINUITY_REASON_SKIP-এর পরিবর্তেDISCONTINUITY_REASON_AUTO_TRANSITION-এর মাধ্যমে রিপোর্ট করা হচ্ছিল অথবাAdsMediaSource-এর মাধ্যমে লেজি কন্টেন্ট সোর্স প্রস্তুতি ব্যবহার করা হলে, কোনও রিপোর্টই করা হচ্ছিল না। এই সমস্যার সমাধান করা হয়েছে।
- ট্রান্সফর্মার:
- CodecDB (
androidx.media3.transformer.codecdb) যোগ করুন, যা পরিমাপ করা এনকোডার কোয়ালিটি ডেটা থেকে বর্তমান ডিভাইসের জন্য ভিডিও এনকোডার কনফিগারেশন (কোডেক, এনকোডার সেটিংস ও বিটরেট) সাজেস্ট করে।
- CodecDB (
- এক্সট্র্যাক্টর:
- ADTS:
AdtsExtractor-এর সমস্যা সমাধান করা হয়েছে, যেখানে আংশিক প্রথম ফ্রেমের পেলোডে ভুল সিঙ্ক শব্দ থেকে অডিও ফর্ম্যাট পাওয়া যাচ্ছিল, যার ফলে মিড-ফ্রেমে যোগ দেওয়া লাইভ AAC স্ট্রিমের প্লেব্যাক ব্যর্থ বা বন্ধ হয়ে যেতে পারে (#3464)। FragmentedMp4Extractor-এArrayIndexOutOfBoundsExceptionঠিক করুন যখন একটি ফ্র্যাগমেন্টে কোনও স্যাম্পেল ছাড়াই একটিtrunবক্স থাকে (#3471)।- ADTS:
application/id3ট্র্যাক হিসেবে আউটপুট হওয়া থেকে স্ট্রিমে ID3 ডেটা বন্ধ করতেFLAG_DISABLE_ID3_METADATA-কেAdtsExtractor-এ যোগ করুন। - MP4: AAC ট্র্যাকের গ্যাপলেস প্লেব্যাক সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার মাক্সার (যেমন FFmpeg)
এনকোডার প্যাডিং বাদ দেওয়ার জন্য শেষ
sttsএন্ট্রি ছোট করে দেয়, যার ফলে প্যাডিংelstএডিট লিস্ট থেকে ০ হিসেবে পাওয়া যায় এবং শেষ ফ্রেমের শেষ অংশ চালানো হয় (#৩৪৮৯)। ID3দিয়ে শুরু হওয়া নষ্ট বা মিডিয়া নয় এমন ফাইল স্নিফ করার সময় বড় আপফ্রন্ট পিক বাফার অ্যালোকেশন এবংOutOfMemoryErrorসংক্রান্ত সমস্যার সমাধান করুন (#3502)।
- ADTS:
- ইন্সপেক্টর:
MetadataRetriever.retrieveDurationUs()-এর মাধ্যমে রিটার্ন করা ফিউচার বাতিল করার ফলেclose()-এর মাধ্যমে অন্তর্নিহিতMediaSourceরিলিজ করার ক্ষেত্রে যে সমস্যা হচ্ছিল, তা সমাধান করা হয়েছে (#3468)।MediaExtractorCompatঠিক করুন যাতেMediaFormat.KEY_FRAME_RATE-কে পূর্ণসংখ্যা হিসেবে রিটার্ন করা যায়, যা প্ল্যাটফর্মMediaExtractor-এর সাথে ম্যাচ করে।
- অডিও:
- প্লেব্যাক স্কিপ করা অঞ্চলে পৌঁছানোর আগে (#3472)
AudioSink.getCurrentPositionUs(boolean)-এ বাফার করা স্কিপ করা সাইলেন্স অন্তর্ভুক্ত করা এবংAudioSink.Listener.onSilenceSkipped()ব্যবহার করে রিপোর্ট করার সমস্যা সমাধান করুন। - কমপ্রেস করা ফর্ম্যাট থেকে ডিকোড করা স্পেশিয়ালাইজড মাল্টিচ্যানেল PCM অডিও চালানোর সময়
API 37+ ভার্সনে
AudioTrack.Builder.setCodecProvenanceব্যবহার করে কোডেক প্রোভেন্যান্স সেট করুন। - ১ সেকেন্ডের অডিও অন্তত প্রাথমিক বাফার সাইজের সমান হলে
AudioTrackইনিশিয়ালাইজেশন আবার চেষ্টা করার বিষয়টি এড়িয়ে যাওয়া সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার ফলে সীমিত অডিও মেমরি (#3487) সহ ডিভাইসে DTS-HD পাসথ্রু ব্যর্থ হয়েছে।
- প্লেব্যাক স্কিপ করা অঞ্চলে পৌঁছানোর আগে (#3472)
- ভিডিও:
- ব্যাকওয়ার্ড-কম্প্যাটিবল Dolby Vision প্রোফাইল ৭ স্ট্রিমের জন্য H.265/HEVC ডিকোডারে ফিরে যাওয়ার অনুমতি দিন এবং প্রোফাইল ১০ স্ট্রিমের জন্য AV1 ডিকোডারে আর ফিরে যাবেন না, যার বেস লেয়ার নির্দিষ্ট না করা ট্রান্সফার বৈশিষ্ট্য সহ সম্পূর্ণ রেঞ্জ সিগন্যাল করে (#৩৪৮৬)।
MediaCodecUtil-এ ডিকোডার বেছে নেওয়ার সমস্যা সমাধান করুন যাতে প্রাইমারি ডিকোডার বেছে নেওয়া এড়ানো যায় যেগুলি ফাংশনালি ফর্ম্যাটের প্রোফাইল সাপোর্ট করে না (যেমন অন্য প্রোফাইলের জন্য Dolby Vision ডিকোডার) যখন কোনও ডিকোডার সম্পূর্ণভাবে ফর্ম্যাট সাপোর্ট করে না (#3486)।
- টেক্সট:
DvbParser-এ মেমরির ব্যবহার কমানোর জন্য সাবটাইটেল দেখানোর জায়গা সরাসরি সেই সাইজের বিটম্যাপে রেন্ডার করা হয়, ফুল-স্ক্রিন স্ক্র্যাচ বিটম্যাপ রাখা হয় না।
- প্রভাব:
- Muxers:
Mp4MuxerবাFragmentedMp4Muxer-এ ট্র্যাক যোগ করার সময়Formatট্র্যাকটি যাচাই করুন, যাতে পরে স্যাম্পেল লেখার সময় বা মাক্সার বন্ধ করার সময় কোনও সমস্যা না হয়।Muxer.close()-এ বারবার কল করুন, সব লাইব্রেরিMuxerইমপ্লিমেন্টেশনে কোনও অপারেশন নেই এবংclose()থ্রো করলেও মাক্সারকে বন্ধ হিসেবে বিবেচনা করুন।close()-এর পরে অন্য কোনও পদ্ধতি কল করলে এখনIllegalStateExceptionদেখায়।
- IMA এক্সটেনশন:
- ইন্টার্যাক্টিভ বিজ্ঞাপনকে বিজ্ঞাপন কন্টেনারের মধ্যে ভিডিও প্লেয়ার ভিউয়ের সাইজ ও পজিশন পরিবর্তন করার অনুমতি দিতে, IMA SDK-এর
ResizablePlayerইন্টারফেসকে সাপোর্ট করুন এবংImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)(ImaAdsLoader.requestAds(DataSpec, Object, ViewGroup)বন্ধ করা হচ্ছে) যোগ করুন।
- ইন্টার্যাক্টিভ বিজ্ঞাপনকে বিজ্ঞাপন কন্টেনারের মধ্যে ভিডিও প্লেয়ার ভিউয়ের সাইজ ও পজিশন পরিবর্তন করার অনুমতি দিতে, IMA SDK-এর
- সেশন:
- মিডিয়া বোতামের পছন্দ সংক্রান্ত API স্টেবিলাইজ করা।
CacheBitmapLoader-এ কম্প্রেস করা আর্টওয়ার্ক ডেটা আর না রেখে মেমরির ব্যবহার কমান।- টাইমলাইন আপডেট করার সময় অপ্রয়োজনীয়
MediaSession.setQueue(null)কল এড়িয়ে চলুন যখন প্ল্যাটফর্ম সেশন কিউ আগে থেকেইnull(যেমন, যখনPlayer.COMMAND_GET_TIMELINEউপলভ্য নেই)। - একটি সমস্যা সমাধান করুন যেখানে
MediaSessionServiceকোনও পরিষেবা বাস্তবায়নকে নতুন সেশন তৈরি করার চেষ্টা না করে সঠিকভাবে পুনরুদ্ধার করার বিকল্প দেয়নি (#3490)। Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED-এর পরিবর্তেPlayer.TIMELINE_CHANGE_REASON_SOURCE_UPDATEরিপোর্ট করুন যখন একটি লিগ্যাসিMediaSessionCompatমেটাডেটা আপডেট সারি পরিবর্তন না করেই অ্যাক্টিভ সারি আইটেমের মেটাডেটা বা সময়কাল পরিবর্তন করে।nullMETADATA_KEY_DISPLAY_ICON(বা আর্টওয়ার্ক URI) সহ একটি সঠিকMETADATA_KEY_ALBUM_ARTসেট করা লিগ্যাসি সেশনের জন্য অনুপস্থিত আর্টওয়ার্ক সংক্রান্ত সমস্যার সমাধান করুন: লিগ্যাসি মেটাডেটা কনভার্ট করার সময় এখন ফাঁকা আর্টওয়ার্ক ভ্যালু এড়িয়ে যাওয়া হয়।
- UI:
subtitlesকম্পোজেবল স্লটContentFrameওPlayer-এ যোগ করুন, বিটম্যাপ ও অনুভূমিক টেক্সট সাবটাইটেল কিউ রেন্ডার করার জন্যmedia3-ui-compose-material3-এ ডিফল্ট সহায়তা সহ।- Add
SubtitleView.setTextDirectionHeuristicto allow customizing the text direction heuristic used for bidirectional subtitle text wrapping (#3454). media3-ui-compose-material3-এPlayer-এর সব কন্ট্রোল স্লট অ্যানিমেট করুন, কাস্টম স্লট সহ এবংvisibleপ্যারামিটারটিPlayerDefaults.TopControls,CenterControlsএবংBottomControlsথেকে সরান। এটি একটি অস্থির API-তে ব্রেকিং পরিবর্তন।PlayerView-এAdViewProvider.getAdVideoView()-কে সাপোর্ট করুন,exo_content_frame_container-এexo_content_frameর্যাপ করে।- কিউ মুছে দেওয়ার সময় ক্যাশে করা সাবটাইটেল বিটম্যাপ ও টেক্সট লেআউট রিলিজ করে
SubtitleView-এ মেমরির ব্যবহার কমানো এবং লেআউট করার জন্য কিউয়ের পর্যাপ্ত প্রস্থ না থাকলে বাসি সাবটাইটেল টেক্সট দৃশ্যমান থেকে যাওয়ার সমস্যা সমাধান করা।
- HLS এক্সটেনশন:
- ব্যর্থ বা বাতিল হওয়া HLS মিডিয়া চাঙ্ক রিলোড করার সময়, আংশিকভাবে বাফার করা স্যাম্পেল বাদ না দিয়ে বা স্প্লাইস না করে রেখে দেওয়া অথবা লোড পজিশন রিসেট করে পুরনো সিক পজিশনে নিয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#3362)।
- অ্যাডাপ্টিভ ট্র্যাক সুইচ করার পরে বাফার করা সেগমেন্টের শুরুতে
যাওয়ার সময়
IllegalStateExceptionসংক্রান্ত সমস্যার সমাধান করুন। - HLS কন্টেন্ট স্টিয়ারিং (#৩৪৬৫) ব্যবহার করে পাথওয়ে পরিবর্তন করার সময় প্লেব্যাক সংক্রান্ত বিভিন্ন সমস্যার সমাধান করা হয়েছে।
- DASH এক্সটেনশন:
- কোনও স্ট্রিমে একাধিক এম্বেড করা ক্যাপশন ট্র্যাক থাকলে, ডুপ্লিকেট বা বিকৃত CEA-608 সাবটাইটেল সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#৮৮৭)।
- কাস্ট এক্সটেনশন:
- Android TV রিসিভারের মাধ্যমে
RemoteCastPlayerলোড করার অনুরোধ ড্রপ হয়ে যাওয়ার সমস্যার সমাধান করা হয়েছে (#৩৪৬২)। com.google.android.gms:play-services-cast-frameworkডিপেন্ডেন্সি23.0.0-এ আপডেট করুন।CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)যোগ করুন যাতেMediaTransferReceiver-কেAndroidManifest.xml-এ ঘোষণা না করেই সিস্টেম আউটপুট সুইচারে Cast ডিভাইস দেখা যাবে কিনা তা কনফিগার করা যায় এবং API 37+ রান করা ডিভাইসে API 37+ টার্গেট করা অ্যাপের জন্য ডিফল্ট হিসেবে সিস্টেম আউটপুট সুইচার চালু করা যায়।DefaultMediaItemConverter-এ আগে থেকে নির্ধারিত CastMediaMetadataফিল্ডে সহায়তা করে, এর জন্যMediaItem.mediaMetadataপ্রপার্টি থেকে এবংMediaItem.mediaMetadata.extras-এ ডেডিকেটেড প্রপার্টি ছাড়াই ফিল্ড ম্যাপ করে এবংMediaInfo.customData-এ কাস্টম অতিরিক্ত তথ্য সংরক্ষণ করে।- প্লেব্যাক URI না থাকলে বা কনভার্ট করা না গেলে
DefaultMediaItemConverter-এ ব্যতিক্রম দেখানো বন্ধ করুন, প্লেব্যাক URI ছাড়া Cast সারির আইটেমের জন্যCastPlayerটাইমলাইনে মিডিয়া আইডি এবং মেটাডেটা সংরক্ষণ করুন। CastPlayer-এ 'যোগ দেওয়ার ইনটেন্ট' ব্যবহার করে কোনও কাস্ট সেশনে যোগ দেওয়ার সময়, উপলভ্য কাস্ট সেশনটি যোগ দেওয়ার ইনটেন্ট ব্যবহার করে শুরু করা হয়েছে কিনা তা নির্দেশ করতেSessionAvailabilityListener.onCastSessionAvailable(boolean)যোগ করুন এবং লোকাল প্লেয়ার স্ট্যাটাস দিয়ে ওভাররাইট করার পরিবর্তে রিমোট প্লেব্যাক স্ট্যাটাস বজায় রাখুন।DefaultMediaItemConverterএবংRemoteCastPlayer-এ লাইভ নয় এমন আইটেমের জন্যMediaMetadata.durationMsথেকেMediaInfoএবং টাইমলাইনের সময়সীমা পপুলেট করুন এবং রিসিভার-সমাধান করা সময়সীমা এবং সারি খোঁজা জুড়ে লাইভস্ট্রিম স্ট্যাটাস ধরে রাখুন।
- Android TV রিসিভারের মাধ্যমে
- ডেমো অ্যাপ:
- সেশন ডেমো অ্যাপে টেনে এনে প্লেলিস্ট আইটেম আবার সাজানোর অনুমতি দিন।
- বাতিল করা চিহ্ন সরান:
androidx.media3.transformer.TextureAssetLoaderসরান। পরিবর্তেandroidx.media3.transformer.RawAssetLoaderব্যবহার করুন।- সর্বজনীন
DefaultDecoderFactoryকনস্ট্রাক্টর সরান। পরিবর্তেDefaultDecoderFactory.Builderব্যবহার করুন। DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MSসরান। পরিবর্তেDefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MSব্যবহার করুন।DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean)সরান। পরিবর্তেVideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATIONব্যবহার করুন।EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)এবংEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean)সরিয়ে দিন। পরিবর্তেEditedMediaItemSequence.Builder(Set)ব্যবহার করুন।EditedMediaItemSequence.forceAudioTrackসরান। পরিবর্তেtrackTypes.contains(C.TRACK_TYPE_AUDIO)ব্যবহার করুন।EditedMediaItemSequence.forceVideoTrackসরান। পরিবর্তেtrackTypes.contains(C.TRACK_TYPE_VIDEO)ব্যবহার করুন।ExportResult.durationMsএবংExportResult.Builder.setDurationMsসরিয়ে দিন। পরিবর্তেExportResult.approximateDurationMsএবংExportResult.Builder.setApproximateDurationMsব্যবহার করুন।SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_USসরান। পরিবর্তেsilenceRetentionRatioব্যবহার করে সাইলেন্স আচরণ নির্দিষ্ট করুন।Timeline.getPeriodPosition(Window, Period, int, long, long)সরান। পরিবর্তেTimeline.getPeriodPositionUs(Window, Period, int, long, long)ব্যবহার করুন।
ভার্সন 1.12.0-alpha02
২৬ অক্টোবর, ২০২৬
ভার্সন 1.12.0-alpha02-এ নিম্নলিখিত কমিট রয়েছে।
- Play পরিষেবার উপর প্রভাব:
- Google Play পরিষেবার মিডিয়া এফেক্ট প্রদানকারী নতুন
media3-effect-play-servicesমডিউল নিয়ে আসুন, যার মধ্যে ভিডিও এনহ্যান্সমেন্টের জন্যEnhancementSessionDecoratorএবং অডিও সোর্স আলাদা করার জন্যStudioSoundAudioProcessorঅন্তর্ভুক্ত।
- Google Play পরিষেবার মিডিয়া এফেক্ট প্রদানকারী নতুন
Version 1.12.0-alpha01
২১ অক্টোবর, ২০২৬
1.12.0-alpha01 ভার্সনে নিম্নলিখিত কমিট রয়েছে।
- কমন লাইব্রেরি:
C.COLOR_SPACE_DISPLAY_P3যোগ করুন এবংMediaFormatUtilওColorInfoISO কালার ম্যাপিংয়ে Display P3 কালার স্পেসের জন্য সহায়তা প্রদান করুন।- পরীক্ষামূলক ফিচার ফ্ল্যাগ ও
পর্যায়ক্রমিক প্রকাশ (
Flags.setCanaryModeEnabled) ম্যানেজ করতে সেন্ট্রালFlagsরেজিস্ট্রি যোগ করুন। নতুন ফ্ল্যাগ API ব্যবহার করার জন্য আগে থেকে থাকা অনেক@ExperimentalApiপদ্ধতি মাইগ্রেট করা হয়েছে। MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesএবংMediaMetadata.Builder.setCategories(List<String>)যোগ করুন।androidx.media3.common.util.NonNullApi-এর পরিবর্তে JSpecifyorg.jspecify.annotations.NullMarkedব্যবহার করুন।
- ExoPlayer:
- পরবর্তী পিরিয়ডের প্রথম চাঙ্ক লোড হতে না পারলে, DASH মাল্টি-পিরিয়ড প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে (#3396)।
AnalyticsListener.onLoadError-এwasCanceled = trueরিপোর্ট করুন এবং লোড করার চেষ্টা শেষ হয়ে গেলেMediaSourceEventListener.onLoadError।ExoPlayer.addVideoFrameMetadataListenerএবংExoPlayer.removeVideoFrameMetadataListenerব্যবহার করে একাধিকVideoFrameMetadataListenerইনস্ট্যান্স রেজিস্টার করার সুবিধা,ExoPlayer.setVideoFrameMetadataListenerএবংExoPlayer.clearVideoFrameMetadataListenerবন্ধ করা হচ্ছে।- প্রতিটি পিরিয়ডের জন্য
AdPlaybackStateস্প্লিট ও অফসেট করে মাল্টি-পিরিয়ড কন্টেন্টে (যেমন, DASH) বিজ্ঞাপনের জন্য সহায়তা যোগ করুন। PreCacheHelper-এ রেস কন্ডিশন ঠিক করুন যেখানে চলমান প্রস্তুতির অনুরোধ বাতিল করা হলেও ব্যাকগ্রাউন্ড ডাউনলোড শুরু হতে পারে।ProgressiveMediaSource-এsetLoadOnlySelectedTracks(true)এবংDefaultMediaSourceFactory-এ শুধু বেছে না নেওয়া ভিডিও এবং ছবির ট্র্যাক ফিল্টার করার জন্য সীমাবদ্ধ করুন। অডিও এবং টেক্সট ট্র্যাক সবসময় লোড করা হয় যাতে রি-বাফারিং ছাড়াই নির্বিঘ্নে ট্র্যাক পাল্টানো যায়।ProgressiveMediaSourceওDefaultMediaSourceFactory-এ ডিফল্ট হিসেবেsetLoadOnlySelectedTracks(true)চালু করুন। এটি মেমরি বাঁচায় এবং সব ট্র্যাক বেছে না নেওয়া হলেDefaultLoadControlবাফার অ্যালোকেশন গণনাকে আরও নির্ভুলভাবে কাজ করার অনুমতি দেয়। মনে রাখবেন যে, প্লেব্যাক চলাকালীন বেছে না নেওয়া ভিডিও বা ইমেজ ট্র্যাক নতুন করে চালু করা হলে, অতিরিক্ত বাফারিং হতে পারে।- ডায়নামিক শিডিউলিং চালু থাকলে (#3286),
Player.getCurrentPosition()-এর পুরনো ভ্যালু (প্রতি সেকেন্ডে মাত্র কয়েকবার আপডেট করা) ফেরত দেওয়ার সমস্যা সমাধান করা হয়েছে। AudioTrackপ্লেব্যাক হেড পজিশনে অপ্রত্যাশিতভাবে কমে যাওয়া বা রিসেট হওয়ার সমস্যা সমাধান করা হয়েছে, যা ভুলভাবে ইন্টিজার ওভারফ্লো হিসেবে বিবেচিত হতে পারে, যার ফলে বাফারিংয়ের সময় প্লেব্যাক থেমে যায় (#3407)।- এক্সপেরিমেন্টাল
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)সরান। - ইন্টারস্টিশিয়াল বা শেষে ক্লিপ করা কন্টেন্টের বিজ্ঞাপনে ফিরে আসার সময় অপ্রয়োজনীয় রেন্ডারার আবার চালু করা এবং গ্লিচ এড়িয়ে চলুন (#3371)।
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONচালু থাকলে, আসন্ন প্লেলিস্ট আইটেমে রেন্ডারার সংক্রান্ত সমস্যার কারণে বর্তমান প্লেব্যাক সময়ের আগেই বন্ধ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONচালু থাকার সময়ExoPlayerপ্রস্তুত নয় এমন মিডিয়া পিরিয়ডে রেন্ডারার ট্রানজিশন করলেNullPointerExceptionহতে পারে, সেটি ঠিক করুন।- ডায়নামিক শিডিউলিংয়ের সময় ভিডিও ফ্রেম অপ্রত্যাশিতভাবে স্কিপ বা ড্রপ হয়ে যাওয়ার সমস্যা সমাধান করুন,
যখন
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSচালু থাকে। - লাইভস্ট্রিমে বিজ্ঞাপন চলাকালীন প্লেব্যাক বন্ধ করার সময়
অ্যানালিটিক্স লিসেনারে
ArrayIndexOutOfBoundsExceptionসংক্রান্ত সমস্যার সমাধান করুন (#3423)। preload()কখনও কল না করা হলেওPreloadMediaSourceঅপ্রত্যাশিতভাবে প্রিলোড ইভেন্ট পোস্ট করতে পারে, এই সমস্যার সমাধান করা হয়েছে (#3408)।- মেটাডেটা ট্র্যাকের জন্য
Format.subsampleOffsetUsউপেক্ষা করার ফলে ডিকোড করা SCTE-35 স্প্লাইস কমান্ডে ভুল প্লেব্যাক টাইমস্ট্যাম্পের সমস্যা সমাধান করা হয়েছে (#3413)। PreloadMediaSourceএবংDefaultPreloadManager-এ মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন যখন একই সোর্সেpreload()একাধিকবার কল করা হয় (#3445)।- কন্টেন্ট টাইমলাইন রিফ্রেশ করা বাকি থাকার সময়
AdsMediaSourceরিলিজ করার সময়NullPointerExceptionসংক্রান্ত সমস্যার সমাধান করা (#3442)। - প্রোগ্রেসিভ মিডিয়ার প্লেব্যাক ভুল পজিশনে চলে যাওয়ার সমস্যা সমাধান করা হয়েছে। খোঁজার পরে লোড করার সময় (অথবা শূন্য নয় এমন পজিশনে প্লেব্যাক শুরু করার সময়) ব্যর্থ হলে এবং আবার চেষ্টা করা হলে এই সমস্যা দেখা দেয় (#৩৪৪০)।
- Xiaomi TV Stick 4K (MiTV-AYFR0) H.264 ডিকোডারের জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন যা রেজোলিউশন পরিবর্তন করার সময় ফ্রিজ হয়ে যায় (#3457)।
- পোস্ট করা লোড সম্পূর্ণ হওয়ার আগে ট্র্যাকার বন্ধ হয়ে গেলে বা এরর কলব্যাক এক্সিকিউট হলে (#3443)
SteeringManifestTracker-এNullPointerExceptionসংক্রান্ত সমস্যার সমাধান করা হয়েছে। - MP4 ফাইলের
mebxবক্সড মেটাডেটা ট্র্যাক থেকে HAGC (ST 2094-50) টাইমড মেটাডেটা প্লেব্যাক করার সুবিধা। - প্লেলিস্টে ধীরে ধীরে প্রস্তুত হওয়া মিডিয়া পিরিয়ড এড়িয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- CompositionPlayer:
- প্লেব্যাক ওয়ার্কফ্লোর জন্য
Composition.Builder.setVideoFrameAggregationParametersব্যবহার করে ভিডিও ফ্রেম অ্যাগ্রিগেশনের ফ্রেম রেট কনফিগার করার সুবিধা। - ফ্রেম অ্যাগ্রিগেশনের সময় সবচেয়ে কাছাকাছি টাইমস্ট্যাম্প সহ ফ্রেম বেছে নেওয়ার মাধ্যমে, টাইমস্ট্যাম্প কোয়ান্টাইজেশন বা রাউন্ডিং মিসম্যাচের কারণে মাল্টি-সিকোয়েন্স কম্পোজিশনে ফ্রেম ড্রপ সংক্রান্ত সমস্যার সমাধান করুন। এটি শুধুমাত্র API 29 থেকে চালু করা হয়েছে, কারণ এর জন্য প্রতিটি ভিডিও সিকোয়েন্সে ফ্লাইটে একটি অতিরিক্ত ফ্রেম হোল্ড করতে হয়।
- প্লেব্যাক ওয়ার্কফ্লোর জন্য
- ট্রান্সফর্মার:
- এক্সপোর্ট ওয়ার্কফ্লোর জন্য
Composition.Builder.setVideoFrameAggregationParametersব্যবহার করে ভিডিও ফ্রেম অ্যাগ্রিগেশনের ফ্রেম রেট কনফিগার করার সুবিধা। - ফ্রেম অ্যাগ্রিগেশনের সময় সবচেয়ে কাছাকাছি টাইমস্ট্যাম্প সহ ফ্রেম বেছে নেওয়ার মাধ্যমে, টাইমস্ট্যাম্প কোয়ান্টাইজেশন বা রাউন্ডিং মিসম্যাচের কারণে মাল্টি-সিকোয়েন্স কম্পোজিশনে ফ্রেম ড্রপ সংক্রান্ত সমস্যার সমাধান করুন। এটি শুধুমাত্র API 29 থেকে চালু করা হয়েছে, কারণ এর জন্য প্রতিটি ভিডিও সিকোয়েন্সে ফ্লাইটে একটি অতিরিক্ত ফ্রেম হোল্ড করতে হয়।
AudioProcessorsব্যবহার করা হলেTransformer#setAudioMimeType(AUDIO_RAW)-এর প্রতি শ্রদ্ধাশীল হন। এই সমস্যার সমাধান করার আগে,MimeTypes.AUDIO_RAW-এর জন্য অনুরোধ করা এবংAudioProcessorপ্রয়োগ করার ফলে আউটপুট কম্প্রেস হয়ে যেত।
- এক্সপোর্ট ওয়ার্কফ্লোর জন্য
- ট্র্যাক বেছে নেওয়া:
- কিছু ডিভাইসে কাজ করে এমন Dolby Vision ট্র্যাকের পরিবর্তে SDR ট্র্যাক ভুলভাবে বেছে নেওয়ার সমস্যা সমাধান করা হয়েছে (#3135)।
- এক্সট্র্যাক্টর:
- Mp4Extractor: MP4-এ Opus-এর জন্য
dOpsবক্স পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানেPreSkip,InputSampleRateএবংOutputGainবিগ-এন্ডিয়ান থেকে লিটল-এন্ডিয়ানে কনভার্ট করা হয়নি, যার ফলে কোনও এডিট লিস্ট না থাকলে অডিওর প্রথম ~২৯৯ মিলি সেকেন্ড ড্রপ হয়ে যায় (#3431)। Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESএবংFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265সরিয়ে দিন কারণ H.264 ও H.265-এর জন্য GOP-র মধ্যে স্যাম্পেল ডিপেন্ডেন্সি পার্সিং সাধারণত চালু থাকে।- Mp4Extractor:
Mp4LocationDataপূরণ করার জন্য অল্টিটিউড কোঅর্ডিনেট সহxyzবক্স থেকে লোকেশন মেটাডেটা পার্সিং সংক্রান্ত সমস্যার সমাধান করুন। - এনকোড করা অডিও ফর্ম্যাটের জন্য স্যাম্পেল প্রতি অডিও ফ্রেমের সংখ্যা গণনা করতে
ExtractorUtil.getFramesPerEncodedSampleযোগ করুন (#3367)। - টপ-লেভেল UUID বক্স থেকে XMP মেটাডেটা এক্সট্র্যাক্ট করতে
FLAG_READ_XMP_METADATA-এMp4Extractorযোগ করুন। - ডিভিডি-স্টাইল MPEG-PS কন্টেন্ট চালানোর সময়, পেলোড অডিও রিডারে (#3327) পাস করার আগে,
PsExtractor-এ প্রতিটি PES প্যাকেট থেকেprivate_stream_1সাব-স্ট্রিম হেডার বাদ দিয়ে, বিকৃত AC-3, DTS ও LPCM অডিও ঠিক করুন। - Fix failure in
FragmentedMp4Extractorwhen a version 1tfdtbox encodes a negativebaseMediaDecodeTime(#3412). - MPEG-TS:
Format.stereoModeপপুলেট করার জন্য H.264 এবং H.265 ফ্রেম প্যাকিং অ্যারেঞ্জমেন্ট SEI মেসেজ পার্স করার সুবিধা (#৩৪১৯)। - Dolby Vision প্রোফাইল ২০ কনফিগারেশন ডেটা পার্স করুন এবং ভুল রঙের (#৩৪২৭) সাথে স্ট্যান্ডার্ড HEVC হিসেবে প্লেব্যাক করার পরিবর্তে কাজ করে না এমন Dolby Vision প্রোফাইল বাতিল করুন।
- MP3: LAME/Xing এনকোডার ডিলে ও প্যাডিং মেটাডেটা অ্যাডজাস্টমেন্ট আগের অবস্থায় ফিরিয়ে আনুন
কারণ এটি অনেক
MediaCodecMP3 ডিকোডারের সাথে কাজ করে না (#৩৪২৫)। - Matroska: নেস্টেড
ChapterAtomএলিমেন্ট (#৩৪৩৮) পার্স করার সময়NullPointerExceptionসমস্যার সমাধান করুন। - Ogg: এমন একটি প্যাকেটের ক্ষেত্রে সমস্যার সমাধান করা হয়েছে যার সাইজ ২৫৫ বাইটের গুণিতক এবং পৃষ্ঠার সীমানায় শেষ হয়, সেটি পরবর্তী প্যাকেটের সাথে মার্জ করা হয়।
- MP4:
Mp4ExtractorওFragmentedMp4Extractor-এmebxবক্স করা টাইমড মেটাডেটা ট্র্যাক পার্স করুন।it35কী সহ ট্র্যাকগুলিMimeTypes.APPLICATION_ITUT_T35(HAGC প্লেব্যাক চালু করা) হিসেবে দেখানো হয়।FLAG_EMIT_RAW_MEBX_DATAসেট না করা থাকলে, অন্যান্যmebxট্র্যাক উপেক্ষা করা হয়, যেক্ষেত্রে সবmebxট্র্যাক রMimeTypes.APPLICATION_MEBXহিসেবে এমিট করা হয়। - Ogg: গ্যাপলেস প্লেব্যাকের জন্য Opus এন্ড-প্যাডিং এক্সট্র্যাক্ট করার সুবিধা (#২৫৭৬) এবং কন্টিনিউড প্যাকেট দিয়ে শুরু হওয়া পৃষ্ঠায় যাওয়ার পরে স্যাম্পেল টাইমস্ট্যাম্প সংক্রান্ত সমস্যার সমাধান।
- Ogg: মিড-স্ট্রিম Opus আইডি এবং কমেন্ট হেডার প্যাকেট উপেক্ষা করে চেইনড Ogg Opus স্ট্রিমে ডিকোড সংক্রান্ত সমস্যা এবং ~১ সেকেন্ড টাইমস্ট্যাম্প জাম্পের সমাধান করুন।
- Mp4Extractor: MP4-এ Opus-এর জন্য
- ইন্সপেক্টর:
MetadataRetrieverব্যবহার করে MP4 ফাইল থেকে XMP মেটাডেটা ফিরিয়ে আনার সুবিধা।MediaExtractorCompat-এmebxবক্স করা টাইমড মেটাডেটা ট্র্যাকMimeTypes.APPLICATION_MEBXহিসেবে এক্সট্র্যাক্ট করার সুবিধা।
- ইন্সপেক্টর ফ্রেম:
FrameExtractor-এর মাধ্যমে আল্ট্রা HDR ফ্রেম এক্সট্র্যাক্ট করার সময় SDR বেস ইমেজে ওয়াইড-গ্যামাট BT.2020 রঙের ক্লিপিং সংক্রান্ত সমস্যার সমাধান করুন। আউট-অফ-গ্যামুট রঙ এখন ক্ল্যাম্প করার পরিবর্তে sRGB গ্যামুটে সফটলি কম্প্রেস করা হয়।
- অডিও:
- ভুল থ্রেডে
android.media.AudioDeviceCallbackইনভোক করে এমন ডিভাইসের জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন (#3386)। - কম্প্রেসড অফলোড সহ ট্র্যাক ট্রানজিশনের পরে সম্ভাব্য আটকে থাকা প্লেব্যাক ঠিক করুন।
- Amazon Fire TV স্টিকের একটি সমস্যার সমাধান করা হয়েছে যেখানে পিরিয়ড ট্রানজিশনের সময় AC-3 অডিও ফ্রিজ হয়ে যেতে পারে (#3448)।
- Ogg এবং WebM/Matroska-এর জন্য এন্ড-অফ-স্ট্রিম এনকোডার প্যাডিং ট্রিম করার সুবিধা Opus গ্যাপলেস প্লেব্যাক (#২৫৭৬)।
- ট্র্যাক ট্রানজিশনের সময় ডায়নামিক অফলোড গ্যাপলেস ডিলে ও প্যাডিং আপডেট সংক্রান্ত সমস্যার সমাধান করুন যাতে সেগুলি বর্তমানে চলা ট্র্যাকের পরিবর্তে আসন্ন ট্র্যাকে প্রয়োগ করা যায়।
- সিঙ্গেল স্ট্রিম এবং প্লেলিস্টের ফাইনাল স্ট্রিমে এনকোডার এন্ড-প্যাডিং ট্রিম করুন, এর সাথে প্লেলিস্টের মাঝে গ্যাপলেস ট্রানজিশনও ট্রিম করুন (#২৫৭৬)।
TrimmingAudioProcessor-এ অপ্রয়োজনীয় অডিও বাফার কপি এড়িয়ে চলুন, স্টার্ট-অফ-স্ট্রিম এনকোডার ডিলে ট্রিমিং সম্পূর্ণ হওয়ার পরে এবং এন্ড-অফ-স্ট্রিম প্যাডিং ট্রিমিং করার প্রয়োজন না থাকলে।
- ভুল থ্রেডে
- ভিডিও:
- একই রিলিজ টাইমস্ট্যাম্প সহ দেরিতে আসা ভিডিও ফ্রেমের রিপোর্টিং ঠিক করুন যাতে সেগুলি এড়িয়ে যাওয়ার পরিবর্তে ড্রপ করা হিসাবে রিপোর্ট করা হয়।
- টেক্সট:
- মিডিয়ার সাথে সম্পর্কিত সাইডলোড করা সাবটাইটেলের টাইমস্ট্যাম্প
শিফ্ট করতে
MediaItem.SubtitleConfiguration.timeOffsetUsযোগ করুন। প্লেব্যাক চলাকালীনPlayer.replaceMediaItem(int, MediaItem)-এর মাধ্যমে অফসেট পরিবর্তন করা যেতে পারে, এতে প্লেব্যাক বিঘ্নিত হয় না (#১৯৭৬)। - SubRip: বাইট অর্ডার মার্ক ছাড়া
স্ট্যান্ডঅ্যালোন SubRip সাবটাইটেলের অক্ষর এনকোডিং শনাক্ত করতে
DefaultSubtitleParserFactory-এCharsetDetectorইনজেক্ট করার জন্য সহায়তা যোগ করুন (#২২৪৭)।
- মিডিয়ার সাথে সম্পর্কিত সাইডলোড করা সাবটাইটেলের টাইমস্ট্যাম্প
শিফ্ট করতে
- প্রভাব:
- StudioSound GMSCore মডিউল ব্যবহার করে অডিও সোর্স আলাদা করার জন্য
SoundSeparationAudioProcessorপ্রয়োগ করুন।
- StudioSound GMSCore মডিউল ব্যবহার করে অডিও সোর্স আলাদা করার জন্য
- Muxers:
Mp4MuxerএবংFragmentedMp4Muxer-এ Opus-এর জন্যdOpsবক্স রাইটিং ঠিক করুন যেখানেPreSkip,InputSampleRateএবংOutputGainবিগ-এন্ডিয়ানের পরিবর্তে লিটল-এন্ডিয়ানে লেখা হয়েছিল (#3431)।Mp4Muxerব্যবহার করেMp4LocationData-এ জিপিএস অল্টিটিউড লেখার সুবিধা।- সরাসরি
ParcelFileDescriptor-এ মাক্সিং করার অনুমতি দিতেMuxer.Factory.create(ParcelFileDescriptor)যোগ করুন। - মিডিয়া ডিকোড টাইমস্ট্যাম্প প্রদান করতে ফ্র্যাগমেন্টেড MP4 ফাইলের
trafবক্সে ডিফল্ট হিসেবেtfdt(ট্র্যাক ফ্র্যাগমেন্ট বেস মিডিয়া ডিকোড টাইম) বক্স লিখুন। Mp4Muxer-এ E-AC-3 এবং E-AC-3 JOC (Dolby Atmos)dec3কন্টেনার বক্স লেখার সুবিধা।MediaMuxerCompat-এ WebM ফর্ম্যাট সাপোর্ট যোগ করুন।FLAG_READ_MFRA_FOR_SEEK_MAPব্যবহার করেFragmentedMp4Extractor-এ খোঁজার অনুমতি দিতে ফ্র্যাগমেন্টেড MP4 ফাইলের শেষেmfra(মুভি ফ্র্যাগমেন্ট র্যান্ডম অ্যাক্সেস) বক্স লিখুন।- অন্য কোনও স্যাম্পেল লেখার আগে EOS স্যাম্পেল লেখার সময়
Mp4WriterওFragmentedMp4Writer-এ ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন। - Dolby কন্টেন্ট MP4 বা ফ্র্যাগমেন্টেড MP4 ফাইলে মাক্স করার সময় কন্টেনার হেডার (#৩৩৩৯)-এ
dby1মানানসই ব্র্যান্ডের বিজ্ঞাপন দিয়ে কন্টেনার সংক্রান্ত নীতি মেনে চলার বিষয়টি ঠিক করুন। Mp4MuxerএবংFragmentedMp4Muxer-এ ৩২-বিট ফ্লোট PCM অডিও ট্র্যাকের জন্য সহায়তা (#3389)।- ট্র্যাক যোগ করার সময়
Mp4MuxerএবংFragmentedMp4Muxer-এ কাজ করে না এমন Dolby Vision প্রোফাইল বাতিল করুন। Mp4MuxerএবংFragmentedMp4Muxer-এ ২৪-বিট ও ৩২-বিট ইন্টিজার পিসিএম অডিও ট্র্যাক কাজ করে।
- IMA এক্সটেনশন:
ImaServerSideAdInsertionMediaSource-এ IMA SDK-তে প্লেয়ার পজ ও আবার চালু করার ইভেন্ট ফরওয়ার্ড করুন।
- সেশন:
- পুরনো মেটাডেটা ও বিবরণ থেকে প্লেলিস্ট ও আইটেম মেটাডেটা
পপুলেট করতে
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIএবংMediaConstants.EXTRAS_KEY_CATEGORIESযোগ করুন এবংMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEওMediaConstants.EXTRAS_KEY_TTL_SECONDSসাজেশনLibraryParams.extras-এর জন্য। PendingIntent-এর কঠোর সীমা প্রয়োগ করে এমন ডিভাইসেMediaSessionতৈরি বা রিলিজ করার সময়SecurityExceptionক্র্যাশ হওয়ার সমস্যার সমাধান করা।- Android 12 (API 31 ও 32)-এ প্লে করার অনুরোধের সময়
MediaSession.getControllerForCurrentRequest()-এরnull-এ ফিরে আসার সমস্যা সমাধান করুন, যখনMediaSessionServiceএখনও ফোরগ্রাউন্ডে ছিল না। MediaControllerযখন একটি লিগ্যাসি সেশনে কানেক্ট করে তখনIllegalArgumentExceptionক্র্যাশ হওয়ার সমস্যা সমাধান করুন যা একটি নেতিবাচক সর্বোচ্চ ভলিউম রিপোর্ট করে।- পজ করা পুরনো
MediaSessionCompat-এplay()-এর পরেMediaController.setMediaItemবাsetMediaItemsকল করার সময়onPlayFrom*-এর পরিবর্তে কাজ করে না এমনonPrepareFrom*কলব্যাক ডিসপ্যাচ করা বা অনুরোধ করা মিডিয়া আইটেম আবার শুরু না করেইonPlay()ডিসপ্যাচ করার সমস্যার সমাধান করা হয়েছে। - কাস্টম কমান্ডের উত্তর পাওয়ার সময়
পুরনো
MediaBrowser-এNullPointerExceptionসংক্রান্ত সমস্যার সমাধান করা (#৩৪৩২)। IllegalArgumentExceptionক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন, যখন এর অন্তর্নিহিতBundle-এ ডুপ্লিকেট 'কী' সহ পুরনো মেটাডেটা পাওয়া যায়।- Coalesce outgoing
MediaControllerCompat.TransportControlscalls made within the sameLooperiteration when controlling a legacyMediaSessionCompat(for example, callingsetMediaItem,prepare, andplaytogether now dispatches a singleonPlayFrom*callback).
- পুরনো মেটাডেটা ও বিবরণ থেকে প্লেলিস্ট ও আইটেম মেটাডেটা
পপুলেট করতে
- UI:
- ডান থেকে বাঁদিকে লেখা সাবটাইটেলে বিরামচিহ্নের অবস্থান এবং স্প্যান রেঞ্জ সংরক্ষণ সংক্রান্ত সমস্যার সমাধান করা যখন দ্বিমুখী টেক্সট র্যাপিং চালু থাকে (#3454, #3455).
media3-ui-composeমডিউলেTrackSelectionStateওTrackSelectionParametersStateক্লাস এবং তাদের সংশ্লিষ্ট কম্পোজেবল স্টেট রিমেম্বার ফাংশন যোগ করুন।PresentationState.videoAspectRatioচালু করুন এবংModifier.resizeWithContentScale-কেsourceSizeDp: Size?-এর পরিবর্তেaspectRatio: Float?নিতে বলুন।- প্লেয়ারের বর্তমান কিউ শোনার জন্য
media3-ui-composeমডিউলেCuesStateক্লাস এবংrememberCuesStateকম্পোজেবল যোগ করুন। ProgressSlider-এ স্ক্রাবিং মোড সাপোর্ট যোগ করুন যদি এটিExoPlayerবাCompositionPlayer-এর উপর ভিত্তি করে তৈরি হয়।PresentationState-এshowArtworkসহায়তা যোগ করুন এবংContentFrameওPlayer-এ প্রদত্ত ঐচ্ছিকartworkকম্পোজেবল রেন্ডার করার সময় এটি ব্যবহার করুন।artworkস্লটের জন্য ডিফল্ট ভ্যালু হিসেবে ব্যবহার করার জন্যArtworkকম্পোজেবল যোগ করুন।PlayPauseButtonState-এ নতুন ফিল্ড যোগ করুন (showBuffering,showRetry,showReplay) এবং আরও আইকন ও বাফারিং ইন্ডিকেটর রেন্ডার করতেPlayPauseButton-এ সেগুলি ব্যবহার করুন।- কাস্টম প্লেব্যাক স্টেট অবজারভেশন করার অনুমতি দিতে
PlaybackStateক্লাস যোগ করুন, এবং বোতাম-ইন্ডিপেন্ডেন্ট কম্পোনেন্ট হিসেবেBufferingIndicator-কে ইন্ট্রোডিউস করুন। - মাল্টি-পিরিয়ড লাইভস্ট্রিমে লাইভ পোস্ট-রোল প্লেসহোল্ডারের জন্য পিরিয়ড বাউন্ডারিতে
PlayerViewএবংPlayerControlViewবিজ্ঞাপন মার্কার দেখানোর সমস্যা সমাধান করুন। Player,ContentFrame,PlayerDefaultsএবংMiniController-এর কম্পোজেবল স্লট আর প্যারামিটার হিসেবে প্লেয়ার বা কন্ট্রোল ভিজিবিলিটি পায় না। পরিবর্তে কলিং স্কোপ থেকে সেগুলি ক্যাপচার করুন (যেমন,topControlsএখন@Composable BoxScope.() -> Unit)। এটি একটি অস্থির API-তে ব্রেকিং পরিবর্তন।alignmentপ্যারামিটারContentFrame,PlayerএবংModifier.resizeWithContentScale-এ যোগ করুন যাতে স্কেল করা কন্টেন্টকে এর কন্টেনারের মধ্যে পজিশন করা যায় এবংContentFrame-এর কন্টেন্টকে এর সীমার মধ্যে ক্লিপ করুন, যাতেContentScale.Crop-এর সাথে স্কেল করা ভিডিও আর এর বাইরে না যায়।ProgressSlider,ProgressStateWithTickCountওProgressStateWithTickInterval-এ লাইভস্ট্রিম UI সাপোর্ট যোগ করুনisLiveওliveOffsetMsএক্সপোজ করার মাধ্যমে।LiveButtonকম্পোজেবলকেmedia3-ui-compose-material3(#২২১৩)-এ যোগ করুন।
- Ktor এক্সটেনশন:
- মিড-স্ট্রিম কানেকশন ব্যর্থ হলে
KtorDataSourceযাতেHttpDataSourceException-এর পরিবর্তে ইনপুট-শেষ-হয়ে-গেছে হিসেবে বিবেচনা করতে পারে সেই সমস্যার সমাধান করা হয়েছে (#3460)।
- মিড-স্ট্রিম কানেকশন ব্যর্থ হলে
- HLS এক্সটেনশন:
EXT-X-STREAM-INF-এVIDEO-RANGE(PQএবংHLG) পার্স করুন এবংEXT-X-I-FRAME-STREAM-INF-কেFormat.colorInfo-এ (#3441)।- MPEG-TS
EXT-X-MAPপার্স করার সময়NullPointerExceptionঠিক করুন PES মিডিয়া স্যাম্পেল সহ ইনিশিয়ালাইজেশন সেগমেন্ট (#৩৪৫৬)। - এক্সপোজড HLS ট্র্যাকের জন্য
Format.idএবংFormat.metadatanullহওয়ার রিগ্রেশন ঠিক করা হয়েছে (#3402)। - অ্যাসেট-লিস্ট বিজ্ঞাপন
X-PLAYOUT-LIMIT-এ ক্লিপ করুন এবং সম্পূর্ণভাবে সীমা পেরিয়ে যাওয়া বিজ্ঞাপনগুলি এড়িয়ে যান এবং ইন্টারস্টিশিয়ালX-RESUME-OFFSETবাদ দিলে এবংX-PLAYOUT-LIMITসেট করা থাকলেও এর সময়সীমা অজানা থাকলে কন্টেন্ট রিজুম অফসেট ডিফল্ট হিসেবে ০-তে সেট করুন। - একটি
X-ASSET-LISTইন্টারস্টিশিয়াল ওভাররাইট সমাধান করার সময় একই বিজ্ঞাপন গ্রুপের অন্যান্য ইন্টারস্টিশিয়ালের কন্টেন্ট রিজুম অফসেট কন্ট্রিবিউশন ওভাররাইট হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- DASH এক্সটেনশন:
DashManifestParser-এ বিকল্প MPD ইনসার্শন (urn:mpeg:dash:event:alternativeMPD:insert:2025) এবং রিপ্লেসমেন্ট (urn:mpeg:dash:event:alternativeMPD:replace:2025) ইভেন্ট পার্স করার সুবিধা এবংPeriod.alternativeMpdEvents-এAlternativeMpdEventইনস্ট্যান্স হিসেবে সেগুলি দেখানো। এটি অ্যাপের জন্য একটি ব্রেকিং পরিবর্তন যাDashManifestParser-এর সাবক্লাস:DashManifestParser.buildPeriodএখন একটি অতিরিক্তList<AlternativeMpdEvent>প্যারামিটার নেয় এবং আগের ওভারলোড সরিয়ে দেওয়া হয়েছে। অ্যাপ ওভাররাইড করাDashManifestParser.parseEventStream(XmlPullParser)-কে অবশ্যই ওভাররাইড করতে হবে পরিবর্তেDashManifestParser.parseEventStream(XmlPullParser, String), যেমন আগেরটি বন্ধ করা হয়েছে এবং ভবিষ্যতে রিলিজে ব্যক্তিগত করা হবে।EssentialPropertyএবংSupplementalPropertyডেসক্রিপটর থেকে CICP রঙের তথ্য (ColourPrimaries,TransferCharacteristics,MatrixCoefficientsএবংVideoFullRangeFlag)Format.colorInfo-এ পার্স করুন (#৩৪২৬)।- ট্রিক মোডে
@idভ্যালুর হোয়াইটস্পেস-সেপারেটেড তালিকা সাপোর্ট করে (http://dashif.org/guidelines/trickmode) ডেসক্রিপ্টর@valueঅ্যাট্রিবিউট (#3315)। DashManifestParser-এ<ProducerReferenceTime>পার্স করার জন্য সহায়তা,AdaptationSet.producerReferenceTimes-এ এটি প্রকাশ করা এবং VOD স্ট্রিমের জন্যTimeline.Window.presentationStartTimeMsওTimeline.Window.windowStartTimeMsপপুলেট করতে এটি ব্যবহার করা।- DASH কন্টেন্ট স্টিয়ারিংয়ের জন্য সহায়তা যোগ করুন (#১৬৮৯)।
<UTCTiming>এলিমেন্টে অ্যাট্রিবিউট নেই এমন DASH ম্যানিফেস্ট পার্স করার সময়NullPointerExceptionসংক্রান্ত সমস্যার সমাধান করা (#3436)।
- RTSP এক্সটেনশন:
- RTSP ক্লায়েন্ট বন্ধ হওয়ার পরে নেটওয়ার্ক থেকে দেরিতে পাওয়া উত্তর প্রসেস করার সময়
IllegalStateExceptionক্র্যাশ হওয়ার সমস্যা সমাধান করুন। - দ্রুত স্ক্রাব করার ফলে TCP প্রোটোকল ফলব্যাক মেকানিক ভুলভাবে ট্রিগার হওয়ার সমস্যা সমাধান করা হয়েছে।
- ট্র্যাক আবার বেছে নেওয়া, সেশন টিয়ারডাউন বা URI রিডাইরেকশনের সময় RTSP ক্লায়েন্ট স্টেট রিসেট করার পরে
দেরিতে পাওয়া নেটওয়ার্ক রেসপন্স প্রসেস করার সময়
যে
IllegalStateExceptionক্র্যাশ হতে পারে তা ঠিক করুন। - প্লেব্যাক রিস্টার্ট করার আগে আবার সিক করার ফলে
IllegalStateExceptionক্র্যাশ হওয়ার সমস্যা সমাধান করা হয়েছে। - ভিডিওর কোনও অংশে যাওয়ার ফিচার ব্যবহার করার সময়, ভিডিওর আগের অংশে যাওয়ার ফিচার ব্যবহার করলে, অডিও ড্রপআউট এবং ভিডিও প্লেব্যাক ফ্রিজ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- H.264 এবং H.265 কীফ্রেম অ্যাক্সেস ইউনিট অ্যাগ্রিগেশন বা নন-IDR প্যাকেট দিয়ে শেষ হলে, সেগুলিকে কীফ্রেম হিসেবে ফ্ল্যাগ করা হচ্ছিল না। এর ফলে, বাফারিংয়ের সময় প্লেব্যাক আটকে যাচ্ছিল। এই সমস্যার সমাধান করা হয়েছে (#3434)।
- RTSP ক্লায়েন্ট বন্ধ হওয়ার পরে নেটওয়ার্ক থেকে দেরিতে পাওয়া উত্তর প্রসেস করার সময়
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- Opus এক্সটেনশন: ভুল Opus ডেটা ডিকোড করার সময় JNI ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা।
- Opus এক্সটেনশন: প্রি-স্কিপ এবং ডিসকার্ড প্যাডিং একই প্যাকেটে পড়লে ডিসকার্ড প্যাডিং উপেক্ষা করার সমস্যা সমাধান করা হয়েছে (#২৫৭৬)।
- কাস্ট এক্সটেনশন:
- সেশন উপলভ্য না থাকার কারণ দেখানোর জন্য
SessionAvailabilityListener.SessionUnavailableReasonপ্রবর্তন করুন এবংSessionAvailabilityListener.onCastSessionUnavailable-এর জন্য ওভারলোড করা পদ্ধতি প্রদান করুন যাতে এটি প্রকাশ করা যায়। - কাস্ট সেশন বন্ধ করার পরে লোকাল ডিভাইসে অপ্রত্যাশিতভাবে প্লেব্যাক আবার চালু হওয়ার সমস্যা সমাধান করা হয়েছে।
RemoteCastPlayer-এRemoteMediaClientঅপারেশন (যেমন, চালানো, পজ করা, স্পিড পরিবর্তন করা, রিপিট মোড, ভলিউম, মিউট করা বা ট্র্যাক বেছে নেওয়া) ব্যর্থ হলে একটি ত্রুটি লগ করুন (#3373)।RemoteCastPlayer-এArrayIndexOutOfBoundsExceptionঠিক করুন যখন কাস্ট রিসিভার কিউ পরিবর্তন হয় বা ছোট হয় যখন একটি সিক অপারেশন বাকি থাকে (#3372)।- ডিফল্ট Cast রিসিভারের সাথে সম্পর্কিত একটি সমস্যার সমাধান করা হয়েছে যেখানে টাইমলাইন শুধুমাত্র অ্যাক্টিভ আইটেমের ঠিক আশেপাশের মিডিয়া আইটেমগুলি দেখায়, পুরো প্লেলিস্ট নয় (#3129)।
- প্লেলিস্ট (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) পরিবর্তন করার সময় বাRemoteCastPlayer-এ খোঁজার সময় টাইমলাইন ও প্লেব্যাক পজিশন অবিলম্বে আপডেট করুন এবং পরপর প্লেলিস্ট অপারেশন সারিবদ্ধ করুন যাতে সেগুলি নির্ভরযোগ্যভাবে ক্রমানুসারে কার্যকর হয় (#২৬৩৯, #৩২৭২)। RemoteCastPlayer-এ খালি সারিতেaddMediaItemsকল করার সময় Cast রিসিভারে মিডিয়া আইটেম লোড না হওয়ার সমস্যা সমাধান করা হয়েছে (#2402)।RemoteCastPlayer-এ একটি সমস্যার সমাধান করা হয়েছে যেখানে Cast রিসিভার কিউয়ের শেষে পৌঁছালে প্লেলিস্ট ধরে রাখার পরিবর্তে টাইমলাইন মুছে যায়।- মিডিয়া আইটেম লোড করার আগে
RemoteCastPlayer-এ সেট করা থাকলে,playWhenReady,repeatModeএবংplaybackParametersট্রান্সফার বা প্রয়োগ না হওয়ার সমস্যা সমাধান করা হয়েছে (যেমন,CastPlayer-এ লোকাল-টু-রিমোট প্লেব্যাক ট্রান্সফারের সময়) (#৮৮৯)।
- সেশন উপলভ্য না থাকার কারণ দেখানোর জন্য
- ডেমো অ্যাপ:
- সেশন ডেমো অ্যাপ ক্যাটালগে DRM-সুরক্ষিত মিডিয়া আইটেম ও অতিরিক্ত HLS স্যাম্পেল স্ট্রিমের জন্য সহায়তা যোগ করুন।
- কাস্ট করার সময় সাবটাইটেল ও অডিও ট্র্যাক বেছে নেওয়ার সুবিধা চালু করতে, সেশন ডেমো অ্যাপে
CastTrackSelector-এর সাথেRemoteCastPlayerকনফিগার করুন।
- বাতিল করা চিহ্ন সরান:
DashUtil.buildDataSpec(Representation, RangedUri, int)এবংDashUtil.buildDataSpec(Representation, String, RangedUri, int)সরিয়ে দিন। পরিবর্তেDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>)ব্যবহার করুন।
- বিল্ড:
- Gradle
minSdkবাড়িয়ে ২৪ করুন।
- Gradle
ভার্সন 1.11.0
১.১১.১
সেপ্টেম্বর 10, 2026
- ExoPlayer:
- প্রোগ্রেসিভ মিডিয়ার জন্য HAGC মেটাডেটা চালু/বন্ধ করতে ফ্ল্যাগটি
MediaSource.FactoryথেকেExtractorsFactory-এ সরান। আগেরsetExperimentalEnableHagcPlaybackপদ্ধতি সরিয়ে দিয়ে তার জায়গায়ExtractorsFactory.setParseHagcMetadataপদ্ধতি ব্যবহার করা হচ্ছে। এছাড়াও, এটি এমন একটি সমস্যার সমাধান করে যেখানে Matroska/WebM কন্টেনারের জন্য বন্ধ করার সুবিধা কাজ করেনি। - ট্রানজিশন না করা সেকেন্ডারি রেন্ডারার প্রি-ওয়ার্ম করার সময় প্লেব্যাক স্টল হওয়ার সমস্যা সমাধান করে।
- প্রি-ওয়ার্মিং সংক্রান্ত সমস্যার সমাধান করুন যেখানে সিক রিসেট এবং দুটি রেন্ডারার বন্ধ করার সময়
Surface-কে প্রাথমিক রেন্ডারারে ফেরত দিতে হবে। ArrayIndexOutOfBoundsException-এর সমস্যা সমাধান করা হয়েছে, যখন লাইভ টাইমলাইন রিফ্রেশ ডিফল্ট পজিশনকে সার্ভার-সাইডে যোগ করা বিজ্ঞাপনের পরে সরিয়ে দেয়, যা বর্তমানে চালানো হচ্ছে (#3348)।- স্ক্রাবিং মোড সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে
ScrubbingModeParameters.allowSkippingMediaCodecFlushচালু থাকা অবস্থায় খোঁজার সময় পুরনো ভিডিও ফ্রেম অল্প সময়ের জন্য দেখানো হতে পারে।
- প্রোগ্রেসিভ মিডিয়ার জন্য HAGC মেটাডেটা চালু/বন্ধ করতে ফ্ল্যাগটি
- এক্সট্র্যাক্টর:
- Matroska: ক্লাস্টারের পরে ট্র্যাক প্লেস করা হলে, খোঁজা যায় এমন টাইমলাইন তৈরি না হওয়ার সমস্যার সমাধান করা হয়েছে (#3377)।
- অডিও:
SilenceSkippingAudioProcessor-এ বাফার সাইজ ক্যালকুলেশন ঠিক করুন যাতে ফ্রেম সাইজ (#3271) দ্বারা ন্যূনতম সাইলেন্স ডিউরেশন ভুলভাবে কমানো না হয়।PcmAudioUtil-এ ৮-বিট PCM হ্যান্ডলিং ঠিক করুন যাতে স্যাম্পেলকে Android-এর সংজ্ঞা অনুযায়ী আনসাইনড হিসেবে বিবেচনা করা যায় (#৩২৭১)।- অফলোড সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে সীমিত হার্ডওয়্যার বাফার সাইজের কারণে প্রি-রোল বা গ্যাপলেস ট্রানজিশনের সময় প্লেব্যাক বন্ধ হয়ে যেতে পারে।
DefaultAudioSink-এ বাগ ঠিক করুন যেখানে প্লেব্যাক থ্রেড আর লাইভ না থাকলে রিলিজ কাউন্ট কমে না (#3338)।
- সেশন:
- প্রসেস চলাকালীন
MediaController,Player.Listenerকলব্যাক থেকে রিলিজ করা হলেNullPointerExceptionফিক্স করুন (#3375). - কোনও লিগ্যাসি
MediaBrowser,onGetLibraryRoot()বাonConnectAsync()থেকে অ্যাসিঙ্ক্রোনাস ফলাফল রিটার্ন করা কোনও পরিষেবার সাথে কানেক্ট করলে, প্রধান থ্রেডে ডেডলক সংক্রান্ত সমস্যার সমাধান করুন (#3393)।
- প্রসেস চলাকালীন
- HLS এক্সটেনশন:
- DASH এক্সটেনশন:
presentationTimeOffset(#3334)-এর সাথে ইমেজ ট্র্যাকের জন্য ভুল স্যাম্পেল টাইমস্ট্যাম্প গণনা সংক্রান্ত সমস্যার সমাধান করুন।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- Opus: একাধিক
OpusDecoderইনস্ট্যান্স একসাথে শুরু করার সময় মেমরি করাপশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে। - MPEG-H: মেমরি লিক, নন-ASCII অক্ষর ট্রাঙ্কেট করা এবং
MpeghUiManager-এ কমান্ড পাঠানোর সময় কম-মেমরি পরিস্থিতিতে সম্ভাব্য নেটিভ ক্র্যাশ (#3365) সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
- Opus: একাধিক
ভার্সন 1.11.0
আগস্ট ০৫, ২০২৬
- কমন লাইব্রেরি:
- অডিও চ্যানেল মাস্ক স্পষ্টভাবে দেখানোর জন্য
Format.channelMaskযোগ করুন এবং নিরাপদে সমাধান করার জন্য নতুনUtil.getAudioTrackChannelConfig(Format)ওভারলোড যোগ করুন। - Kotlin 2.0.20 থেকে 2.2.0-এ আপগ্রেড করুন।
- অডিও চ্যানেল মাস্ক স্পষ্টভাবে দেখানোর জন্য
- ExoPlayer:
- ExoPlayer-এ
IllegalStateExceptionবাIndexOutOfBoundsException-এর কারণ হতে পারে এমন সময়-নির্ভর কনকারেন্সি বাগ ঠিক করুন। AdsMediaSource-এ বিজ্ঞাপন গ্রুপের সংখ্যা চেক করার প্রসেস শিথিল করুন যাতে কোনও বিজ্ঞাপন গ্রুপ সম্পূর্ণভাবে প্রসেস করা হলে (hasUnplayedAds()হলfalse) বিজ্ঞাপন গ্রুপের সংখ্যা কমানো যায়, রিসেট ওয়ার্কফ্লো চলাকালীন ডায়নামিক বিজ্ঞাপন গ্রুপের সাইজ পরিবর্তন করা যায়।SampleStream-এgetFlags()এবংFLAG_STRICT_DURATIONযোগ করুন যাতে স্ট্রিম ফ্ল্যাগ রিপোর্ট করতে পারে এবং এই ফ্ল্যাগগুলি ডায়নামিকভাবে চেক করার জন্য রেন্ডারার আপডেট করুন।- স্ট্রিম ফর্ম্যাট সঠিক ভ্যালু প্রদান না করলে, কোডেক অপারেটিং রেট গণনা করতে
MediaCodecVideoRenderer-এ ফ্রেম রেট এস্টিমেটর এবংMediaCodecAudioRenderer-এ কোডেক আউটপুট ফর্ম্যাটে ফিরে যান এবং অপ্রয়োজনীয় কোডেক রিসেট এড়িয়ে চলুন। - কোর প্লেয়ারে ক্লায়েন্ট-সাইড ইনসার্ট করা বিজ্ঞাপনের জন্য কন্টেন্টের ক্লিপিং সরিয়ে দিন। পরিবর্তে,
AdsMediaSourceক্লিপিং লজিক ম্যানেজ করে। কন্টেন্ট ক্লিপিং ইন্টার্নালি প্রয়োগ করতে, কাস্টম ক্লায়েন্ট-সাইড ইনসার্ট করা বিজ্ঞাপনের সোর্স আপডেট করতে হবে। - সঠিকভাবে ফর্ম করা কিন্তু শনাক্ত করা যায়নি এমন কোডেক প্রোফাইল বা লেভেল সহ ট্র্যাককে
supported=YES-এর পরিবর্তেsupported=NO_EXCEEDS_CAPABILITIESহিসেবে চিহ্নিত করুন (যেভাবে অনুপস্থিত বা ভুলভাবে ফর্ম করা প্রোফাইল বা লেভেল তথ্য সহ ট্র্যাক চিহ্নিত করা হয়)। এর ফলে, আরও ভালভাবে কাজ করে এমন বিকল্প থাকলে, এইসব ট্র্যাক (যেগুলি ডিভাইসে কাজ করার সম্ভাবনা কম) বেছে নেওয়া হয় না। DefaultPreloadManager.SimpleRankingDataComparatorযোগ করুন, যা হল একটিRankingDataComparator, এটি বর্তমানে চলা মিডিয়া আইটেমের ইন্ডেক্স থেকে দূরত্বের ভিত্তিতে মিডিয়া আইটেমের র্যাঙ্ক তুলনা করে। আরও ফাইন-টিউন করা তুলনামূলক লজিকের প্রয়োজন হলে, অ্যাপ তারcompare(Integer, Integer)পদ্ধতি ওভাররাইড করতে পারে। কাস্টমSimpleRankingDataComparator,DefaultPreloadManager.Builder-এর নতুন কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা যেতে পারে।- উপলভ্য হিপ মেমরি কম থাকলে,
বাফার বাইট সাইজের সীমায় ফিরে গিয়ে
DefaultLoadControl.prioritizeTimeOverSizeThresholds-এর OOM ঝুঁকি কমান। MediaItem.imageDurationUsসেট করা না থাকলে স্থির ছবি ম্যানেজ করার পদ্ধতি অ্যালাইন করুন: JPEG এবং HEIC স্থির ছবি এখন খুব কম ডিফল্ট সময়সীমার সাথে 'প্লে' হয় (PNG এবং অন্যান্য ছবি আগে যেভাবে কাজ করত)।BandwidthMeterথেকেMediaSourceপর্যন্ত প্লাম্ব করতেMediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)যোগ করুন। কাস্টম ইমপ্লিমেন্টেশন সহ বন্ধ হয়ে যাওয়া পদ্ধতিটি এখনও সাধারণত কল করা হবে, তবে নতুন পদ্ধতিটি ইমপ্লিমেন্ট করা এবং পুরনো পদ্ধতির সাথে সমতা পেতেBandwidthMeter.getTransferListener()ব্যবহার করার পরামর্শ দেওয়া হয়।DefaultBandwidthMeter-এ, কাস্টমInitialBitrateSupplier-এর জন্য সহায়তা যোগ করুন। এটি অ্যাপকে প্রাথমিক বিটরেট অনুমান নির্ধারণের জন্য নিজস্ব লজিক প্রদান করার অনুমতি দেয়, যাDefaultBandwidthMeterতৈরি করার সময় এবং নেটওয়ার্কের ধরন পরিবর্তনের সময় ব্যবহার করা হবে।DefaultBandwidthMeter.Builder.setInitialBitrateSupplier()-এর মাধ্যমে সাপ্লায়ার সেট করা যেতে পারে।- ডিফল্ট হিসেবে ডায়নামিক শিডিউলিং চালু করুন।
ExoPlayerপ্লেব্যাক ওয়ার্ক লুপ স্ট্যাটিক ইন্টারভ্যালের পরিবর্তে ডায়নামিক হিসেবে চলবে। - অ্যাক্টিভ প্লেব্যাকে প্রি-রোল স্যাম্পেল সহ ট্র্যাক যোগ করার সময় অপ্রয়োজনীয় রিসেট হওয়ার সম্ভাবনা থাকে, এটি সরিয়ে দিন।
DefaultBandwidthMeter-এ,getInitialBitrateCountryGroupAssignmentঅপ্টিমাইজ করুন যাতে অ্যারের পরিবর্তে ৩২-বিট ইন্টিজারে প্যাক করা কান্ট্রি গ্রুপ অ্যাসাইনমেন্ট রিটার্ন করা যায়, কোডের সাইজ কমানো যায় এবং অ্যালোকেশন এড়ানো যায়।- কিছু ডিভাইসে
AudioTrackইনিশিয়ালাইজেশন সংক্রান্ত সমস্যার সমাধান করুন। এর জন্য, অন্যান্য রিট্রাই (বাফার সাইজ অর্ধেক করে) সফল না হলে, রিট্রাই লজিক যাতে সবসময় কমপক্ষে ১ সেকেন্ডের বাফার সাইজ ব্যবহার করে তা নিশ্চিত করুন (#3207)। - কিছু ডিভাইসে কোডেক সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ইনপুট বাফার পাওয়ার আগে কোডেক আগে ফ্লাশ করা হলে, কোডেক সব স্যাম্পেল গ্রাস করছিল।
- প্রতি-স্ট্রিম ভিত্তিতে উন্নত মিডিয়া প্রসেসিংয়ের অনুমতি দিতে
এক্সপেরিমেন্টাল
ExoPlayer.Builder.enablePerStreamMediaProgression()যোগ করুন। এটি প্লেলিস্ট আইটেমের মধ্যে স্টার্টআপ লেটেন্সি কমায় এবং খুব ছোট কন্টেন্টের ক্ষেত্রে প্লেব্যাক "আটকে" যাওয়া এড়ায় (#3122)। - অডিও সেশন আইডি ব্যবহার সম্পর্কিত রেস কন্ডিশন ঠিক করুন যেখানে
setAudioSessionId-এর সেট করা ভ্যালুর পরিবর্তেExoPlayer-এর অটোমেটিক জেনারেট করা প্রাথমিক অডিও সেশন আইডি ব্যবহার করা হবে (#3241)। - প্রোগ্রেসিভ মিডিয়ার (যেমন, MP4, Matroska) জন্য পরীক্ষামূলক HAGC (ST 2094-50) টাইমড মেটাডেটা প্লেব্যাক সাপোর্ট যোগ করুন। প্লেয়ার অটোমেটিক
HAGC মেটাডেটা ট্র্যাককে সংশ্লিষ্ট ভিডিও ট্র্যাকের সাথে মার্জ করে এবং API 37+ ডিভাইসে
ডিকোডারে আউট-অফ-ব্যান্ড মেটাডেটা ডেলিভার করে। এই আচরণ
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)-এর মাধ্যমে বন্ধ করা যেতে পারে। - ট্র্যাক বেছে নেওয়ার ক্ষেত্রে
Format-এর আপেক্ষিক পছন্দ বোঝাতেFormat.selectionPriorityযোগ করুন (#3236)। - স্ক্রাবিং মোডের সম্ভাব্য সমস্যা সমাধান করা হয়েছে, যেখানে 'স্ট্রিমের শেষ' পর্যন্ত খোঁজার সময় স্ক্রাবিং বন্ধ হয়ে যেতে পারে।
- ExoPlayer-এ
- CompositionPlayer:
TrackSelectorটি ইনস্ট্যান্স রিলিজ না হওয়ার সমস্যা সমাধান করা হয়েছে।
- ট্রান্সফর্মার:
ExportResult.fileSizeBytes-এর ক্ষেত্রে অতিরিক্ত রিপোর্ট করা হতে পারে এমন সমস্যার সমাধান করা।
- ট্র্যাক বেছে নেওয়া:
- বিটরেট-ভিত্তিক ক্রমের বাইরে কাস্টম ফর্ম্যাট ক্রম এবং ABR বেছে নেওয়ার অগ্রাধিকারের অনুমতি দিতে
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORএক্সপোজ করুন এবংAdaptiveTrackSelection.Factory.setTrackFormatComparatorযোগ করুন। - সময়ের উপর নির্ভর করে এমন কনকারেন্সি সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে ট্র্যাক সিলেকশন প্যারামিটারে দ্রুত সিকোয়েন্সিয়াল আপডেট করার ফলে কিছু আপডেট হারিয়ে যেতে বা ওভাররাইট হতে পারে।
- বিটরেট-ভিত্তিক ক্রমের বাইরে কাস্টম ফর্ম্যাট ক্রম এবং ABR বেছে নেওয়ার অগ্রাধিকারের অনুমতি দিতে
- এক্সট্র্যাক্টর:
- MP4, MP3, এবং FLAC: রানটাইম মেমরি খরচ কমাতে কন্টেইনার পার্সিংয়ের সময়
সংযুক্ত ছবি এবং কভার আর্ট মেটাডেটা বাতিল করার অনুমতি দিতে
FLAG_DISABLE_ARTWORK_METADATAযোগ করুন (#২০৭৭)। এছাড়াও, এটিDefaultExtractorsFactory.setDisableArtworkMetadata-এর মাধ্যমে সেন্ট্রালি চালু করা যেতে পারে। - MP4: ITU-T T.35 (
it35) টাইমড মেটাডেটা ট্র্যাক এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন। - MP4: চ্যাপ্টার মেটাডেটা (Nero এবং QuickTime ফর্ম্যাট) এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন। দুটিই থাকলে QuickTime চ্যাপ্টারকে অগ্রাধিকার দেওয়া হয়। এক্সট্র্যাক্ট করা চ্যাপ্টারের তথ্য ট্র্যাকের
Metadata-এর মধ্যেChapterএন্ট্রি হিসেবে দেখানো হয়, যা MP4, M4A এবং M4B ফাইলে (যেমন অডিওবুক এবং পডকাস্ট) নেটিভ চ্যাপ্টার নেভিগেশনের অনুমতি দেয় (#২৮০৩)। - WAV, Matroska এবং MP4: ৬৪-বিট ফ্লোটিং পয়েন্ট PCM অডিওর জন্য সহায়তা যোগ করা হয়েছে (#৩০৯০)।
- Matroska: সঠিক
ColorInfoপপুলেট করতে কোডেক বিটস্ট্রিম মেটাডেটা ব্যবহার করুন। - MP4:
sidxবক্স না থাকলেmfraবক্স ব্যবহার করে ফ্র্যাগমেন্টেড MP4 ফাইলে খোঁজার জন্য সহায়তা যোগ করুন। এটি চালু করতে,FragmentedMp4Extractor-কেFLAG_READ_MFRA_FOR_SEEK_MAPপ্রদান করুন, যা এখনDefaultExtractorsFactory-এ ডিফল্ট হিসেবে করা হয় (#3088)। - কাজ করে না এমন ভার্সন সহ
av1Cডেটা উপেক্ষা করুন। - MP4:
fpcmবক্সে বিগ-এন্ডিয়ান ফ্লোটিং পয়েন্ট পিসিএম-এর জন্য সহায়তা যোগ করুন। - Matroska: ট্র্যাকের
Metadata-এChapterএন্ট্রিতে চ্যাপ্টারের তথ্য পার্স করুন। - MPEG-TS: Core এবং Extension সাবস্ট্রিমকে একটি স্যাম্পেলে একত্রিত করে DTS-HD এবং DTS Express স্ট্রিমের এক্সট্র্যাকশন উন্নত করা হয়েছে। এর ফলে প্লেব্যাক সংক্রান্ত সমস্যা সমাধান করা হয়েছে যেখানে আগে দুটি আলাদা স্যাম্পেল হিসেবে আউটপুট করা হতো (#3147)।
- MP4: খালি
ilstমেটাডেটা ট্যাগ আইটেম পার্স করার সময় ইনফিনিট লুপ ও আউট-অফ-বাউন্ড রিড আটকান (#3191)। - MPEG-TS: শেষ PES প্যাকেটের দৈর্ঘ্য জানা আছে এমন স্ট্রিমের ক্ষেত্রে শেষ ফ্রেম রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করুন (#3206)।
- MP3: Xing ও VBRI হেডার সহ ফাইলের জন্য বিটরেট রিপোর্টিং সংক্রান্ত সমস্যার সমাধান করুন।
- Matroska: শেষ ক্লাস্টারে সংজ্ঞায়িত ট্র্যাকগুলি পরিচালনা করুন (#3250).
- Matroska: ALAC-এর জন্য সহায়তা যোগ করুন (#3268).
- MP4: ফ্র্যাগমেন্টেড MP4 ফাইলে পরিবর্তনশীল দৈর্ঘ্যের
sgpdবক্সের অনুমতি দিন (#3243)। - AVI: অডিও ট্র্যাকে কীফ্রেম ফ্ল্যাগ ছাড়া ফাইল চালানোর ফলে অডিও লস এবং
OutOfMemoryErrorহওয়ার সমস্যা সমাধান করা হয়েছে। - MP3: Xing/Info হেডার থেকে গ্যাপলেস-অ্যাওয়ার ডিউরেশন ব্যবহার করুন (#3183)।
- MP3: ডিকোড করা PCM ট্রিমিংয়ের সাথে ম্যাচ করতে LAME/Xing এনকোডার ডিলে এবং প্যাডিং মেটাডেটা অ্যাডজাস্ট করুন (#3200)।
- MP4, MP3, এবং FLAC: রানটাইম মেমরি খরচ কমাতে কন্টেইনার পার্সিংয়ের সময়
সংযুক্ত ছবি এবং কভার আর্ট মেটাডেটা বাতিল করার অনুমতি দিতে
- অডিও:
- ExoPlayer-এর অডিও রেন্ডারারে ১০০ মিলিসেকেন্ডের অতিরিক্ত সময়কাল যোগ করুন যখন রেডি থেকে নট-রেডি স্ট্যাটাসে ট্রানজিশন করা হচ্ছে, যাতে ট্রানজিয়েন্ট আন্ডাররান ডিবাউন্স করা যায় এবং অ্যাক্টিভ প্লেআউটের সময় অপ্রত্যাশিত বাফারিং স্ট্যাটাস এড়ানো যায় (#৩২১০)।
DefaultAudioTrackBufferSizeProvider-এ ডিফল্ট PCM বাফার সাইজ লজিক পরিবর্তন করে একটি নির্দিষ্ট ৫০০ মিলি সেকেন্ড বাফার ব্যবহার করুন যাতে এটি ডিভাইসের উপর কম নির্ভরশীল হয়।- প্ল্যাটফর্ম ডিকোডার থেকে স্পেশিয়াল channelMask এক্সট্র্যাক্ট করতে
MediaCodecAudioRendererআপডেট করুন, যাতেDefaultAudioSinkচ্যানেল কাউন্ট থেকে অনুমান করার পরিবর্তে এই এক্সপ্লিসিট মাস্ক ব্যবহার করতে পারে। AudioSink.configure-এর প্যারামিটার ডেটা ক্লাসে কনভার্ট করুন।ForwardingAudioSink.configure-এর কাস্টম ওভাররাইড নতুন পদ্ধতি স্বাক্ষরে মাইগ্রেট করতে হবে।EditedMediaItem.Builder#setSpeed(SpeedParameters)-এর মাধ্যমে অডিও স্ট্রিম টাইম-স্ট্রেচ করার সময় পিচ বজায় রাখার জন্য সহায়তা যোগ করুন।- ৮-বিট PCM, ১৬-বিট বিগ-এন্ডিয়ান PCM এবং ৬৪-বিট ফ্লোটিং পয়েন্ট PCM-কে ৩২-বিট ফ্লোটিং পয়েন্ট PCM-এ কনভার্ট করার জন্য
ToFloatPcmAudioProcessorউন্নত করুন (#৩০৯০)। DecoderAudioRenderer.getChannelMapping-এর রিটার্ন ভ্যালু পরিবর্তন করেImmutableIntArrayকরুন।- কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- অডিও প্রসেসরকে প্লেলিস্টের প্রসঙ্গ প্রদান করতে
Timelineএবং পিরিয়ড UIDAudioSink.configureএবংAudioProcessor.StreamMetadata-এ ফরওয়ার্ড করুন (#418)। - সময়-ভিত্তিক অডিও প্রসেসিং
(#৪১৮)
অনুমতি দিতে সঠিক
AudioProcessor.StreamMetadata.positionOffsetUsসেট করুন। - বিগ এন্ডিয়ান ৩২-বিট এবং ৬৪-বিট ফ্লোটিং পয়েন্ট PCM-এর জন্য সহায়তা যোগ করুন।
- Google Pixel ডিভাইসে প্লেব্যাকের জন্য EAC3-JOC থেকে EAC3-তে ফলব্যাক পাথ সরিয়ে দিন, কারণ তাদের স্ট্যান্ডার্ড EAC3 ডিকোডার EAC3-JOC স্ট্রিম ডিকোড করতে পারে না (#3257)।
- ভিডিও:
- ভিডিওতে যোগ দেওয়ার লজিক ঠিক করুন যাতে যোগ দেওয়ার সময় ড্রপ করা বাফারকে ড্রপ করার পরিবর্তে স্কিপ করা হিসেবে গণনা করা যায়।
- প্লেসহোল্ডার সারফেস কাজ করে না এমন ডিভাইসে ফ্রেম ড্রপ এড়াতে নতুন সারফেস সেট করার সময় অবিলম্বে রেন্ডারিং সিদ্ধান্ত ঠিক করুন।
- ড্রপ বা স্কিপ করা ফ্রেমের জন্য
MediaCodecVideoRenderer-এ ফ্রেম রেট অনুমান আরও সঠিক করতে এটি ঠিক করুন। - ফ্রেম আগে শিডিউল করার জন্য ব্যবহৃত থ্রেশহোল্ডের কনফিগারেশনের অনুমতি দিন। ডিফল্ট
হিসেবে ৫০ মিলি সেকেন্ড সেট করা থাকে, তবে কেউ চাইলে
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()-এর মাধ্যমে ভ্যালু কাস্টমাইজ করতে পারেন। VideoFrameReleaseHelper-এ সেই সমস্যার সমাধান করুন যেখানে ডিসপ্লে পরিবর্তন করলে প্রধান থ্রেডে অপ্রয়োজনীয়Choreographerকলব্যাক এবং অতিরিক্ত CPU ওয়েকআপ ট্রিগার হতে পারে।
- টেক্সট:
- মেটাডেটা:
MediaMetadata.discSubtitleফিল্ড যোগ করুন এবং ID3v2.4TSSTএবং VorbisDISCSUBTITLEডেটা থেকে এটি পার্স করুন।- ID3
TPOSফ্রেম থেকে ডিস্ক নম্বর ও গণনা পার্স করুন।
- প্রভাব:
- ভিডিওর কোনও অংশে যাওয়ার সময় প্লেয়ার যাতে ফ্রিজ না হয়ে যায়, তার জন্য
FinalShaderProgramWrapper-এ রিড্র স্টেট ফ্ল্যাশ করার সময় তা মুছে দিন।
- ভিডিওর কোনও অংশে যাওয়ার সময় প্লেয়ার যাতে ফ্রিজ না হয়ে যায়, তার জন্য
- Muxers:
- নতুন
addTrackReferenceAPI-এর মাধ্যমেMp4Muxer-এ ট্র্যাক রেফারেন্সের (trefবক্স) জন্য সহায়তা যোগ করুন। এটি ট্র্যাকগুলির মধ্যে সম্পর্ক স্থাপন করতে দেয়, যেমন একটি মেটাডেটা ট্র্যাককে ভিডিও ট্র্যাকের সাথে লিঙ্ক করা যা এটি বর্ণনা করে। oggফাইল ফরম্যাটেOPUSবাVORBISমিডিয়া স্ট্রিম মাক্স করার অনুমতি দিতেOggMuxerযোগ করুন।- WAV ফাইল জেনারেশনের জন্য
WavMuxerযোগ করুন (ইনটিজার এবং ফ্লোটিং-পয়েন্ট PCM-এর সাথে কাজ করে)। - রিজার্ভ করা স্পেস ছাড়াই ছোট নন-স্ট্রিমেবল ফাইল লেখার অনুমতি দিতে
setAttemptStreamableOutputEnabled-এInAppMp4Muxer.Factoryযোগ করুন। Mp4MuxerএবংFragmentedMp4Muxer-এ IAMF অডিওর জন্য সহায়তা যোগ করুন।
- নতুন
- IMA এক্সটেনশন:
- পজ বিজ্ঞাপনের জন্য ব্যবহার করতে, বিজ্ঞাপন স্লট প্রদান করার অনুমতি দিতে
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotযোগ করুন। - একের পর এক স্কিপ করা যায় এমন VAST বিজ্ঞাপনের ক্ষেত্রে দ্বিতীয় বিজ্ঞাপনে অবিলম্বে স্কিপ বোতাম দেখানোর সমস্যা সমাধান করা হয়েছে (#3165)।
- পজ বিজ্ঞাপনের জন্য ব্যবহার করতে, বিজ্ঞাপন স্লট প্রদান করার অনুমতি দিতে
- সেশন:
- ব্যাকগ্রাউন্ড থ্রেড প্লেয়ার লুপার সহ সেশন ব্যবহার করার সময়
MediaNotificationManager-এর মধ্যে সম্ভাব্য ডেডলক ওIllegalStateExceptionক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন। MediaSessionপদ্ধতির জন্য আরও কঠোর থ্রেডিং সংক্রান্ত প্রয়োজনীয়তা প্রয়োগ করুন। Void মেথড এখন অটোমেটিক অ্যাপ্লিকেশন লুপার থ্রেডে এক্সিকিউশন পোস্ট করে এবং স্টেট অ্যাক্সেসর (গেটার) স্পষ্টভাবে একটিIllegalStateExceptionথ্রো করে যদি অ্যাপ্লিকেশন লুপার ছাড়া অন্য কোনও থ্রেড থেকে কল করা হয়।- সেশন সাইডে প্রতি কন্ট্রোলার অনুযায়ী স্ট্যাটাস কনসিস্টেন্সি ট্র্যাক করার মাধ্যমে
আউট-অফ-বাউন্ড টাইমলাইন মার্জ ক্র্যাশ (
MediaUtils.mergePlayerInfo-এIllegalStateException) সংক্রান্ত সমস্যার সমাধান করুন। - অ্যাক্টিভ মিডিয়া সেশন কোয়েরি করা এবং Media3
SessionTokenইনস্ট্যান্স ফিরিয়ে আনার জন্য সহায়তা প্রদান করতেandroidx.media3.session.MediaSessionManagerযোগ করুন। MediaSession.Callback.onConnect-এর ডিফল্ট অ্যাকশন পরিবর্তন করুন যদি পদ্ধতিটি ওভাররাইড না করা হয় যাতে শুধুমাত্র বিশ্বস্ত নয় এমন কন্ট্রোলারদের পড়ার অ্যাক্সেস প্রদান করা হয়।- নতুন API
MediaSession.Builder#setPackageNameOverride-এর মাধ্যমেMediaSessionতৈরি করার সময় প্যাকেজের নাম ওভাররাইড করার জন্য সহায়তা যোগ করুন। সেশনের প্যাকেজের নাম ওভাররাইড করতে কলারের কাছেandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERঅনুমতি থাকতে হবে। MediaSession.Callback.onConnectAsync()যোগ করুন। নতুন পদ্ধতিটি একটি কন্ট্রোলারের কানেকশন প্রচেষ্টাকে অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করার অনুমতি দেয়। অ্যাপFutures.immediateFuture(ConnectionResult)সহ অবিলম্বেFutureফিরিয়ে দিতে পারে যাতে আগের ব্যবহার অর্জন করা যায়। নতুন পদ্ধতিতে মাইগ্রেট করার সাজেশন দেওয়া হচ্ছে কারণCallback.onConnectবাতিল করা হতে পারে।- API 36 ও 37-এ ব্লুটুথ AVRCP ব্রাউজিং
MediaLibraryServiceশনাক্ত না করার সমস্যা সমাধান করা। MediaSession-এ আর্টওয়ার্কের ডবল-ডাউনস্কেলিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যখন ছবির সাইজ প্ল্যাটফর্মের সীমার কাছাকাছি থাকে, বিজ্ঞপ্তিতে অস্পষ্টতা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#3134)।- অ্যাপ ব্যাকগ্রাউন্ডে (#3270) থাকাকালীন, অ্যাসিঙ্ক্রোনাস আর্টওয়ার্ক বিটম্যাপ লোড কলব্যাক ফোরগ্রাউন্ড পরিষেবা চালু করার চেষ্টা করলে,
MediaNotificationManager-এForegroundServiceStartNotAllowedExceptionক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা হয়েছে। - এমন একটি সমস্যার সমাধান করা হয়েছে যেখানে
MediaController-এর মাধ্যমে পাওয়াPositionInfoঅবজেক্টের আসলTimelineUID পাওয়া যাচ্ছিল না। এখন সেশন নির্ভরযোগ্যভাবে এই UID-গুলি অনুবাদ করে এবং স্ট্যাটাস আপডেট করার সময় প্রোপাগেট করে। MediaSessionService.stopSelfSafely()-এForegroundServiceStartNotAllowedExceptionক্যাচ করে ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন (#3310)।- একই মিডিয়া আইটেমের মধ্যে খোঁজার সময়
MediaController-এ অপ্রত্যাশিতonMediaItemTransition()কলব্যাক সংক্রান্ত সমস্যার সমাধান করা (#3248)।
- ব্যাকগ্রাউন্ড থ্রেড প্লেয়ার লুপার সহ সেশন ব্যবহার করার সময়
- UI:
- মিড-প্লেব্যাক
ContentFrameরিকম্পোজ করা হলে ভুল সাইজে প্রথম ফ্রেম রেন্ডারিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#৩২৩৮)। CurrentMediaItemStateক্লাস এবং সংশ্লিষ্টrememberCurrentMediaItemStateকম্পোজেবলmedia3-ui-composeমডিউলে যোগ করুন। এই স্টেট হোল্ডারdemo-compose-এ ব্যবহার করা হয় যাতে বর্তমানে চলাMediaItem-এর বিভিন্ন মেটাডেটা তথ্য দেখানো যায়।media3-ui-composeমডিউলেPlaylistStateক্লাস এবং সংশ্লিষ্টrememberPlaylistStateComposable যোগ করুন। এই স্টেট হোল্ডারdemo-compose-এ ব্যবহার করা হয় যাতে প্লেয়ারে সেট করাMediaItemsসম্পর্কে বিভিন্ন মেটাডেটা তথ্য দেখানো যায়।PlaybackSpeedState-এ ফাস্টফরওয়ার্ডিং/স্লো মোশন API যোগ করুন। বেশিক্ষণ প্রেস করে ফাস্ট ফরওয়ার্ড করার সুবিধা দেখাতেdemo-compose-এ এই ফাংশনালিটি ব্যবহার করুন।media3-ui-compose-material3মডিউলেMiniControllerকম্পোজেবল যোগ করুন। এটিPlayerনিয়ন্ত্রণ করার জন্য একটি কম্প্যাক্ট অ্যাফর্ডেন্স প্রদান করে, একই সাথে বর্তমান মিডিয়া আইটেমের শীর্ষক, আর্টিস্ট, আর্টওয়ার্ক এবং প্রগ্রেস দেখায়।media3-ui-composeমডিউলেErrorStateক্লাস এবং সংশ্লিষ্টrememberErrorStateComposable যোগ করুন।media3-ui-compose-material3-এErrorTextকম্পোজেবল যোগ করুন এবংPlayer-এ এটিকে ডিফল্ট ওভারলে হিসেবে সেট করুন।TopControls,CenterControls,BottomControlsওErrorOverlay-এর জন্য কম্পোজেবল সহPlayerDefaultsঅবজেক্ট প্রকাশ করুন।Playerকম্পোজেবল ও এর কন্টেন্ট স্লটেFocusRequesterযোগ করুন।- স্লাইডিং উইন্ডো UI এনভায়রনমেন্টে
MediaItems-এর প্রিলোডিংয়ের সুবিধা দিতেPlayerPool(common-ktx) ওrememberPooledPlayer(ui-compose) প্রকাশ করুন। নতুনShortFormPlayerScreen-এর সাথেdemo-compose-এ এই কার্যকারিতা দেখানো। PlayerViewএবং ComposePresentationState-এ শাটার সাপ্রেশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার ফলে টাইমলাইনে ক্র্যাশ হচ্ছিল, কারণ এটি পিরিয়ড UID লুকআপ (#3264) কাজ করে না।
- মিড-প্লেব্যাক
- ডাউনলোড:
- ডাউনলোডের জন্য ফেচ করার সময় মিডিয়া প্লেলিস্টে HLS ভেরিয়েবল সংক্রান্ত সমস্যার সমাধান করা (#3258)।
- Ktor এক্সটেনশন:
- HLS এক্সটেনশন:
- HLS কন্টেন্ট স্টিয়ারিং ও পাথওয়ে ক্লোনিংয়ের জন্য সহায়তা যোগ করুন (#১৬৮৯)।
- অ্যাপকে সম্পূর্ণ প্রসেস করা অ্যাসেট তালিকার ইন্টারস্টিশিয়ালকে
অন-ডিমান্ড রি-রেজোলিউশনের জন্য আবার অনুপলভ্য অবস্থায় রিসেট করার অনুমতি দিতে,
HlsInterstitialsAdsLoader-এsetWithAssetListResetযোগ করুন। EXT-X-STREAM-INFএবংEXT-X-I-FRAME-STREAM-INF-এরSCOREঅ্যাট্রিবিউট পার্স করুন এবং এটিFormat.selectionPriority-এ পপুলেট করুন (#3236)।- প্লেলিস্ট আর প্রাথমিক বা অ্যাক্টিভ না থাকলেও শিডিউল করা HLS প্লেলিস্ট রিফ্রেশ হতে থাকে, এই সমস্যার সমাধান করা হয়েছে (#3254)।
- ইন্টারস্টিশিয়াল অ্যাসেট তালিকা (#3322) সমাধান করার সময় কন্টেন্ট রিজুম অফসেটের গণনা সংক্রান্ত সমস্যার সমাধান করা।
- প্লেলিস্ট অনুরোধ ব্যর্থ হওয়ার পরে কম লেটেন্সি লাইভ প্লেব্যাক আবার চালু করার সময় অপ্রত্যাশিত অডিও ট্র্যাক টাইমস্ট্যাম্পের ধারাবাহিকতা না থাকার সমস্যা সমাধান করা হয়েছে (#3311)।
HlsMediaPeriod.getStreamKeys()-এ বাগ ঠিক করুন যেখানে অডিও রেন্ডিশনে ID3 ট্র্যাককে সাবটাইটেল হিসেবে বিবেচনা করা হয় (#3333)।
- DASH এক্সটেনশন:
- ভাষার (#৩১১৩) উপর ভিত্তি করে CEA ক্লোজড ক্যাপশনকে আলাদা আলাদা
TrackGroup-এ ভাগ করুন। - ম্যানিফেস্ট (MPD) থেকে একাধিক
Locationএলিমেন্ট পার্স করার জন্য সহায়তা যোগ করুন এবং ম্যানিফেস্ট লোড না হলেDashMediaSource-এ লোকেশন ফলব্যাক পারফর্ম করুন। - খালি
<SegmentTimeline/>এলিমেন্ট সহ ম্যানিফেস্ট খোলার সময় ক্র্যাশ (IndexOutOfBoundsException) হওয়া সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#3326)।
- ভাষার (#৩১১৩) উপর ভিত্তি করে CEA ক্লোজড ক্যাপশনকে আলাদা আলাদা
- RTSP এক্সটেনশন:
- UDP পোর্ট বাইন্ডিং সংক্রান্ত সমস্যার কারণে RTSP প্লেব্যাক প্রস্তুত করার সময় ট্রানজিয়েন্ট প্লেব্যাক স্টল বা ব্যর্থতা সংক্রান্ত সমস্যার সমাধান করুন।
- কাস্ট এক্সটেনশন:
Cast.initialize(CastParams)কল করে Cast-এর কনফিগারেশনের অনুমতি দিতে নতুনCastParamsক্লাস যোগ করুন।- নতুন
CastParams.getShowSystemOutputSwitcherOnCastIconClick()বিকল্প যোগ করুন, যা উপলভ্য হলে অ্যাপ-মধ্যস্থ কাস্ট ডিভাইস পিকারের পরিবর্তে SystemUI আউটপুট সুইচার ব্যবহার করার জন্য ট্রিগার করে। - মিডিয়া রুট পিকারের দৃশ্যমানতা স্ট্যাটাস পর্যবেক্ষণ করার জন্য
MediaRouteButtonStateএবংrememberMediaRouteButtonStateযোগ করুন এবংMediaRouteButton-এstateপ্যারামিটার যোগ করুন (#3172)। - ট্র্যাক বেছে নেওয়ার পরে
RemoteCastPlayerযাতে স্থায়ীভাবে ট্র্যাক-মাস্কিং স্ট্যাটাসে আটকে না যায়, সেই সমস্যার সমাধান করা হয়েছে। এর ফলে Cast রিসিভার থেকে পরবর্তী ট্র্যাক আপডেট উপেক্ষা করা হয় (#3237)। DefaultMediaItemConverter-এ থাকা সমস্যা সমাধান করুন, যেখানে মিডিয়া3 নয় এমন প্রেরকের থেকে শুরু করা কাস্ট সেশনে যোগ দেওয়ার চেষ্টা করার সময়NullPointerExceptionদেখায়।- অ্যাক্টিভ প্লেয়ার পরিবর্তন করার সময়,
CastPlayerযাতে এমনMediaItemsট্রান্সফার করতে না পারে যা চালানো যাবে না, তা আটকান (#3199)। - কনফিগার না করা লাইভ স্ট্রিম (
liveConfiguration == UNSET)STREAM_TYPE_BUFFEREDহিসেবে সারিবদ্ধ করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#3318)।
- টেস্ট ইউটিলিটি:
- হেডার ও বডি সহ
POSTঅনুরোধের জন্য সহায়তা অন্তর্ভুক্ত করতেDataSourceContractTestবড় করুন,HttpDataSourceTestEnv-এ কিছুPOSTরিসোর্স যোগ করুন এবংWebServerDispatcher-এ প্রত্যাশিত HTTP পদ্ধতি, হেডার ও বডির জন্য অ্যাসার্শন যোগ করুন। DataSource.open()থেকে রিটার্ন করা দৈর্ঘ্যের জন্যDataSourceContractTest-এ অ্যাসার্শন আরও কঠোর করুন। যেসব রিসোর্সের ফলেC.LENGTH_UNSETহতে পারে, সেগুলিTestResource.Builder.setMayResolveToUnknownLength(boolean)ব্যবহার করে তা উল্লেখ করতে হবে।TestExoPlayerBuilder-এsetPlaybackLooperযোগ করুন।
- হেডার ও বডি সহ
- বাতিল করা চিহ্ন সরান:
androidx.media3.exoplayer.MetadataRetrieverসরান। পরিবর্তেandroidx.media3.inspector.MetadataRetrieverব্যবহার করুন।androidx.media3.exoplayer.MediaExtractorCompatসরান। পরিবর্তেandroidx.media3.inspector.MediaExtractorCompatব্যবহার করুন।Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAসরান। HEIC ফাইল থেকে মোশন ফটো মেটাডেটা এক্সট্র্যাক্ট করতেHeifExtractorব্যবহার করুন।androidx.media3.extractor.metadata.mp4.MotionPhotoMetadataসরান। পরিবর্তেandroidx.media3.extractor.metadata.MotionPhotoMetadataব্যবহার করুন।androidx.media3.extractor.DummyTrackOutputসরান। পরিবর্তেandroidx.media3.extractor.DiscardingTrackOutputব্যবহার করুন।androidx.media3.extractor.DummyExtractorOutputসরান। পরিবর্তেandroidx.media3.extractor.NoOpExtractorOutputব্যবহার করুন।androidx.media3.common.C.generateAudioSessionIdV21সরান। পরিবর্তেandroidx.media3.common.util.Util.generateAudioSessionIdব্যবহার করুন।
- বিল্ড
- Gradle কম্পোজিট বিল্ড (
includeBuild) ব্যবহার করার জন্য লোকালি Media3-এর উপর নির্ভর করার জন্যREADME.mdনির্দেশাবলী আপডেট করা হয়েছে।core_settings.gradleস্ক্রিপ্ট সরিয়ে দেওয়া হয়েছে এবংandroidxMediaModulePrefixওandroidxMediaEnableMidiModuleপ্রপার্টি আর ব্যবহার করা হয় না।
- Gradle কম্পোজিট বিল্ড (
1.11.0-rc01
1.11.0 স্টেবল ভার্সন ব্যবহার করুন।
1.11.0-beta01
৭ জুলাই, ২০২৬
1.11.0 স্টেবল ভার্সন ব্যবহার করুন।
1.11.0-alpha01
২৪ জুন, ২০২৬
1.11.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.10.0
১.১০.১
১২ মে, ২০২৬
- কমন লাইব্রেরি:
SimpleBasePlayerএবংForwardingSimpleBasePlayer-এonAudioSessionIdChanged-এর হ্যান্ডলিং ঠিক করুন।
- ExoPlayer:
- অডিও সেশন আইডি জেনারেট করার সাথে সম্পর্কিত রেস কন্ডিশন ঠিক করুন, যা
টানেলিং মোডের সাথে
IllegalStateException-এর কারণ হতে পারে। (#৩০৯৯)। - রেন্ডারার প্রিওয়ার্মিংয়ের মাধ্যমে ডিকোডার সংক্রান্ত সমস্যা থেকে রিকভার করার সময় সম্ভাব্য অ্যাপ ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা।
- AV1-ভিত্তিক Dolby Vision কোডেক ব্যবহার করার সময় ইনিশিয়ালাইজেশন ডেটা প্রদান করার কারণে ভিডিও আর্টিফ্যাক্ট সংক্রান্ত সমস্যা সমাধান করা হয়েছে (#3153)।
- অডিও সেশন আইডি জেনারেট করার সাথে সম্পর্কিত রেস কন্ডিশন ঠিক করুন, যা
টানেলিং মোডের সাথে
- ট্র্যাক বেছে নেওয়া:
- ফলব্যাক MIME টাইপ সংক্রান্ত সমস্যার সমাধান করতে
VideoTrackInfo-এ ট্র্যাক বেছে নেওয়ার লজিক অ্যাডজাস্ট করুন এবং HDR ও কোডেক স্কোর সংক্রান্ত পছন্দ কোয়ালিটি সংক্রান্ত পছন্দে সরিয়ে নিয়ে যান (#3135)।
- ফলব্যাক MIME টাইপ সংক্রান্ত সমস্যার সমাধান করতে
- এক্সট্র্যাক্টর:
- MP3: Xing ডেটার দৈর্ঘ্য জানা স্ট্রিম দৈর্ঘ্যের (#3117) চেয়ে বেশি হলে তা উপেক্ষা করুন।
Mp4Extractor-এArrayIndexOutOfBoundsExceptionঠিক করুন যখনFLAG_OMIT_TRACK_SAMPLE_TABLEসেট করা থাকে এবং ট্র্যাকে সিঙ্ক স্যাম্পেল (stss) বক্স থাকে না।
- অডিও:
- প্লেয়ারে একাধিক অডিও রেন্ডারার যোগ করা হলে অডিও ইভেন্টগুলি ভুলভাবে রুট হতে পারে এমন সমস্যার সমাধান করুন।
- ভিডিও:
- কোডেক রিসেট এড়াতে ৩০-এর কম API-তে ফ্রেম রেট পরিবর্তনের সময় কোডেক আবার ব্যবহার করার জন্য লজিক অ্যাডজাস্ট করুন, যেখানে সেগুলি উপযোগী নয় (#3120)।
- API 31+-এর জন্য
queueSecureInputBuffer-এ ফোর্সড সিঙ্ক্রোনাইজেশন ওয়ার্কঅ্যারাউন্ড বন্ধ করুন। ওয়ার্কঅ্যারাউন্ডটি ছিল একটি কৃত্রিম বাধা যা ডিক্রিপশনকে ক্রমানুসারে চলতে বাধ্য করেছিল যা API 31-এর আগে বিদ্যমান ফ্রেমওয়ার্ক সমস্যার কারণে ভিডিও বিকৃত হওয়া প্রতিরোধ করেছিল।
- ছবি:
- স্ক্রাবিং মোডে সমস্যা সমাধান করুন যেখানে ব্যবহারকারী "স্ক্রাবিং বন্ধ" করলে তবেই ছবি আপডেট কার্যকর হবে (#২৮১৫)।
- সেশন:
- অ্যাপ্লিকেশন থ্রেড মূল থ্রেড না হলে,
থ্রেড বাউন্ডারি জুড়ে
ForegroundServiceStartNotAllowedExceptionপ্রোপাগেট না হওয়ার সমস্যার সমাধান করা হয়েছে (#২৪৯৯)। - সেই সমস্যার সমাধান করুন যেখানে
COMMAND_SEEK_TO_MEDIA_ITEM,MediaController-এ উপলভ্য নয় যখন শুধুমাত্র প্ল্যাটফর্ম সেশনে কানেক্ট করা হয় যা অন্য আইটেম খোঁজার সুবিধা দেয় কিন্তু কোনও প্লেলিস্ট পরিবর্তন করে না। MediaControllerপ্ল্যাটফর্মে মিডিয়া আইটেম সেট করতে না পারলে সমস্যার সমাধান করুন মিডিয়া সেশন যাPREPARE_FROMঅ্যাকশনের অনুমতি দেয় না।- প্ল্যাটফর্ম কন্ট্রোলারের মাধ্যমে কানেক্ট করার সময় API 27 বা তার আগের ভার্সনে নিজের প্রসেস
Controller.isTrusted()-এর সাথে চিহ্নিত না হওয়ার সমস্যা সমাধান করুন।
- অ্যাপ্লিকেশন থ্রেড মূল থ্রেড না হলে,
থ্রেড বাউন্ডারি জুড়ে
- HLS এক্সটেনশন:
- স্ট্রিম ফলব্যাক চলাকালীন
ArrayIndexOutOfBoundsExceptionথ্রো করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যদি ট্র্যাক সিলেকশন উপলভ্য ট্র্যাকের সাবসেট হয় (#৩১৬১)। - পরবর্তী আপডেটে
#EXT-X-MAPট্যাগ রিপিট না করা হলে, মিডিয়া প্লেলিস্ট আপডেট জুড়ে ইনিশিয়ালাইজেশন সেগমেন্ট ক্যারি ওভার না হওয়ার সমস্যার সমাধান করা হয়েছে (#3105)।
- স্ট্রিম ফলব্যাক চলাকালীন
- DASH এক্সটেনশন:
SampleQueue-এ ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন, যখন এমন চাঙ্ক খোঁজা হচ্ছে যা বর্তমানে বাতিল করা হচ্ছে।
১.১০.০
২৬ মার্চ, ২০২৬
- কমন লাইব্রেরি:
Player.mute()ওPlayer.unmute()-কেUnstableApiথেকে স্টেবল ভার্সনে প্রোমোট করুন।Format.pcmEncodingওC.PcmEncoding-কেUnstableApiথেকে স্টেবল ভার্সনে প্রোমোট করুন।- এম্বেড করা
Formatইনস্ট্যান্সের প্রাইমারি গ্রুপ শনাক্ত করতেFormat.primaryTrackGroupIdযোগ করুন (#২৯৪)।
- ExoPlayer:
AdsMediaSource-এ ক্লিপিং করার ক্ষমতা যোগ করুন।MediaCodecVideoRenderer-এ ডায়নামিক শিডিউলিংয়ের জন্য সহায়তা যোগ করুন যাতে শিডিউলিংয়ের কাজ এবং CPU ওয়েক-সাইকেল আরও ভালোভাবে অ্যালাইন করা যায়, যখন ভিডিও ফ্রেম প্রসেস করা যাবে। আপনিDefaultRenderersFactory-এরexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()ব্যবহার করে এটি চালু করতে পারবেন।DefaultPreloadManager.Builder-এ কাস্টমDataSource.Factoryসেট করার অনুমতি দিন।- কিছু ডিফল্ট কনস্ট্যান্ট
ExoPlayer.Builder-এ সরানোর মাধ্যমে Robolectric ছাড়াইExoPlayer-কে মক করার অনুমতি দিন। এই জটিল ইন্টারফেসের মক তৈরি করা সাধারণত উৎসাহিত করা হয় না - শুধুমাত্র যখন ব্যবহার ন্যূনতম/সহজ/আকস্মিক হয় (#২৯৮৫)।- এর জন্য
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS-কেExoPlayerথেকেExoPlayer.Builder-এ সরাতে হয়েছে (অবচিত না করে)।
- এর জন্য
- একটি সমস্যার সমাধান করা হয়েছে যেখানে
ProgressiveMediaSourceপ্লেয়ারকে পুরনো টাইমলাইন তথ্য পাঠায় এবং সারিবদ্ধ সময়সীমা অপ্রত্যাশিতভাবে মুছে যায় (#3016)। - ফোন কল চলাকালীন প্লেব্যাকের অনুরোধ করা হলে ExoPlayer যাতে বিলম্বিত অডিও ফোকাসের অনুরোধ না করে সেই সমস্যার সমাধান করুন।
- অন-ডিমান্ড থেকে লাইভ কন্টেন্টে ট্রানজিশন করার সময় অন-ডিমান্ড কন্টেন্টের শেষে আবার বাফার হওয়ার সমস্যা সমাধান করা হয়েছে (#৩০৫২)।
- Dolby Vision Profile 10-এর জন্য সহায়তা যোগ করুন (#২৮৩০)।
- আনইনিশিয়ালাইজড প্রি-রোল বিজ্ঞাপন থেকে
ArrayIndexOutOfBoundsException(#3125) তৈরি হওয়ার বাগ ঠিক করা হয়েছে।
- CompositionPlayer:
EditedMediaItem.removeVideo-এর জন্য সহায়তা যোগ করুন।
- ট্রান্সফর্মার:
EditedMediaItem.Builder.setFrameRate()এখন ভিডিওর জন্য সর্বাধিক আউটপুট ফ্রেম রেট সেট করতে পারে, যাsetSpeed()-এর মাধ্যমে মিডিয়া স্পিড বাড়ানোর সময় বিশেষভাবে সহায়ক হয়।
- ট্র্যাক বেছে নেওয়া:
DefaultTrackSelector.selectAllTracks-এর সিগনেচার পরিবর্তন করে আউটপুট অ্যারে প্যারামিটার হিসেবে অন্তর্ভুক্ত করুন, ট্র্যাক ওভাররাইড সহ অটো-ফিল করা।- সংশ্লিষ্ট প্রাইমারি ট্র্যাক বেছে নেওয়া হয়েছে কিনা তা নির্বিশেষে এম্বেড করা মেটাডেটা ট্র্যাক বেছে নেওয়া হলে, সেই সমস্যার সমাধান করা হয়েছে (#২৯৪)।
TrackSelectionParameters-এর জন্য স্টেবিলাইজ করার বিকল্পpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsএবংselectTextByDefault।
- এক্সট্র্যাক্টর:
- MP4:
moov(#৩০৪৬)-এর মতো অন্যান্য বক্সের আগে বড়uuidবক্স সহ ফাইল কাজ করে। - MP4: MP4 কন্টেনারে ভার্সেটাইল ভিডিও কোডিং (VVC) ট্র্যাকের জন্য সহায়তা যোগ করা।
- MP4:
- ইন্সপেক্টর:
- ব্রেকিং পরিবর্তন:
FrameExtractorসরিয়ে দিন। ব্যবহারকারীদের এখন নতুন:media3-inspector-frameমডিউলের উপর নির্ভর করতে হবে এবংandroidx.media3.inspector.frame.FrameExtractor-এ ইমপোর্ট আপডেট করতে হবে। - ডিকোড করা ভিডিও ফ্রেম এক্সট্র্যাক্ট ও প্রসেস করার জন্য নতুন মডিউল নিয়ে আসা।
- ব্রেকিং পরিবর্তন:
- অডিও:
- IAMF ডিকোডার এক্সটেনশনের জন্য অন্তর্নিহিত ডিকোডিং লাইব্রেরি
libiamfথেকেiamf_tools-এ পরিবর্তন করুন। - IAMF ডিকোডিং ডিকোডার (IAMF ডিকোডার এক্সটেনশন ব্যবহার করার সময়) বা Android Spatializer-এর মাধ্যমে বাইনরাল আউটপুট সাপোর্ট করে।
- অটোমোটিভ পরিস্থিতিতে AC-4 ডিকোডার সাপোর্ট মূল্যায়ন করার সময়
AC4Profile22এবং অন্যান্য লিগ্যাসি প্রোফাইলের জন্য সাপোর্ট সঠিকভাবে সরান (#২৬০৯)। DefaultAudioSink-এAudioOutputইনিশিয়ালাইজেশনের রিট্রাই লজিক উন্নত করুন (#২৯০৫)।- IAMF ডিকোড করার সময় স্পিকারের (বা প্রযোজ্য হলে স্পেশালাইজার) আউটপুট লেআউট ম্যাচ করার চেষ্টা করুন, IAMF এক্সটেনশন এবং মিডিয়া কোডেক ডিকোডার, দুটির সাথেই, যা AudioCapabilities এবং AudioCapabilitiesReceiver-এ নতুন ফিল্ড এবং লজিক দ্বারা সমর্থিত।
- কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- IAMF ডিকোডার এক্সটেনশনের জন্য অন্তর্নিহিত ডিকোডিং লাইব্রেরি
- টেক্সট:
- VobSub: সবসময় ডিফল্ট হিসেবে ৫ সেকেন্ডের পরিবর্তে কিউয়ের সময়সীমা
নির্ধারণ করতে
STARTএবংSTOPSPU কন্ট্রোল কমান্ড ব্যবহার করুন (#২৯৩৫)।
- VobSub: সবসময় ডিফল্ট হিসেবে ৫ সেকেন্ডের পরিবর্তে কিউয়ের সময়সীমা
নির্ধারণ করতে
- মেটাডেটা:
- HLS ভেরিয়েন্ট ও রেন্ডিশন (#3043) দ্বারা প্রকাশিত সব সম্ভাব্য মেটাডেটা ট্র্যাক কভার করার জন্য মেটাডেটা রেন্ডারারের ডিফল্ট সংখ্যা বাড়িয়ে চার করুন।
- প্রভাব:
LottieOverlay-কে নতুন:media3-effect-lottieমডিউলে সরানো (যার মধ্যেandroidx.media3.effect.LottieOverlayথেকেandroidx.media3.effect.lottie.LottieOverlay-এ নাম পরিবর্তন করাও অন্তর্ভুক্ত)।
- Lottie এফেক্ট:
- নতুন
:media3-effect-lottieমডিউল নিয়ে আসুন যা ভিডিও ফ্রেমে লটি এফেক্ট প্রয়োগ করার ফাংশনালিটি প্রদান করে।
- নতুন
- IMA এক্সটেনশন:
- লেটেস্ট বিজ্ঞাপন মিডিয়া তথ্য API অ্যাক্সেস করতে IMA SDK ভার্সন আপডেট করে 3.39.0 করুন।
- বিজ্ঞাপনের MIME-এর ধরন IMA LOADED ইভেন্টে দেওয়া MIME-এর ধরনের সাথে মিলছে না, এই সমস্যার সমাধান করুন। এখন IMA-এর প্রদান করা বিজ্ঞাপনের মিডিয়া তথ্য ব্যবহার করে বিজ্ঞাপনের MIME টাইপ ম্যাপ করা হয়।
ImaAdsLoaderওImaServerSideAdInsertionMediaSource-এsetEnableCustomTabsযোগ করুন, যাতে ব্যবহারকারীরা নিয়ন্ত্রণ করতে পারেন যে কাস্টম ট্যাব ব্যবহার করে বিজ্ঞাপন ক্লিক-থ্রু URL লঞ্চ করা হবে কিনা।ImaAdTagUriBuilderযোগ করুন, এটি এমন একটি ক্লাস যাadTagUriতৈরি করার বিকল্প উপায় অফার করে। এতেsetPreferredLinearOrientationAPI আছে। এটি আলফা টেস্টিংয়ে থাকা একটি API যা আপনাকে লিনিয়ার বিজ্ঞাপনের জন্য পছন্দের ওরিয়েন্টেশন সেট করতে দেবে। আপনি আলফা টেস্টিং গ্রুপে যোগ দিতে চাইলে, আপনার অ্যাকাউন্ট পার্টনারের সাথে যোগাযোগ করুন।
- সেশন:
MediaMetadata.artworkData-এ বড় অ্যারে অ্যাপ ক্র্যাশ করতে পারে এমন সমস্যার সমাধান করুন।ActionFactoryইন্টারফেসে@Player.Commandআর্গুমেন্টের জন্য int টাইপ ব্যবহার করুন (#২৯৩৩)।MediaSessionServiceএবংMediaLibraryService-কে একটিLifecycleServiceকরুন, যা পরিষেবার লাইফসাইকেলে লাইফসাইকেল-সচেতন অপারেশন অ্যাটাচ করার অনুমতি দেয় (#১৮৭)।MediaControllerএবংMediaBrowserথেকে লোকাল প্লেব্যাকের জন্য ডিভাইসের ভলিউম পরিবর্তন করার কমান্ডের জন্য সহায়তা বন্ধ করুন। অ্যাপের মাধ্যমে স্থানীয় ডিভাইসের ভলিউম পরিবর্তন করা উচিত নয় এবং প্রয়োজন হলে, এই উদ্দেশ্যেAudioManagerAPI ব্যবহার করা যেতে পারে।Intent-এর পুরনো ইনস্ট্যান্স শনাক্ত করুন যা ফোরগ্রাউন্ড পরিষেবা হিসেবে পরিষেবাটি শুরু করেছে। এটি সিস্টেমের মাধ্যমেForegroundServiceDidNotStartInTimeExceptionথ্রো করা আটকায়। এটি একটি অস্থির API-তে ব্রেকিং পরিবর্তন কাস্টমMediaNotification.Providerপ্রয়োগকারী অ্যাপের জন্য কারণ সেখানে একটি নতুন প্রয়োজনীয় পদ্ধতি আছে।- হোম স্ক্রিন উইজেটের সাথে ব্যবহার করার জন্য
PendingIntentইনস্ট্যান্সের জন্য বিল্ডার যোগ করুন (#২৯৩৩)। - Compose-ভিত্তিক হোম স্ক্রিন উইজেটের জন্য
Intentইনস্ট্যান্স তৈরি করতে স্ট্যাটিক পদ্ধতি যোগ করুন (#২৯৩৩)। - একটি সমস্যা সমাধান করা হয়েছে যেখানে মিডিয়া আইটেম ট্রানজিশন কন্ট্রোলারকে জানানো হয়নি যখন প্লেব্যাক একটি নির্দিষ্ট মিডিয়া আইটেম ইনডেক্স থেকে অন্যটিতে ট্রানজিশন করেছে একই মিডিয়া আইটেমের জন্য 'AUTO' এবং 'SEEK' ডিসকন্টিনিউটি কারণে (#২৯৯৭)।
- সিস্টেম UI বোতাম প্লেসমেন্ট ওয়ার্কঅ্যারাউন্ডের কারণে Android Auto-র মতো অন্যান্য UI সারফেস বা ওয়ার্কঅ্যারাউন্ডের প্রয়োজন নেই এমন প্রস্তুতকারকদের উপর নেতিবাচক প্রভাব পড়ার সমস্যা সমাধান করা হয়েছে (#3041)।
- সাবস্ক্রিপশন অ্যাক্সেস সিঙ্ক না হওয়ার সমস্যার সমাধান করা হয়েছে (#3056)।
- API 29-এ SysUI বাগ সংক্রান্ত সমস্যার সমাধান, যেখানে নির্দিষ্ট সাইজের মিডিয়া সেশন আর্টওয়ার্ক SysUI ক্র্যাশ করতে পারে এবং ডিভাইস রিবুট করতে বাধ্য করতে পারে (#3118)।
- Android Q-তে বিজ্ঞপ্তি আর্টওয়ার্ক আইকন স্কেলিং সংক্রান্ত সমস্যার সমাধান করা (#৩০৮৪)।
- UI:
- প্লেব্যাক স্পিড দেখাতে ও পরিবর্তন করতে
media3-ui-compose-এPlaybackSpeedControlকম্পোজেবল যোগ করুন। - প্লেব্যাক স্পিড কন্ট্রোল করার জন্য
media3-ui-compose-material3-এPlaybackSpeedToggleButtonComposable যোগ করুন। - প্লেয়ারের প্রোগ্রেস দেখাতে এবং টেনে এনে ও ট্যাপ করে (#2288)
সিক করার জন্য
media3-ui-compose-material3-এProgressSliderকম্পোজেবল যোগ করুন। - PlayerControlView অ্যানিমেট করার সময় বড় অফস্ক্রিন বাফার এড়িয়ে চলুন।
media3-ui-compose-material3-এPlayerকম্পোজেবল যোগ করুন যা উপরে, মাঝে এবং নিচে কাস্টমাইজ করা যায় এমন কন্ট্রোল সহContentFrame-কে একত্রিত করে।PlayerControlViewদেখা গেলে, ক্রমাগত ঘোষণা আপডেট হওয়া আটকাতে, অ্যাক্সেসিবিলিটি পরিষেবা থেকে প্লেব্যাক পজিশন লুকান।
- প্লেব্যাক স্পিড দেখাতে ও পরিবর্তন করতে
- HLS এক্সটেনশন:
- HLS ইন্টারস্টিশিয়ালের সাথে X-PLAYOUT-LIMIT-এর জন্য সহায়তা (#২৪৮৪)।
#EXT-X-DEFINE-এর সাথেQUERYPARAMঅ্যাট্রিবিউট ব্যবহার করুন (#১৮৫৪)।- রেগুলার এক্সপ্রেশন ম্যাচিং ক্যাশে করে HLS প্লেলিস্ট পার্সিং অপ্টিমাইজ করুন (#3008)।
- অডিও রেন্ডিশনে ID3 (EMSG) মেটাডেটা ট্র্যাক এক্সপোজ করুন (#3043)।
- লোড করার সময় সমস্যা হলে, লোকেশন ফলব্যাক করার অনুমতি দিন, যদি বিভিন্ন লোকেশন থেকে রিডানডেন্ট স্ট্রিম উপলভ্য থাকে (#১৯৮৮)।
- শুরু ও আবার চালু করার পজিশন সঠিকভাবে গণনা করার জন্য HLS ইন্টারস্টিশিয়ালের ক্ষেত্রে X-SNAP আচরণ সংক্রান্ত সমস্যার সমাধান করা (#৩০১৩)।
- DASH এক্সটেনশন:
- RTSP এক্সটেনশন:
- H.264 এবং H.265 স্ট্রিমিংয়ে রিগ্রেশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার ফলে একাধিক RTP প্যাকেটে বিস্তৃত একই অ্যাক্সেস ইউনিটের স্যাম্পেল ভুলভাবে পার্স করা হচ্ছিল। এর ফলে ভিডিওতে ভিজ্যুয়াল আর্টিফ্যাক্ট ও করাপশন দেখা যায় (#3121)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- MPEG-H ডিকোডার এক্সটেনশনে MPEG-H UI ম্যানেজার সাপোর্ট যোগ করা হয়েছে (#3066)।
- কাস্ট এক্সটেনশন:
RemoteCastPlayer.Builder#setTrackSelectorপদ্ধতি যোগ করুন যা কাস্ট প্লেব্যাকের জন্য ট্র্যাক বেছে নেওয়ার সুবিধা প্রয়োগ করতে দেয়।
- বাতিল করা চিহ্ন সরান:
ExperimentalFrameExtractorসরান। পরিবর্তেandroidx.media3.inspector.frame.FrameExtractorব্যবহার করুন।ChannelMixingMatrix.create()সরান। পরিবর্তেChannelMixingMatrix.createForConstantGain()ব্যবহার করুন।androidx.media3.extractor.metadata.flac.VorbisCommentসরান। পরিবর্তেandroidx.media3.extractor.metadata.vorbis.VorbisCommentব্যবহার করুন।MediaSource.prepareSource(MediaSourceCaller, TransferListener)সরান। পরিবর্তেMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)ব্যবহার করুন।
1.10.0-rc03
২৫ মার্চ, ২০২৬
1.10.0 স্টেবল ভার্সন ব্যবহার করুন।
1.10.0-rc02
১৬ মার্চ, ২০২৬
1.10.0 স্টেবল ভার্সন ব্যবহার করুন।
1.10.0-rc01
১০ মার্চ, ২০২৬
1.10.0 স্টেবল ভার্সন ব্যবহার করুন।
1.10.0-beta01
২৫ ফেব্রুয়ারি, ২০২৬
1.10.0 স্টেবল ভার্সন ব্যবহার করুন।
1.10.0-alpha01
৬ ফেব্রুয়ারি, ২০২৬
1.10.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.9.0
1.9.4
১৬ মে, ২০২৬
ভার্সন 1.9.4-এ নিম্নলিখিত কমিট রয়েছে।
- প্রভাব:
- সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময়
স্পষ্টভাবে
GL_DRAW_BUFFERওGL_READ_BUFFERসেট করুন।
- সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময়
স্পষ্টভাবে
1.9.3
১৬ মার্চ, ২০২৬
ভার্সন 1.9.3-এ নিম্নলিখিত কমিট রয়েছে।
- অডিও:
- কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
1.9.2
৬ ফেব্রুয়ারি, ২০২৬
ভার্সন 1.9.2-এ নিম্নলিখিত কমিট রয়েছে।
- ExoPlayer:
ProgressiveMediaSourceপ্লেয়ারে পুরনো টাইমলাইন তথ্য প্রচার করে এবং সারিবদ্ধ পিরিয়ড অপ্রত্যাশিতভাবে মুছে যায়, এই সমস্যার সমাধান করুন (#3016)।
- সেশন:
- সিস্টেম UI বোতাম প্লেসমেন্ট ওয়ার্কঅ্যারাউন্ডের কারণে Android Auto-র মতো অন্যান্য UI সারফেস বা ওয়ার্কঅ্যারাউন্ডের প্রয়োজন নেই এমন প্রস্তুতকারকদের উপর নেতিবাচক প্রভাব পড়ার সমস্যা সমাধান করা হয়েছে (#3041)।
- কাস্ট এক্সটেনশন:
- কাস্ট থেকে লোকাল প্লেব্যাকে ট্রান্সফার করার সময় যে সমস্যা হচ্ছিল তা সমাধান করা হয়েছে।
1.9.1
২৬ জানুয়ারি, ২০২৬
ভার্সন 1.9.1-এ এইসব কমিট আছে।
- কমন লাইব্রেরি:
- টাইমজোন অফসেটে শুধু ঘণ্টা সহ তারিখ-সময় স্ট্রিংয়ের জন্য সহায়তা (#২৯২৯)।
- ExoPlayer:
- প্লেব্যাক শুরু হওয়ার সময় আরও মসৃণ A/V সিঙ্ক করার জন্য অডিও শুরু হওয়ার পরেই
doSomeWorkইন্টারভ্যাল স্লো করার জন্য ডায়নামিক শিডিউলিংয়ের অনুমতি দিন। DefaultLoadErrorHandlingPolicy-এ থাকা সমস্যার সমাধান করুন যেখানেFileNotFoundExceptionএবং একই ধরনের ব্যতিক্রমের ধরন একাধিকবার আবার চেষ্টা করা হয়েছে।- ডায়নামিক শিডিউলিংয়ের ক্ষেত্রে বাগ ঠিক করুন যেখানে পরবর্তী
doSomeWork-এর জন্য হিসেব করা সময় ভুলবশতdoSomeWork-এর বর্তমান ইটারেশনের অতিবাহিত সময় দ্বারা কমিয়ে দেওয়া হয়েছিল। এই সমস্যার সমাধান করলে, আশা করি সিপিইউ আইডল টাইম বৃদ্ধি পাবে এবং পাওয়ার সাশ্রয় হবে। - ফলব্যাক AVC বা HEVC কোডেক ব্যবহার করার চেষ্টা করার সময় Dolby Vision ফাইলের কিছু প্লেব্যাক ব্যর্থ হওয়ার সমস্যা সমাধান করা হয়েছে।
- প্লেলিস্ট থেকে বর্তমানে চলা আইটেম সরানোর সময় প্লেব্যাক শেষ হওয়ার পরেও লোডিং চলতে থাকার সমস্যাটি সমাধান করা হয়েছে (#২৮৭৩)।
- একই আইটেমে বারবার
ExoPlayer.replaceMediaItemব্যবহার করার সময়MediaItemইনস্ট্যান্স লিক হওয়া এড়িয়ে চলুন (#২৯৯৩)। - ইমার্জেন্সি ওয়েক লক রিলিজের কারণে সম্ভাব্য ANR প্রতিরোধ করুন (#২৯৭৯)।
- প্লেব্যাক শুরু হওয়ার সময় আরও মসৃণ A/V সিঙ্ক করার জন্য অডিও শুরু হওয়ার পরেই
- এক্সট্র্যাক্টর:
- MP3: LAME ReplayGain ডেটা পার্স করুন (#২৮৪০)।
- অডিও:
- অটোমোটিভ পরিস্থিতিতে AC-4 ডিকোডার সাপোর্ট মূল্যায়ন করার সময়
AC4Profile22এবং অন্যান্য লিগ্যাসি প্রোফাইলের জন্য সাপোর্ট সঠিকভাবে সরান (#২৬০৯)।
- অটোমোটিভ পরিস্থিতিতে AC-4 ডিকোডার সাপোর্ট মূল্যায়ন করার সময়
- ভিডিও:
- API 30-এর নিচের ডিভাইসে ভিডিও কোডেক বাতিল করুন যখন কন্টেন্ট ফ্রেম রেট পরিবর্তন হয় যাতে প্লেব্যাক আটকে না যায় (#২৯৪১)।
- টেক্সট:
- VobSub: SPU সঠিকভাবে ম্যানেজ করার মাধ্যমে বাদ পড়ে যাওয়া কিছু সাবটাইটেল ঠিক করুন, যেগুলিতে হয় শুধুমাত্র একটি কন্ট্রোল সিকোয়েন্স থাকে অথবা একাধিক কন্ট্রোল সিকোয়েন্স জুড়ে গুরুত্বপূর্ণ তথ্য বিভক্ত থাকে (#২৯৩৫)।
- IMA এক্সটেনশন:
- ত্রুটি সমাধান: বিজ্ঞাপনের MIME-এর প্রকার IMA LOADED ইভেন্টে দেওয়া MIME-এর প্রকারের সাথে ম্যাচ না করার সমস্যা সমাধান করা হয়েছে। এখন বিজ্ঞাপন পড ইন্ডেক্স ও বিজ্ঞাপনের পজিশন ব্যবহার করে বিজ্ঞাপনের MIME টাইপ ম্যাপ করা হয়।
getAdsManager()এবংAdEvent.getAd()-এর ফলাফল অ্যাক্সেস করার আগে একটি নাল চেক যোগ করুন।
- সেশন:
- বিজ্ঞাপন প্লেব্যাক চলাকালীন
MediaController-এর সাথে কানেক্ট করা প্ল্যাটফর্ম সেশন বন্ধ করার সময় অ্যাপ ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে (#২৯৪৮)। - অন্যান্য প্রসেস থেকে পাঠানো বিকৃত
Bundleইনস্ট্যান্স থেকে রক্ষা করতে বিভিন্ন ক্লাসেextrasBundleইনস্ট্যান্সে অতিরিক্ত যাচাইকরণ যোগ করুন। COMMAND_SEEK_NEXTবাCOMMAND_SEEK_BACK-এর জন্য কমান্ড না থাকার কারণে সিস্টেম মিডিয়া বিজ্ঞপ্তিতে গ্যাপ তৈরি হওয়ার সমস্যা সমাধান করা হয়েছে (#২৯৭৬)।- বিজ্ঞপ্তি আইকনের জন্য বিটম্যাপ স্কেলিং মূল থ্রেড থেকে সরিয়ে দিন (#২৮২৯)।
- পুরনো
MediaMetadataCompatএবংMediaDescriptionCompat(#3018) থেকে কনভার্ট করার সময় লেখক, গীতিকার এবং সুরকারকে ফলব্যাক হিসেবে ব্যবহার না করার সমস্যা সমাধান করা হয়েছে।
- বিজ্ঞাপন প্লেব্যাক চলাকালীন
- ডাউনলোড:
SegmentDownloader-এর মাধ্যমেPriorityTooLowExceptionম্যানেজ করার সময় সম্ভাব্য ইনফিনিট লুপের সমস্যা সমাধান করুন (DASH, HLS ও SmoothStreaming-এর জন্য)। সুরক্ষিতexecuteপদ্ধতি ব্যবহার করেSegmentDownloader-এর কাস্টম ওভাররাইডকেSupplier-এ র্যাপ করা টাস্ক প্রদান করতে হবে যাতে এটি আবার তৈরি করা যায় (#২৯৩১)।
- HLS এক্সটেনশন:
Listener.onAssetListLoadCompletedকলব্যাকে র অ্যাসেট তালিকার JSON ডকুমেন্ট পাস করুন। এটি একটি ব্রেকিং পরিবর্তন যা একটি অস্থির API-তে ঘটে। এই পরিবর্তনের ফলে, যে অ্যাপগুলি এই কলব্যাকটি প্রয়োগ করে, তাদেরJSONObjectটাইপের একটি অতিরিক্ত আর্গুমেন্ট যোগ করতে হবে (#২৯৫০)।
- RTSP এক্সটেনশন:
- টাইমস্ট্যাম্প সহ RTP প্যাকেট সঠিকভাবে ম্যানেজ করুন যা র্যাপ করা থাকে (#২৯৩০)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- প্রথম ভিডিও ফ্রেম প্রসেস করার আগে
সিক করার সময় সম্ভাব্য
NullPointerExceptionসমাধান করুন (#২৯৬৫)।
- প্রথম ভিডিও ফ্রেম প্রসেস করার আগে
সিক করার সময় সম্ভাব্য
- কাস্ট এক্সটেনশন:
- প্লেলিস্ট পরিবর্তন করার সময়
RemoteCastPlayerটাইমলাইন সঠিকভাবে আপডেট হওয়া আটকানো সংক্রান্ত সমস্যার সমাধান করুন।
- প্লেলিস্ট পরিবর্তন করার সময়
১.৯.০
১৭ ডিসেম্বর, ২০২৫
- কমন লাইব্রেরি:
- অন্যান্য AndroidX লাইব্রেরির সাথে সামঞ্জস্য রেখে
minSdkথেকে23-এ আপডেট করুন। PlayerTransferStateযোগ করুন, যাPlayerইনস্ট্যান্স জুড়ে প্লেব্যাক স্টেট ট্রান্সফার করার সুবিধা প্রদান করে।- প্লেয়ারে
void mute()এবংvoid unmute()পদ্ধতি যোগ করুন যা প্লেয়ারের ভলিউম শূন্যে সেট করার আগে এবং পরে সংরক্ষণ করে এবং ফলস্বরূপ রিস্টোর করে। - অন্যান্য প্লেয়ারদের জন্য পুনরায় ব্যবহার করার অনুমতি দিতে
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerএবংStuckPlayerDetectorইউটিলিটি ক্লাস প্রকাশ করুন যা আগে ইন্টার্নালিExoPlayerব্যবহার করেছে (#১৮৯৩)। - যখন অন্তর্নিহিত ডেলিগেট প্লেয়ার লিসনার ইনস্ট্যান্সের তুলনা করার জন্য রেফারেন্স ইকুয়ালিটি ব্যবহার করে, তখন
ForwardingPlayerলিসনার হ্যান্ডলিং সংক্রান্ত সমস্যার সমাধান করুন (#২৬৭৫)। media3-common-ktxলাইব্রেরিতে একটিPlayer.listenToসাসপেন্ডিং এক্সটেনশন ফাংশন যোগ করুন যা নির্দিষ্টPlayer.Eventsউল্লেখ করে যার উপর কাজ করা উচিত।BasePlayer.getBufferedPercentage-এ ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যা ইনটিজার ওভারফ্লোর কারণে হয়, যখন রিপোর্ট করা বাফার করা পজিশন রিপোর্ট করা সময়সীমার চেয়ে অনেক বেশি হয় (#২৭৫০)।- কাস্টম স্যাম্পেল MIME টাইপ উপেক্ষা না করে এবং কন্টেনার MIME টাইপ থেকে সম্ভাব্য ভুল ট্র্যাক টাইপ ব্যবহার করার জন্য ফিরে না গিয়ে
TrackGroupট্র্যাক টাইপের অটোমেটিক শনাক্তকরণ ঠিক করুন (#২৮৬০)।
- অন্যান্য AndroidX লাইব্রেরির সাথে সামঞ্জস্য রেখে
- ExoPlayer:
- প্লেয়ার আটকে গেলে শনাক্ত করার সুবিধা যোগ করুন যা প্লেয়ার আটকে গেলে
StuckPlayerExceptionপ্লেয়ার সংক্রান্ত সমস্যা ট্রিগার করে। এটি নিম্নলিখিত ক্ষেত্রে ঘটে, যেখানে প্রতিটি ডিফল্ট টাইমআউটExoPlayer.Builder-এ কনফিগার করা যেতে পারে, যদি প্রয়োজন হয়:STATE_BUFFERING-এর ১০ মিনিট পরে যখন চালানোর চেষ্টা করা হচ্ছে এবং কোনও বাফারিং প্রোগ্রেস নেই।STATE_READY১০ সেকেন্ড ধরে চালানোর চেষ্টা করার পরেও প্লেব্যাক প্রোগ্রেস না হলে।- আইটেমের শেষ পর্যন্ত না পৌঁছে, ঘোষিত সময়সীমার বাইরে
STATE_READY-এর ১ মিনিট পরে। - প্লে করার চেষ্টা করার সময় প্লেব্যাক বন্ধ করার কারণ সহ ১০ মিনিট পরে।
- ব্যাকগ্রাউন্ড প্লেব্যাকের সময় বাফারিং সংক্রান্ত সমস্যার সমাধান করতে ডিফল্ট হিসেবে ওয়েক লক হ্যান্ডলিং চালু করুন। এটি
ExoPlayer.Builder.setWakeMode-কেC.WAKE_MODE_LOCAL-এ সেট করার সমতুল্য। ExoPlayer.Builder-এ প্রাথমিকভাবে পাস করাContext-এ কোনও পরিবর্তন রিপোর্ট করা হলে, ভার্চুয়াল ডিভাইস আইডি অটোমেটিক আপডেট করার জন্য লিসেনিং লজিক যোগ করুন।- ভার্চুয়াল ডিভাইস ম্যানুয়ালি আপডেট করতে
ExoPlayer.setVirtualDeviceIdযোগ করুনContextথেকে পাওয়া আইডিExoPlayer.Builder-এ পাস করা হয়েছে। - নিশ্চিত করুন যে রেন্ডারাররা বর্তমান আইটেম শেষ হওয়ার ১০ সেকেন্ডের বেশি আগে পরবর্তী প্লেলিস্ট আইটেম থেকে ডেটা ব্যবহার করে না।
- নির্মাণ কাজ শেষ হওয়ার পরে
এইসব সেটিংস আপডেট করতে
ExoPlayer-এsetSeekBackIncrementMs,setSeekForwardIncrementMsএবংsetMaxSeekToPreviousPositionMsযোগ করুন (#২৭৩৬)। DefaultPreloadManager-এ প্রি-ক্যাশিং ফাংশনালিটি যোগ করুন। অ্যাপ এখনDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)বাDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)-এর মাধ্যমে ফেরত দিতে পারে যাতে বোঝা যায় যে মিডিয়া আইটেম প্রি-ক্যাশ করতে হবে।- শর্টফর্ম ডেমো অ্যাপে
DefaultPreloadManager-এর প্রি-ক্যাশিং কার্যকারিতা ব্যবহার করুন। - লোকাল প্লেব্যাকের জন্য
DefaultLoadControl.Builderসেটার যোগ করুন এবংDefaultLoadControl-এর ডিফল্ট ভ্যালু অ্যাডজাস্ট করুন যাতে বিভিন্ন ধরনের লোকাল ফাইলের সাথে ভালভাবে কাজ করে। - খালি প্লেলিস্ট সেট করার ফলে প্লেয়ার
STATE_READYবাSTATE_BUFFERING-এ থেকে যাওয়ার সমস্যা সমাধান করুন। - প্রিলোড ম্যানেজার API উন্নত করুন:
addMediaItems(List<MediaItem>, List<T>)এবংaddMediaSources(List<MediaSource>, List<T>)যোগ করুন যা ব্যাচে মিডিয়া আইটেম বা মিডিয়া সোর্স যোগ করে এবং পরে অটোমেটিকinvalidate()কল করে।removeMediaItems((List<MediaItem>)এবংremoveMediaSources(List<MediaSource>)যোগ করুন যা ব্যাচে মিডিয়া আইটেম বা মিডিয়া সোর্স সরিয়ে দেয় এবং নিশ্চিত করুন যে প্রিলোড ম্যানেজার সরানোর পরে এগুলির কোনওটি প্রিলোড করা শুরু বা প্রিলোড করা চালিয়ে যায় না।DefaultPreloadManager.setCurrentPlayingIndex(int)-কে অটোমেটিক নিজেকে অবৈধ করার অনুমতি দিন। বর্তমানে চলছে এমন ইনডেক্স আপডেট করার পরে অ্যাপকে আর আলাদা করেinvalidate()কল করতে হবে না।
- স্ক্রাবিং মোডে থাকাকালীন ছবির একই গ্রুপের মধ্যে ফরোয়ার্ড সিক করার জন্য কীফ্রেম রিসেট এড়িয়ে যাওয়ার ক্ষমতা যোগ করুন।
- নির্দিষ্ট
playerNameসহ প্লেয়ারের জন্য টার্গেট বাফার বাইটের ভ্যালু সেট করতে অ্যাপের জন্যDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)যোগ করুন।DefaultLoadControlএখন প্রতিটি প্লেয়ারের জন্য আলাদাভাবে সিদ্ধান্ত নিতে পারে। এই সিদ্ধান্ত নেওয়া হয় প্লেয়ারের জন্য বরাদ্দ করা বাইট এবং টার্গেট বাফার বাইটের উপর ভিত্তি করে। - বিজ্ঞাপন গ্রুপের প্রতিটি বিজ্ঞাপনের জন্য স্কিপ সংক্রান্ত তথ্য
বহন করতে
AdPlaybackState.AdGroup-এSkipInfoযোগ করুন। - পোস্ট-রোল চালানোর সময়
removeMediaItems(List)কল করার ফলে ক্র্যাশ হওয়ার সমস্যা সমাধান করা হয়েছে (#২৭৪৬)। - প্লেলিস্ট প্লেব্যাক করার সময় কিছু স্টাটারিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ফ্রেম ভুলবশত সবসময় শেষ স্যাম্পেল হিসেবে সেট করা হয়েছিল এবং রেন্ডার করা হয়েছিল।
- প্লেয়ার অডিও সেশন আইডি তৈরি করতে না পারলে আবার চেষ্টা করার পাথ চালু করুন (#২৩৮২, #২৬৭৮)।
DefaultPreloadManager-এ সোর্সের জন্য মোট বাফার বাইট কন্ট্রোল করার জন্য সহায়তা যোগ করুন যাতে প্রিলোডিংয়ের জন্য মোট বাফার বাইট যথেচ্ছভাবে বৃদ্ধি না পায়। ডিফল্ট কন্ট্রোল লজিক ব্যবহার করতে, অ্যাপPlayerId.Preload.name("প্রিলোড")-এরplayerName-এর জন্যDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)-এর মাধ্যমে প্রিলোড করার জন্য টার্গেট বাফার বাইট সেট করতে পারে এবংDefaultPreloadManager.Builder.setLoadControl(LoadControl)-এর মাধ্যমে তৈরি করাDefaultLoadControlইনজেক্ট করতে পারে।- ডিফল্ট ইমপ্লিমেন্টেশন (#2834) সহ
ShuffleOrder-এcloneAndSet(int, int)যোগ করুন। - অ্যাডজাস্টমেন্ট বা অটোমেটিক ট্রানজিশন খোঁজার পরে বিজ্ঞাপন প্লেব্যাক এড়িয়ে যাওয়ার সময় কন্টেন্ট রিজিউম অফসেট অ্যাপেন্ড করুন (#২৪৮৪)।
- অডিও ও ভিডিও ট্র্যাকের জন্য কোডেক প্যারামিটার সেট ও পর্যবেক্ষণ করতে API যোগ করুন।
এই ফিচার
MediaCodecভিত্তিক রেন্ডারারের জন্য প্রয়োগ করা হয়েছে এবং এটির জন্য API 29+ প্রয়োজন।- প্যারামিটার প্রয়োগ করতে
ExoPlayer.setAudioCodecParameters()এবংExoPlayer.setVideoCodecParameters()ব্যবহার করুন। - পরিবর্তন শুনতে
ExoPlayer.addAudioCodecParametersChangeListener()এবংExoPlayer.addVideoCodecParametersChangeListener()ব্যবহার করুন। ভেন্ডর-নির্দিষ্ট কী পর্যবেক্ষণ করার জন্য API 31+ প্রয়োজন।
- প্যারামিটার প্রয়োগ করতে
- শূন্য নয় এমন পজিশনে খোঁজার পরে এবং তারপরে শূন্য নয় এমন মিডিয়া সোর্স সহ
প্লেয়ার প্রস্তুত করার পরে, শূন্য মিডিয়া সোর্স সেট করার কারণে
IllegalStateExceptionসংক্রান্ত সমস্যার সমাধান করুন। - স্ক্রাবিং মোডে থাকাকালীন অন্যান্য মিডিয়া আইটেম খোঁজার সময় বাগ ঠিক করুন
IllegalStateExceptionহতে পারে। DefaultPlaybackSessionManager-এ সম্ভাব্যNullPointerExceptionসংক্রান্ত সমস্যার সমাধান করুন (#২৮৮৫)।- উপযুক্ত ভিডিওর জন্য সিকিং পারফর্ম্যান্স উন্নত করার সুবিধা চালু করুন।
- API 36+ ভার্সনে MediaCodec-এ অ্যাসিঙ্ক্রোনাস ডিক্রিপশনের ব্যবহার আবার চালু করুন যেখানে এই প্ল্যাটফর্ম API-এর সাথে টাইমআউট সংক্রান্ত সমস্যা সমাধান করা হয়েছে (#১৬৪১)।
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs-এর ডিফল্ট ভ্যালু পরিবর্তন করে ১৫ মিলি সেকেন্ড করুন এবং উপযুক্ত ভিডিওর জন্য ডিকোড করার আগে ভিডিও ফ্রেম আরও দক্ষতার সাথে ড্রপ করার সুবিধা চালু করুন।DefaultLoadControl-এ অটোমেটিক মেমরি গণনায় সর্বোচ্চ মেমরি সীমা যোগ করুন। অতিরিক্ত সংখ্যক ট্র্যাক বেছে নেওয়া হলে তবেই এটি কার্যকর হওয়া উচিত (#২৮৬০)।- প্লেলিস্ট বা রিপিট মোডে চালানোর সময়, স্ক্রাব মোডে শেষের দিকে সিক করলে, পরবর্তী মিডিয়া আইটেমে সিক করার সমস্যা সমাধান করা হয়েছে।
- প্লেয়ার আটকে গেলে শনাক্ত করার সুবিধা যোগ করুন যা প্লেয়ার আটকে গেলে
- CompositionPlayer:
- এটি এক্সপেরিমেন্টের জন্য উপলভ্য হলেও এখনও ডেভেলপ করা হচ্ছে তা বোঝাতে, নতুন
@ExperimentalApiঅ্যানোটেশনের অধীনেCompositionPlayerপ্রকাশ করুন। ভবিষ্যতে রিলিজের সময় কিছু API-তে উল্লেখযোগ্য পরিবর্তন হতে পারে এবং কিছু ব্যবহারের ক্ষেত্রে (কিছু ডকুমেন্ট করা নেই) পরিচিত সমস্যা ও সীমাবদ্ধতা রয়েছে। CompositionPlayer-এCOMMAND_SET_AUDIO_ATTRIBUTESএবং অডিও ফোকাস হ্যান্ডলিংয়ের জন্য সহায়তা যোগ করুন।CompositionPlayer-এ সেকেন্ডারি সিকোয়েন্সে স্পিড পরিবর্তন করার জন্য সহায়তা যোগ করুন।EditedMediaItem.removeVideo-এর জন্য সহায়তা যোগ করুন।
- এটি এক্সপেরিমেন্টের জন্য উপলভ্য হলেও এখনও ডেভেলপ করা হচ্ছে তা বোঝাতে, নতুন
- ট্রান্সফর্মার:
- ডিফল্ট মাক্সার হিসেবে
InAppMp4Muxerব্যবহার করুন। EditedMediaItem.Builder#setSpeed()যোগ করুন এবংEffects#createExperimentalSpeedChangingEffects()বন্ধ করুন।EditedMediaItemSequence-এforceAudioTrackওforceVideoTrack-এর জায়গায়trackTypesব্যবহার করুন।
- ডিফল্ট মাক্সার হিসেবে
- ট্র্যাক বেছে নেওয়া:
- অন্য কোনও নির্দিষ্ট পছন্দ উল্লেখ না করে, যেকোনও টেক্সট ট্র্যাক বেছে নেওয়ার জন্য
TrackSelectionParameters.selectTextByDefaultযোগ করুন। - নির্দিষ্ট লেবেল সহ ট্র্যাকের জন্য পছন্দ নির্দিষ্ট করতে
TrackSelectionParameters-এpreferredVideoLabels,preferredAudioLabelsএবংpreferredTextLabelsযোগ করুন, যেমন HLS NAME ট্যাগ (#1666) থেকে পড়া ট্র্যাক।
- অন্য কোনও নির্দিষ্ট পছন্দ উল্লেখ না করে, যেকোনও টেক্সট ট্র্যাক বেছে নেওয়ার জন্য
- এক্সট্র্যাক্টর:
- FLAC: এনকোড করা FLAC ডেটাতে জাল হেডার খুঁজে পাওয়ার সম্ভাবনা কমাতে হেডার শনাক্তকরণ আরও কঠোর করা হয়েছে, যার ফলে ডিকোডিং সংক্রান্ত সমস্যা (#৫৫৮) হয়।
- MP3: MP3 ফাইলের শুরুতে ID3 ট্যাগের মধ্যে (এবং আগে) ফাঁকা জায়গা রাখার অনুমতি দিন (#811, #5718)।
- MP3: সিঙ্ক বাইটের জন্য বর্তমান সার্চ সীমার সাথে ম্যাচ করতে স্নিফিং সীমা ১২৮kB পর্যন্ত বাড়ান (#২৭১৩)।
- MP3: মেটাডেটা হেডার (যেমন Xing এবং VBRI) থেকে তথ্য খোঁজার জন্য
FLAG_ENABLE_INDEX_SEEKINGপরিবর্তন করুন, অন্য কোনও তথ্য খোঁজার বিকল্প না থাকলে ইন্ডেক্স-ভিত্তিক খোঁজার বিকল্পে ফিরে যান। এটি মেটাডেটা খোঁজার সুবিধা সহ ফাইলের পারফর্ম্যান্স উন্নত করে (#২৮৩৯)। - MP3:
Mp3Extractor-কে ডিফল্ট হিসেবে কনস্ট্যান্ট বিটরেটে (CBR) পরিবর্তন করুন অনুমান যখন কোনও মেটাডেটা (যেমন, Xing, VBRI) পাওয়া যায় না, এমনকি যখনFLAG_ENABLE_INDEX_SEEKINGসেট করা থাকে। এটি MP3 স্পেসিফিকেশন ইতিহাসের উপর ভিত্তি করে তৈরি, যেখানে CBR স্ট্যান্ডার্ড এবং VBR-এর জন্য স্পষ্ট হেডার প্রয়োজন। এটি মেটাডেটা ছাড়া ফাইলের জন্য অবিলম্বে সিক করার ক্ষমতা উন্নত করে, তবে হেডার ছাড়া VBR ফাইলের জন্য সম্ভাব্য নির্ভুলতার খরচ বহন করতে হয়। CBR অনুমান যদি সিক করা না যায় (যেমন, অজানা দৈর্ঘ্যের স্ট্রিমের জন্য), তাহলে এখন ফলব্যাক হিসেবে ইন্ডেক্স সিকিং ব্যবহার করা হয় (#২৮৪৮)। - MP4: এক্সট্র্যাক্টর থেকে ট্র্যাক ফর্ম্যাট এমিট করার আগে প্রথম স্যাম্পেলের লেয়ার ভ্যালু দেখে
audio/mpeg(MP3),audio/mpeg-L1এবংaudio/mpeg-L2MIME প্রকারের মধ্যে পার্থক্য করুন (#২৬৮৩)। - MP4: ১ এমবির চেয়ে বড়
stblবক্সের অর্থ হল ফাইলটি ফ্র্যাগমেন্টেড নয়, এটি ধরে নিয়ে খুব বড় ফাইলের স্নিফিং এফিসিয়েন্সি উন্নত করুন (#২৬৫০)। - MP4:
©mvn(মুভমেন্টের নাম) এবং©mvi(মুভমেন্ট ইনডেক্স) মেটাডেটার জন্য সহায়তা যোগ করুন, এগুলি এখনTextInformationFrameঅবজেক্ট হিসেবেFormat.metadata-এ যথাক্রমেMVNMএবংMVINআইডির সাথে এমিট করা হয় (#২৭৫৪)। - MP4:
stsdবক্স নেই এমন ট্র্যাক উপেক্ষা করুন (পুরো ফাইল পার্স করতে ব্যর্থ হওয়ার পরিবর্তে)। - Matroska: DTS-HD শনাক্তকরণের জন্য সহায়তা যোগ করা হয়েছে (#6225)।
MatroskaExtractor-এ এমন একটি সমস্যার সমাধান করা হয়েছে যেখানে একাধিক ট্র্যাক সহ ফাইলের জন্য সিকিং ভুল হতে পারে। কিউ পয়েন্ট এখন তাদের সংশ্লিষ্ট ট্র্যাকের সাথে সঠিকভাবে যুক্ত করা হয়েছে, যার ফলে আরও নির্দিষ্ট অংশে যাওয়া সম্ভব হয়েছে।- MPEG-TS:
ReorderingBufferQueueথেকেIllegalArgumentExceptionঠিক করুন যা টাইমস্ট্যাম্প ছাড়া PES প্যাকেটের কারণে হয়েছে (#২৭৬৪)। - HEIC মোশন ফটো এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন।
HeifExtractorএখন এম্বেড করা ভিডিও এবং অডিও ট্র্যাক সহ HEIC ফাইল পার্স করতে পারে।
- ইন্সপেক্টর:
- মিডিয়া খতিয়ে দেখার ইউটিলিটির জন্য ডেডিকেটেড হোম হিসেবে কাজ করার জন্য
নতুন
:media3-inspectorমডিউল চালু করা হয়েছে। এই মডিউলে এখন একটি নতুনandroidx.media3.inspector.MetadataRetrieverআছে, যা মেটাডেটা এবং ফ্রেম এক্সট্র্যাকশন, দুটির জন্যই একটি ইউনিফায়েড API প্রদান করবে। আগে থেকে থাকাandroidx.media3.exoplayer.MetadataRetrieverএখন এই নতুন ভার্সনের জন্য বাতিল করা হয়েছে। - ফ্রেম এক্সট্র্যাকশনের জন্য নতুন পাবলিক API,
androidx.media3.inspector.FrameExtractorচালু করা হয়েছে। এইAutoCloseableক্লাস HDR ভিডিও, ভিডিও এফেক্ট ও কাস্টম ডিকোডার বেছে নেওয়ার সুবিধা সহ ফ্রেম এক্সট্র্যাক্ট করার উপায় প্রদান করে। এটি নির্দিষ্টMediaItem-এর জন্যBuilder-এর মাধ্যমে তৈরি করতে হবে। - FrameExtractor: নির্দিষ্ট টাইমস্ট্যাম্প ছাড়াই মিডিয়া ফাইল থেকে
প্রতিনিধিত্বমূলক থাম্বনেল ফ্রেম এক্সট্র্যাক্ট করতে
getThumbnail()যোগ করুন। androidx.media3.inspector.MediaExtractorCompatযোগ করুন, এটি প্ল্যাটফর্মেরandroid.media.MediaExtractor-এর পরিবর্তে ব্যবহার করা যায়, যা মিডিয়া ফাইল থেকে র, এনকোড করা মিডিয়া স্যাম্পেল এক্সট্র্যাক্ট করার উপায় প্রদান করে। আগে থেকে থাকাandroidx.media3.exoplayer.MediaExtractorCompatএখন এই নতুন ক্লাসের জন্য বাতিল করা হয়েছে।
- মিডিয়া খতিয়ে দেখার ইউটিলিটির জন্য ডেডিকেটেড হোম হিসেবে কাজ করার জন্য
নতুন
- অডিও:
AudioProcessorইনস্ট্যান্সকে সিকিং সম্পর্কে সচেতন করুন।- কাস্টম অডিও আউটপুট পাথ সাপোর্ট করার জন্য
DefaultAudioSink.Builder-এ নতুনAudioOutputProviderইন্টারফেস ইনজেক্ট করার অনুমতি দিন। ডিফল্ট হলAudioTrackAudioOutputProvider। GainProcessor-এ হ্যান্ডেল সিক।- ট্র্যাক ফর্ম্যাট সাপোর্ট অ্যাসেসমেন্টে AC-4 ডিকোডার প্রোফাইল এবং লেভেল ক্ষমতা ব্যবহার করুন (#২৫৮০)।
- প্লেব্যাক শুরু হওয়ার সময় রাউটিং পরিবর্তন কলব্যাক ম্যানেজ করার কারণে সম্ভাব্য বিলম্ব এড়িয়ে চলুন (#২৬৪৬)।
- EAC3, EAC3-JOC এবং AC-4 ফর্ম্যাটের জন্য কোডেক আবার ব্যবহার করার অনুমতি দিন (#১৩৪৬)।
Sonic-এ ফ্লোট PCM স্যাম্পেলের জন্য সহায়তা যোগ করুন।ToFloatPcmAudioProcessor-এ ১৬ বিট PCM স্যাম্পেলের জন্য সহায়তা যোগ করুন।
- ভিডিও:
- বিভিন্ন প্রোফাইল সহ Dolby-Vision কন্টেন্টের জন্য কোডেক আবার ব্যবহার করার সুবিধা বন্ধ করুন।
- নিরাপদ কোডেক (#২৮৫৬)-এর জন্য ভুলভাবে রিপোর্ট করা পারফর্ম্যান্স পয়েন্টের জন্য ওয়ার্কঅ্যারাউন্ড আবার চালু করুন।
- টেক্সট:
- Dolby Vision কন্টেন্টে CEA-6/708 সাবটাইটেল পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২৭৭৫)।
- ছবি:
- ScrubbingMode সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে DASH থাম্বনেল ট্র্যাক স্ক্রাব করার সময় প্লেয়ার আটকে যায় (#২৮১৫)।
- DRM:
MediaDrmCallbackপদ্ধতির রিটার্ন টাইপbyte[]থেকে নতুনMediaDrmCallback.Responseটাইপে পরিবর্তন করুন, যাতে অতিরিক্ত ঐচ্ছিক তথ্য রিটার্ন করা যায়। এটি একটি সোর্স ব্রেকিং পরিবর্তন, তবে আগেরbyte[]রিটার্ন ভ্যালু রিটার্ন করার আগেnew Responseদিয়ে র্যাপ করে ব্রেকিং সহজেই সমাধান করা যেতে পারে।- URL ও লেটেন্সির মতো মূল অনুরোধের তথ্য
AnalyticsListener.onDrmKeysLoaded(#১০০১)-এ যোগ করুন। - URL প্যারামিটার থেকে POST বডিতে প্রভিশনিং অনুরোধের ডেটা সরান।
- প্রভাব:
Presentation-কে একটি মাত্র সাইডের দৈর্ঘ্য দিয়ে তৈরি করা হলে, সেট না করা আউটপুট সাইডকে রাউন্ড করতেPresentation.copyWithUnsetSideRoundedToযোগ করুন।
- Muxers:
MediaMuxerCompatযোগ করুন, ফ্রেমওয়ার্কের জন্য ড্রপ-ইন রিপ্লেসমেন্টMediaMuxer।- মোশন ফটো তৈরি করার অনুমতি দিতে
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()যোগ করুন। OPUS,VORBIS,VP8এবংVP9মিডিয়া স্ট্রিমকেwebmফাইল ফর্ম্যাটে মিক্স করার অনুমতি দিতেWebmMuxerযোগ করুন।
- IMA এক্সটেনশন:
- কাস্টম প্রোগার্ড নিয়ম সরিয়ে দেওয়া, যাতে অ্যাপগুলি পরিবর্তে IMA Android আর্কাইভে রিলিজ করা নিয়মগুলি ব্যবহার করতে পারে।
ImaServerSideAdInsertionUriBuilder.setNetworkCodeযোগ করুন, এটি হল Google Ad Manager সেটিংসে উল্লেখ করা বিজ্ঞাপন শনাক্তকারী ম্যানেজ করার জন্য IMA SDK-এর Google Ad Manager নেটওয়ার্ক কোড সেট করার নতুন API। নেটওয়ার্ক কোড ঐচ্ছিক হলেও সম্পূর্ণ পরিষেবা স্ট্রিম অনুরোধের জন্য সাজেস্ট করা হয়। নেটওয়ার্ক কোড খুঁজতে, এই নিবন্ধ দেখুন।- IMA ডিপেন্ডেন্সি 3.37.0-এ বাম্প করুন যার জন্য কোর লাইব্রেরি ডিসুগারিং চালু করতে হবে। এছাড়াও, এটি নির্ভর করে এমন অ্যাপের মাধ্যমেও চালু করতে হবে। IMA-এর কনফিগ নোট দেখুন। * SSAI URI বিল্ডারে IMA DAI কাস্টম UI বিকল্পের সুবিধা। সার্ভার সাইড বিজ্ঞাপন ইনসার্ট করার জন্য কাস্টম UI বিকল্পের মধ্যে "এড়িয়ে যাওয়া যাবে" এবং "এই বিজ্ঞাপন সম্পর্কে" রেন্ডারিং সংক্রান্ত সহায়তা অন্তর্ভুক্ত। এই ফিচার বর্তমানে অনুমতি তালিকায় থাকা বাছাই করা প্রকাশকদের জন্য উপলভ্য। এই পরিবর্তনের ফলে IMA SDK ভার্সন 3.38.0-এ (রিলিজ নোট) আপগ্রেড করা হয় যাতে কাস্টম UI বিকল্প API অ্যাক্সেস করা যায়।
- বিজ্ঞাপনের পরে কন্টেন্ট প্রস্তুত করার সময় হওয়া সমস্যাকে ভুল করে বিজ্ঞাপনের প্লেব্যাক সংক্রান্ত সমস্যা হিসেবে রিপোর্ট করা হচ্ছিল, এই সমস্যার সমাধান করা হয়েছে (#২৬৫৬)।
- সেশন:
- কলটি শুধুমাত্র তথ্য সংগ্রহ করার জন্য নাকি প্লেব্যাক শুরু করার জন্য করা হয়েছে তা নির্দেশ করতে
MediaSession.Callback.onPlaybackResumption-এ নতুন প্যারামিটার যোগ করুন (#১৭৬৪)। - নিজস্ব অ্যাপ থেকে কন্ট্রোলারকে বিশ্বস্ত হিসেবে ঘোষণা করতে
MediaSession.ControllerInfo.isTrustedআপডেট করুন (#2542)। - বিজ্ঞপ্তি আপডেট ম্যানুয়ালি ট্রিগার করতে
MediaSessionService.triggerNotificationUpdateযোগ করুন (#১৮৩৩)। - কাস্টম কমান্ড পদ্ধতিতে
ProgressListenerযোগ করুন। MediaLibrarySession.Builder.setLibraryErrorReplicationMode-এর ডিফল্ট ভ্যালু পরিবর্তন করে নন-ফেটাল করুন।MediaButtonReceiver.onForegroundServiceStartNotAllowedException-এContextপ্যারামিটার যোগ করুন (#২৬২৫)।- বাইন্ডারের মাধ্যমে ভলিউম কন্ট্রোল আইডি ফেচ করার পরিবর্তে
PlaybackInfoপ্ল্যাটফর্ম থেকে এটি পড়ুন। এটি নিশ্চিত করে যে প্লেব্যাক টাইপ এবং ভলিউম কন্ট্রোল আইডি অ্যাটমিক্যালি পড়া হয় এবং একে অপরের সাথে মেলে। - কাস্টম হ্যান্ডলিংয়ের জন্য কলব্যাকে পাস করার আগে
ACTION_UPটি গুরুত্বপূর্ণ ইভেন্ট ফিল্টার আউট হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে। This brings parity with what media1 did and the platform does (#2637). - কমান্ড উপলভ্য না থাকলেও
PlayerWrapper-এর মাধ্যমেgetCurrentTimeline()-কে কল করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২৬৬৫)। - সেই সমস্যার সমাধান করা হয়েছে যেখানে মূল লুপারের মেসেজ সারিতে একটি মেসেজ থেকে গিয়েছিল যার ফলে পরিষেবা বন্ধ হওয়ার পরে মেমরি লিক হয়েছিল (#২৬৯২)।
MediaBrowser-এর সাথে লিগ্যাসি সেশন অ্যাপে কানেক্ট করা থাকলে, কাস্টম অ্যাকশনটি লিগ্যাসি সেশনেরPlaybackStateCompat-এ কাস্টম অ্যাকশন হিসেবে বিজ্ঞাপন দেওয়া হলে তবেই সেশনে কাস্টম কমান্ড পাঠানো হয়। অন্যান্য সব কাস্টম অ্যাকশন পরিষেবাতে পাঠানো হয়।- সেশন দ্বারা অডিও সেশন আইডি সেট করা হলে
মিডিয়া কন্ট্রোলারকে জানানোর জন্য
onAudioSessionIdChangedপ্রয়োগ করা হয়েছে (#২৪৪)। KEYCODE_HEADSETHOOK-এ প্লেয়ার চালু না হওয়া এবংonStartCommand()-এ মিডিয়া কী ইভেন্টIntentআসার সমস্যা সমাধান করুন। এটি ঠিক করা হয়েছে 'KEYCODE_HEADSETHOOK' হ্যান্ডেল করার মাধ্যমে, ঠিক যেমনKEYCODE_MEDIA_PLAY_PAUSE(#২৮১৬)।- সেশন ও কন্ট্রোলারের মধ্যে সারফেস সাইজ সংক্রান্ত তথ্য আদানপ্রদান না হওয়ার ফলে ডেমো সেশনে ভিডিও এফেক্ট প্রয়োগ করা যাচ্ছিল না। এই সমস্যার সমাধান করা হয়েছে। আপনি কন্ট্রোলার ব্যবহার করলে, আপনার প্লেয়ার
setVideoSurfaceHolderকল ম্যানেজ করতে না পারলে, এটি ব্রেকিং পরিবর্তন হতে পারে। - স্প্যান-স্টাইল করা স্ট্রিংয়ের মতো
নন-
StringCharSequenceমেটাডেটা ভ্যালুর প্রোপাগেশন ঠিক করুন (#২৮৫৩)। CommandButton.executeActionযোগ করুন যাতে কন্ট্রোলার আরও সহজে উদ্দিষ্ট অ্যাকশন ট্রিগার করতে পারে। এছাড়াও, কোন অ্যাকশন ট্রিগার করতে হবে তা নির্ধারণ করার জন্য কিছু প্লেয়ার ও সেশন কমান্ডের জন্য প্যারামিটার নির্দিষ্ট করার অনুমতি দিন।CommandButtonইনস্ট্যান্সের জন্য ব্যাকওয়ার্ড-কম্প্যাটিবিলিটি যোগ করুনPlayer.Commandবা কাস্টম নয় এমনSessionCommandব্যবহার করে তাদের অ্যাকশন নির্ধারণ করুন। এগুলি এখন প্ল্যাটফর্ম মিডিয়া সেশনে সঠিকভাবে উপস্থাপন করা হয়েছে, যেমন সিস্টেম UI বা Android Auto-এর জন্য।MediaController-কে প্ল্যাটফর্ম মিডিয়া সেশনের সাথে কানেক্ট করার সময় একইBitmapএকাধিকবার কম্প্রেস হওয়ার সমস্যা সমাধান করা হয়েছে।
- কলটি শুধুমাত্র তথ্য সংগ্রহ করার জন্য নাকি প্লেব্যাক শুরু করার জন্য করা হয়েছে তা নির্দেশ করতে
- UI:
media3-ui-composeমডিউলেProgressStateWithTickIntervalক্লাস এবং সংশ্লিষ্টrememberProgressStateWithTickIntervalকম্পোজেবল যোগ করুন। এই স্টেট হোল্ডারdemo-compose-এ ব্যবহার করা হয় যাতে বর্তমান পজিশন ও সময়সীমা টেক্সট হিসেবে দেখানো যায়।ui-compose-এMuteButtonStateযোগ করুন যাPlayerভলিউম মিউট করার কাজটি ম্যানেজ করে। এই স্টেট হোল্ডারdemo-compose-এ মিউট/আনমিউট টগল বোতাম দেখাতে ব্যবহার করা হয়।ProgressStateWithTickCountক্লাস এবং সংশ্লিষ্টrememberProgressStateWithTickCountকম্পোজেবলmedia3-ui-composeমডিউলে যোগ করুন। এই স্টেট হোল্ডারdemo-compose-এ প্রোগ্রেস দেখানোর জন্য ব্যবহার করা হয় যা একটি অনুভূমিক কেবল পঠনযোগ্য প্রোগ্রেস বার হিসেবে দেখানো হয়।media3-ui-compose-এContentFrameকম্পোজেবল যোগ করুন যা অ্যাস্পেক্ট রেশিও রিসাইজ করা এবং শাটার দিয়ে কভার করার সাথেPlayerSurfaceম্যানেজমেন্টকে একত্রিত করে।- Work around a known API 34 platform bug causing stretched/cropped videos
when using
SurfaceViewinside a ComposeAndroidViewand hence affectingContentFrameandPlayerSurfaceComposables withSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - একটি নতুন
media3-ui-compose-material3মডিউল তৈরি করুন এবং এতে Material3-থিমযুক্ত কম্পোজেবল (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) যোগ করুন। - টেক্সট ফর্ম্যাটে প্লেয়ারের প্রোগ্রেস দেখানোর জন্য
media3-ui-compose-material3-এTimeTextকম্পোজেবল যোগ করুন। বর্তমান পজিশন, সময়সীমা বা বাকি থাকা সময় দেখানোর জন্য এটি কনফিগার করা যেতে পারে। PlayerView-এ মিডিয়া রুট বোতাম যোগ করার জন্য সহায়তা যোগ করুন।- RTL টেক্সট সাবটাইটেলে (#11214) যতিচিহ্ন সঠিকভাবে দেখাতে
BidiFormatterব্যবহার করুন।
- HLS এক্সটেনশন:
- HLS ইন্টারস্টিশিয়াল স্কিপ অ্যাট্রিবিউট পার্স করুন।
- HLS প্লেলিস্ট এবং অ্যাসেট তালিকার ডকুমেন্ট থেকে স্কিপ কন্ট্রোল অ্যাট্রিবিউট ম্যাপ করে
AdPlaybackState-এ নিয়ে যান যাতে সর্বজনীন অ্যাক্সেস পাওয়া যায়। - প্লেলিস্ট থেকে শুরুর সময় নির্ধারণকারী EXT-X-PROGRAM-START-DATE ট্যাগ সরিয়ে দেওয়ার ফলে প্লেলিস্টের শুরুর সময় বাদ পড়ে যাওয়ার সমস্যাটি সমাধান করা হয়েছে (#২৭৬০)।
- প্লেলিস্টে (#২৮২৬) কোনও নির্দিষ্ট পজিশনের সেগমেন্ট ইন্ডেক্স খুঁজে পেতে বাইনারি সার্চ ব্যবহার করুন।
HlsInterstitialsAdsLoader.skipCurrentAd()এবংskipCurrentAdGroup()এবং ইন্ডেক্স অনুযায়ী বিজ্ঞাপন ও বিজ্ঞাপন গ্রুপ এড়িয়ে যাওয়ার জন্য সংশ্লিষ্ট পদ্ধতি যোগ করুন।- বিজ্ঞাপন দেখানোর সময়সীমা
শুরু হওয়ার সময় জানাতে
HlsInterstitialsAdsLoader.Listener.onAdStartedযোগ করুন (#২৮৫৯)। - ISO 8601 তারিখ-সময় স্ট্রিংয়ে তারিখ/সময় বিভাজক হিসেবে স্পেস গ্রহণ করুন।
- কোনও সেগমেন্ট (#২৮২১) নেই এমন
HlsMediaPlaylist-এর জন্য পরবর্তী চাঙ্ক ফেচ করার বিষয়টি সঠিকভাবে ম্যানেজ করুন। - লাইভ স্ট্রিমের সাথে প্রি-রোলের জন্য ডিফল্ট শুরুর পজিশন ব্যবহার করুন।
- DASH এক্সটেনশন:
- নন-হায়ারার্কিক্যাল
data:URI ম্যানিফেস্টের (#2688) সাথে DASH স্ট্রিম চালানোর সময়UnsupportedOperationExceptionসংক্রান্ত সমস্যার সমাধান করা হয়েছে। DashMediaSource-এরMediaItem-এর মাধ্যমে প্রদান করা ভ্যালুতেLiveConfigurationরিসেট করুন যখন রিলিজ করা হয় এবং ব্যবহারকারীর মাধ্যমে মিডিয়া আইটেম আপডেট করা হয় (#২৬০৬)।- প্লেয়ারের সমস্যা হিসেবে রিপোর্ট করা হয়নি এমন ভুল ম্যানিফেস্ট আপডেট হওয়ার কারণে ক্র্যাশ হওয়া এড়িয়ে চলুন (#২৮০৫)।
- নন-হায়ারার্কিক্যাল
- RTSP এক্সটেনশন:
- H264 এবং H265-এর জন্য ফ্র্যাগমেন্টেড NAL ইউনিট প্রসেস করার সময় মিসিং RTP প্যাকেট সংক্রান্ত সমস্যার সমাধান করুন (#২৬১৩)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- AV1 এক্সটেনশন: AV1 সফ্টওয়্যার ডিকোডার এখন উন্নত ডিকোডিং গতির জন্য আগের
libgav1ইমপ্লিমেন্টেশনকে পরিবর্তন করে হাই-পারফর্ম্যান্সdav1dলাইব্রেরি ব্যবহার করে। - FFmpeg এক্সটেনশন:
STREAMINFOব্লক সঠিকভাবে পার্স করা হয়েছে এবং ডিকোডারে পাস করা হয়েছে কিনা তা নিশ্চিত করার মাধ্যমে কিছু FLAC ফাইল চালানোয় বাধা দেয় এমন সমস্যার সমাধান করা হয়েছে (#২৮৮৭)।
- AV1 এক্সটেনশন: AV1 সফ্টওয়্যার ডিকোডার এখন উন্নত ডিকোডিং গতির জন্য আগের
- কাস্ট এক্সটেনশন:
CastPlayer.Builderযোগ করুন, যাCastPlayer-কে লোকাল ও Cast প্লেব্যাক, দুটিই করতে দেয়। শুধুমাত্র Cast প্লেব্যাক সাপোর্ট করার পুরনোCastPlayerআচরণ বজায় রাখতে, আপনিRemoteCastPlayerব্যবহার করতে পারেন। আগে থেকে থাকাCastPlayerকনস্ট্রাক্টর তাদের পুরনো আচরণ বজায় রাখে, তবেCastPlayerবাRemoteCastPlayerবিল্ডার ব্যবহার করার জন্য বন্ধ করা হয়েছে।DefaultMediaItemConverter-এ নন-নাল MIME-এর ধরন এনফোর্স করা বন্ধ করুন।MediaItem.mediaMetadata.mediaTypeব্যবহার করে Cast MEDIA_TYPE অনুমান করুন, যাতেDefaultCastOptionsProvider#toMediaQueueItem-এ ব্যবহার করা যায়, উপলভ্য থাকলে।DefaultCastOptionsProvider-এ রিমোট থেকে লোকাল ট্রান্সফার চালু করুন।- সেশন ডেমোতে Cast-এর জন্য সহায়তা যোগ করুন।
- কম্পোজেবল UI-তে মিডিয়া রুট বোতাম দেখানোর জন্য সহায়তা যোগ করুন।
- অ্যাকশন বার মেনুতে মিডিয়া রুট বোতাম দেখানোর জন্য সহায়তা যোগ করুন।
- View UI হিসেবে মিডিয়া রুট বোতাম দেখানোর জন্য সহায়তা যোগ করুন।
- টেস্ট ইউটিলিটি:
FakeClock-এর অটো-অ্যাডভান্সিং আচরণের জন্য সর্বাধিক সময়ের পার্থক্য যোগ করুন। এটি ডিফল্ট হিসেবে ১ সেকেন্ডের জন্য সেট করা থাকে, তবেFakeClock.Builder-এর মাধ্যমে কনফিগার করা যায়।RobolectricUtil.runMainLooperUntil(এবংrunLooperUntil)-এর জন্য মেসেজের মধ্যে সর্বাধিক সময়ের পার্থক্য যোগ করুন। এটি ডিফল্ট হিসেবে ১ সেকেন্ডে সেট করা থাকে, তবে এই পদ্ধতিগুলির নতুন ওভারলোডের মাধ্যমে কনফিগার করা যায়।CapturingRenderersFactory,test-utilsথেকেtest-utils-robolectric-এ সরান।
- বাতিল করা চিহ্ন সরান:
- পুরনো
DefaultPreloadManagerকনস্ট্রাক্টর সরিয়ে দিন। পরিবর্তেDefaultPreloadManager.Builderব্যবহার করুন। - পুরনো হয়ে যাওয়া
EditedMediaItemSequenceকনস্ট্রাক্টর সরানো হয়েছে। পরিবর্তেEditedMediaItemSequence.Builderব্যবহার করুন। BitmapFactoryImageDecoder.BitmapDecoderসরান। পরিবর্তেExternallyLoadedImageDecoderব্যবহার করুন।ShadowMediaCodecConfig.forAllSupportedMimeTypes()-এর পুরনো ভার্সন সরিয়ে দিন। পরিবর্তেShadowMediaCodecConfig.withAllDefaultSupportedCodecs()ব্যবহার করুন।ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()সরিয়ে দিন। পরিবর্তেShadowMediaCodecConfig.withNoDefaultSupportedCodecs()ব্যবহার করুন।
- পুরনো
1.9.0-rc01
১ ডিসেম্বর, ২০২৫
1.9.0 স্টেবল ভার্সন ব্যবহার করুন।
1.9.0-beta01
২০ নভেম্বর, ২০২৫
1.9.0 স্টেবল ভার্সন ব্যবহার করুন।
1.9.0-alpha01
২২ অক্টোবর, ২০২৫
1.9.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.8.0
১.৮.১
২১ মে, ২০২৬
ভার্সন 1.8.1-এ নিম্নলিখিত কমিট রয়েছে।
- প্রভাব:
- সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময়
স্পষ্টভাবে
GL_DRAW_BUFFERওGL_READ_BUFFERসেট করুন।
- সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময়
স্পষ্টভাবে
ভার্সন 1.8.0
৩০ জুলাই, ২০২৫
ভার্সন 1.8.0-এ এইসব কমিট আছে।
- কমন লাইব্রেরি:
ForwardingSimpleBasePlayer-এ প্লেয়ার পরিবর্তন করার জন্য সহায়তা যোগ করুন।
- ExoPlayer:
ExoPlayerইন্টারফেসে শাফেল মোডের জন্য গেটার যোগ করুন (#2522)।- একাধিক থ্রেড থেকে
DefaultAudioSinkঅ্যাক্সেস করা হলে, আরও স্পষ্টভাবে ব্যতিক্রম থ্রো করুন। প্লেয়ারের বাইরেRendererCapabilities.getFormatSupport-এ কল করার কারণে এটি হলে, ExoPlayer-এর প্লেব্যাক থ্রেডের মতো একই থ্রেডে এই পদ্ধতি কল করতে ভুলবেন না অথবা প্লেব্যাকের জন্য ব্যবহৃত ইনস্ট্যান্সের থেকে আলাদা ইনস্ট্যান্স ব্যবহার করুন (#1191)। - টিভিতে নন-স্টিরিও অডিও ফর্ম্যাট
DefaultTrackSelector-এর সাথে কাজ করে না হিসেবে চিহ্নিত হওয়ার সমস্যা সমাধান করা হয়েছে। - MediaCodec-এর
DECODE_ONLYফ্ল্যাগ (যা স্ক্রাবিং মোডে ডিফল্ট হিসেবে চালু থাকে) ব্যবহার করার সময় শেষ ফ্রেমটি সঠিকভাবে রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করুন। ContextথেকেExoPlayer.Builder-এ পাস করা ভার্চুয়াল ডিভাইস আইডি ব্যবহার করার জন্য সহায়তা যোগ করুন।- স্ক্রাবিং মোডে ডিফল্ট হিসেবে ডায়নামিক শিডিউলিং চালু করুন।
- কোনও আইটেমের শেষ পর্যন্ত দেখার সময় সোর্স অপ্রয়োজনীয়ভাবে রিলোড করা এড়িয়ে চলুন।
- স্ক্রাবিং মোডে ডিফল্ট হিসেবে
MediaCodec.BUFFER_FLAG_DECODE_ONLYব্যবহার করুন। IllegalStateExceptionথ্রো করুন যখনPreloadMediaSourceকোনওExoPlayer-এর মাধ্যমে প্লেব্যাক থ্রেড সহ চালানো হয় যা প্রিলোড থ্রেড (#২৪৯৫) থেকে আলাদা।- ডিফল্ট প্রয়োগের সাথে
ShuffleMode-এcloneAndMoveযোগ করুন (#২২২৬)। Renderer.getMinDurationToProgressUs-এর ডিফল্ট অ্যাকশন পরিবর্তন করে আরও বড় ভ্যালু রিটার্ন করুন, যদিrender-এ কল করার প্রয়োজন না হয়।- পজ করা অবস্থায় ভিডিওর শেষে যাওয়ার সময় ইন্টার্নাল শিডিউলিংয়ের কারণে শেষ ফ্রেম দেরিতে দেখানোর সমস্যা সমাধান করা হয়েছে। আপাতত, ত্রুটি সমাধান তখনই কাজ করবে যদি
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledচালু করা থাকে। ExoPlayer.setScrubbingModeEnabled(boolean)পদ্ধতি যোগ করুন। এটি প্লেয়ারকে ঘন ঘন খোঁজার জন্য অপ্টিমাইজ করে (যেমন, ব্যবহারকারী স্ক্রাবার বার এদিক ওদিক টেনে নিয়ে গেলে)। স্ক্রাবিং মোডের আচরণExoPlayer-এsetScrubbingModeParameters(..)এবংExoPlayer.Builder-এর মাধ্যমে কাস্টমাইজ করা যেতে পারে।- স্ক্রাবিং মোডে ফ্র্যাকশনাল সিক টলারেন্স কাস্টমাইজ করার অনুমতি দিন।
- স্ক্রাবিং মোডে কোডেক অপারেটিং রেট বাড়ান।
AdsMediaSource-এর কন্টেন্ট প্রস্তুত করার সময় হওয়া সমস্যা কখনও রিপোর্ট না করার সমস্যা সমাধান করা (#2337)।MergingMediaSource-এ মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন, যেমন সাবটাইটেল সাইডলোড করার সময় ব্যবহার করা হয় (#২৩৩৮)।- নির্দিষ্ট মিডিয়া আইটেমের জন্য CMCD লগিং বন্ধ করতে
CmcdConfiguration.Factory-কেnullরিটার্ন করার অনুমতি দিন (#২৩৮৬)। - ডিফল্ট ইমেজ বাফার সাইজ ১২৮kB (টেক্সট ট্র্যাক থেকে কপি-পেস্ট করার সময় ভুল) থেকে ২৬MB-তে বাড়ান, যা ৫০MP আল্ট্রা HDR ইমেজের জন্য যথেষ্ট বড় (#২৪১৭)।
PreCacheHelperযোগ করুন যা অ্যাপকে নির্দিষ্ট শুরুর অবস্থান এবং সময়সীমা সহ একটি মিডিয়া প্রি-ক্যাশে করার অনুমতি দেয়।DefaultPreloadManager-এ নির্দিষ্ট পজিশন থেকে প্রিলোড করার সুবিধা যোগ করুন।
- ট্রান্সফর্মার:
CodecDbLiteযোগ করুন যা ভিডিও এনকোডিং সেটিংসের চিপসেট নির্দিষ্ট অপ্টিমাইজেশন চালু করে।- CodecDB Lite সেটিংস অপ্টিমাইজেশন চালু করতে
DefaultEncoderFactory-এsetEnableCodecDbLiteফ্ল্যাগ যোগ করুন। ডিফল্ট হিসেবে, এই ফ্ল্যাগ false-এ সেট করা থাকে। - প্রাথমিক গ্যাপ (
addGap()-এর মাধ্যমে যোগ করা হয়েছে) সাইলেন্ট অডিও দিয়ে পূরণ করতে এখনEditedMediaItemSequence.Builder-এexperimentalSetForceAudioTrack(true)স্পষ্টভাবে সেট করতে হবে। ক্রমের মাঝখানে ফাঁক থাকলে, এই ফ্ল্যাগ প্রয়োজন নেই। media3-transformerথেকেmedia3-muxer-এMuxerইন্টারফেস সরান।- ছবি হিসেবে মিডিয়া আইটেম ইমপোর্ট করতে
MediaItem.Builder().setImageDuration(long)সেটিং বাধ্যতামূলক করুন। - যোগ করুন
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)যার মধ্যে ট্রিম করার সময় MP4 এডিট তালিকা অন্তর্ভুক্ত থাকে যাতে প্লেয়ারকে নির্দেশ দেওয়া যায় ট্রিম শুরুর পয়েন্টের আগে কী ফ্রেমের মধ্যে স্যাম্পেল উপেক্ষা করতে এবং ট্রিম শুরুর পয়েন্ট। - Kotlin ও Jetpack Compose ব্যবহার করার জন্য Composition Demo অ্যাপ আপডেট করুন এবং
সিকোয়েন্সকে 2x2 বা PiP লেআউটে সাজানোর জন্য কাস্টম
VideoCompositorSettingsযোগ করুন।
- এক্সট্র্যাক্টর:
- ফ্র্যাগমেন্ট করা MP4 ফাইল থেকে মেটাডেটা পার্স করুন (#২০৮৪)।
- JPEG: মোশন ফটোতে কাজ করে যেগুলির শুরুতে Exif সেগমেন্ট নেই (#২৫৫২)।
- একাধিক
sidxঅ্যাটম সহ ফ্র্যাগমেন্টেড MP4-এ খোঁজার জন্য সহায়তা যোগ করুন।FragmentedMp4Extractor-এFLAG_MERGE_FRAGMENTED_SIDXফ্ল্যাগ ব্যবহার করে এই আচরণ চালু করা যেতে পারে (#9373)। - FLAC ফাইলে খালি সিক টেবিল (শুধুমাত্র প্লেসহোল্ডার সিক পয়েন্ট সহ) উপেক্ষা করুন এবং ফাইলের সময়সীমা জানা থাকলে বাইনারি সার্চ সিকিংয়ে ফিরে যান (#২৩২৭)।
- H.265 SEI ইউনিটের পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে যাতে শনাক্ত করা যায়নি এমন SEI ধরন সম্পূর্ণভাবে এড়িয়ে যাওয়া যায় (#২৪৫৬)।
WAVE_FORMAT_EXTENSIBLEধরনের ফাইল পার্স করার সময় অডিও ফর্ম্যাটের জন্য হেডার এক্সটেনশনের SubFormat ডেটা ব্যবহার করতেWavExtractorআপডেট করুন।- MP4: র PCM অডিও ট্র্যাক (64-বিট ফ্লোটিং পয়েন্ট PCM কাজ করে না)
সংজ্ঞায়িত করে
ipcmএবংfpcmবক্সের জন্য সহায়তা যোগ করুন। - MP4:
tkhdট্রান্সফর্মেশন ম্যাট্রিক্সের রোটেশন অংশটি ম্যানেজ করুন যা ভিডিওকে রোটেট ও রিফ্লেক্ট করে। এটি নিশ্চিত করে যে iPhone-এর ফ্রন্ট ফেসিং ক্যামেরা দিয়ে তোলা রিফ্লেক্টেড ভিডিও সঠিকভাবে উপরের দিকে ডিসপ্লে করে, কিন্তু y-অ্যাক্সিসে ভুলভাবে রিফ্লেক্ট করে (#২০১২)। - MP3:
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)-এর কারণে কনস্ট্যান্ট বিটরেট সিকিংয়ে ফিরে যাওয়ার সময়, আনসিকেবেল Xing, VBRI এবং একই ধরনের ভেরিয়েবল বিটরেট মেটাডেটা থেকে সময়সীমা ও ডেটার সাইজ ব্যবহার করুন (#২১৯৪)।
- অডিও:
- মিডিয়া শেষ হওয়ার ঠিক আগে অডিও প্লেব্যাক শুরু হলে
AnalyticsListener.onAudioPositionAdvancingকল না হওয়ার সমস্যা সমাধান করুন। ChannelMappingAudioProcessorএবংTrimmingAudioProcessor-এ সব লিনিয়ার PCM স্যাম্পেল ফর্ম্যাটের জন্য সহায়তা যোগ করুন।CompositionPlayer-এ অডিও গ্যাপের জন্য সহায়তা যোগ করুন।BaseAudioProcessor#reset()থেকেBaseAudioProcessor#flush()-এ করা জাল কল সরান।- DefaultAudioMixer-এ কনস্ট্যান্ট পাওয়ার আপমিক্সিং/ডাউনমিক্সিংয়ের অনুমতি দিন।
ChannelMappingAudioProcessor,TrimmingAudioProcessorএবংToFloatPcmAudioProcessorসর্বজনীন করুন (#২৩৩৯)।DefaultAudioSink-এ আন্ডাররান শনাক্ত করতেAudioTrackPositionTracker-এAudioTrack#getUnderrunCount()ব্যবহার করুন, বেস্ট-এফর্ট এস্টিমেশন ব্যবহার করবেন না।- অডিও আউটপুট ডিভাইস থেকে অপ্রত্যাশিত পজিশন ড্রিফ্টের জন্য অডিও টাইমস্ট্যাম্প স্মুদিং উন্নত করুন।
- ব্লুটুথ ডিভাইসের সাথে কানেক্ট করার সময় পজ থেকে আবার চালু করার পরে প্রথম ১০ সেকেন্ডের জন্য A/V সিঙ্ক ভেঙে যাওয়ার সমস্যা সমাধান করুন।
AnalyticsListener.onAudioPositionAdvancing-এ অডিও শুরু হওয়ার সময় রিপোর্ট না করে প্রথম পরিমাপের সময় রিপোর্ট করার সমস্যা সমাধান করুন।- কিছু ডিভাইসে স্টেরিও অডিওতে ফলব্যাক করার পরে মাল্টিচ্যানেল অডিওতে রিকভারি ঠিক করা হয়েছে (#২২৫৮)।
- মিডিয়া শেষ হওয়ার ঠিক আগে অডিও প্লেব্যাক শুরু হলে
- ভিডিও:
- "lenovo" এবং "motorola" ডিভাইসে ডিটাচ করা সারফেসের ওয়ার্কঅ্যারাউন্ড এক্সটেন্ড করুন (#২০৫৯)।
- অডিও স্যাম্পেল ঠিক অনুরোধ করা পজিশনে শুরু না হলে, স্টার্টআপে স্মুথ ভিডিও ফ্রেম রিলিজ উন্নত করুন।
- "realme" ডিভাইসে ডিটাচ করা সারফেস ওয়ার্কঅ্যারাউন্ড এক্সটেন্ড করুন (#২০৫৯)।
- শুধু ডিকোড ইনপুট বাফার সারিবদ্ধ করার সময়
MediaCodec.BUFFER_FLAG_DECODE_ONLYফ্ল্যাগ অন্তর্ভুক্ত করতে এক্সপেরিমেন্টালExoPlayerAPI যোগ করুন। এই ফ্ল্যাগ ডিকোডারকে ডিকোড-অনলি বাফার এড়িয়ে যাওয়ার সিগন্যাল দেবে যার ফলে আরও দ্রুত খোঁজা যাবে।DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag-এর মাধ্যমে এটি চালু করুন। * সফ্টওয়্যার ভিডিও কোডেকগুলির জন্য কোডেক পারফরম্যান্স চেক উন্নত করুন। এর ফলে আরও কিছু ট্র্যাকEXCEEDS_CAPABILITIESহিসেবে চিহ্নিত হতে পারে। - কিছু ডিভাইসে VP9 Widevine প্লেব্যাক সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২৪০৮)।
- টেক্সট:
- MP4 ফাইলে VobSub ট্র্যাকের জন্য সহায়তা যোগ করুন (#2510)।
- সাবটাইটেল সেগমেন্ট প্রথমে লোড না হয়ে পরে লোড হলে এবং তারপরে একাধিক খালি সাবটাইটেল সেগমেন্ট থাকলে, প্লেব্যাক স্টল সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#2517)।
- সাবটাইটেল চালু করার সময় প্রসেস চলাকালীন কিউ দেখানোর জন্য SSA ও SubRip সংক্রান্ত সমস্যার সমাধান করা (#২৩০৯)।
- সাবটাইটেল সংক্রান্ত সমস্যা সহ স্ট্রিম থেকে খালি সাবটাইটেল ট্র্যাক সহ লাইভ স্ট্রিমে পরিবর্তন করার সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে (#২৩২৮)।
- B-ফ্রেম (#২৩৭২) সহ H.262 স্ট্রিম চালানোর সময় CEA-608 সাবটাইটেল অস্পষ্ট দেখানোর সমস্যা সমাধান করা হয়েছে।
- Matroska ফাইলে
CodecId = S_TEXT/SSAসহ SSA সাবটাইটেলের জন্য সহায়তা যোগ করুন। আগেMatroskaExtractorশুধুমাত্রCodecId = S_TEXT/ASS-কে সাপোর্ট করত যা SubStation Alpha সাবটাইটেলের 'উন্নত' (v4+) ভ্যারিয়েন্টকে দেখানোর জন্য তৈরি করা হয়েছে (তবে ExoPlayer-এর পার্সিং লজিক দুটি ভ্যারিয়েন্টের জন্যই একই) (#২৩৮৪)। - SubStation Alpha (SSA) সাবটাইটেল ফাইলে
layerপ্রপার্টির জন্য সহায়তা যোগ করুন যা স্ক্রিনে একই সময়ে একাধিক কিউ দেখানো হলে সেগুলির z-অর্ডার নির্ধারণ করতে ব্যবহার করা হয় (#২১২৪)।
- মেটাডেটা:
- মিডিয়ার সময়সীমা এবং
Timeline-কেMetadataRetriever-এ ফিরিয়ে আনার জন্য সহায়তা যোগ করা হয়েছে এবং এটিকে ইনস্ট্যান্স-ভিত্তিক,AutoCloseableAPI-এ মাইগ্রেট করা হয়েছে।MediaItem-এর জন্য ইনস্ট্যান্স তৈরি করতে নতুনBuilderব্যবহার করুন, তারপর মেটাডেটার জন্যListenableFutureপেতেretrieveTrackGroups(),retrieveTimeline()এবংretrieveDurationUs()কল করুন। আগের স্ট্যাটিক পদ্ধতি এখন অবচিত করা হয়েছে (#২৪৬২)।
- মিডিয়ার সময়সীমা এবং
- ছবি:
BitmapFactoryImageDecoder-এ ডিসপ্লে সাইজে ডিকোড করা বিটম্যাপ সীমিত করুন, যাতে খুব বড় (যেমন, ৫০ মেগাপিক্সেল) ছবি দেখানোর চেষ্টা করার সময়PlayerViewথেকেCanvas: trying to draw too large bitmap.-এর সাথে কোনও অ্যাপ ক্র্যাশ না হয়।DefaultRenderersFactory.getImageDecoderFactory()-এর সিগনেচার পরিবর্তন করেContextপ্যারামিটার ব্যবহার করুন।CompositionPlayer-এ ব্যবহৃত সর্বাধিক বিটম্যাপ আউটপুট সাইজকেTransformer-এ আগে থেকে ব্যবহৃত সাইজের সাথে অ্যালাইন করুন (অর্থাৎ,ExoPlayer-এর মতোCompositionPlayerবিটম্যাপ ডিকোড করার সময় ডিসপ্লে সাইজ বিবেচনা করে না)।
- DRM:
OfflineLicenseHelper.newWidevineInstance-এর নতুন ওভারলোড যোগ করুন যাMediaItem.DrmConfigurationগ্রহণ করে যাতে HTTP অনুরোধ হেডার সঠিকভাবে প্রয়োগ করা যায় (#2169)।
- প্রভাব:
Presentation.createForShortSide(int)যোগ করুন যাPresentationতৈরি করে যা নিশ্চিত করে যে ইনপুট ওরিয়েন্টেশন যাই হোক না কেন, সবচেয়ে ছোট দিকটি সবসময় প্রদত্ত ভ্যালুর সাথে মেলে।
- Muxers:
- ফ্র্যাগমেন্টেড MP4-এ অডিও স্যাম্পেলের জন্য সঠিক স্যাম্পেল ফ্ল্যাগ সেট না হওয়ার সমস্যাটি সমাধান করুন।
writeSampleData()API এখনMediaCodec.BufferInfo-এর পরিবর্তে muxer নির্দিষ্টBufferInfoক্লাস ব্যবহার করে।Muxer.Factory#supportsWritingNegativeTimestampsInEditListযোগ করুন যা ডিফল্ট হিসেবে মিথ্যা।
- IMA এক্সটেনশন:
- একটি বিজ্ঞাপনে লোড সংক্রান্ত সমস্যার কারণে অন্য একটি বিজ্ঞাপন গ্রুপ ভুলবশত বাতিল হয়ে যাওয়ার সমস্যার সমাধান করা হয়েছে।
- VOD উইন্ডো শেষ হওয়ার পরে বিজ্ঞাপন গ্রুপ প্লেব্যাক স্টল করার সমস্যা সমাধান করা হয়েছে।
উইন্ডোর পরে শুরুর সময় সহ বিজ্ঞাপন গ্রুপ আর
MediaPeriodQueue-এ সারিবদ্ধ করা হয় না (#২২১৫)।
- সেশন:
- থার্ড-পার্টি নন-প্রিভিলেজড Media3 কন্ট্রোলার থেকে কানেকশন উপেক্ষা করা হয় এমন সমস্যার সমাধান করুন।
- কোনও লিগ্যাসি
MediaBrowserServiceCompat-এ কাস্টম কমান্ড পাঠানোর সময় উপলভ্য কমান্ডের জন্য চেক করার বিকল্প সরিয়ে দিন। এটি লিগ্যাসি অ্যাপের সাথে কানেক্ট করা লিগ্যাসি কন্ট্রোলার/ব্রাউজারের আচরণের সাথে সামঞ্জস্যপূর্ণ। - প্লেয়ারের প্রথম প্লেব্যাক সংক্রান্ত সমস্যাকে ভুলবশত স্থায়ী কাস্টম ব্যতিক্রম হিসেবে বিবেচনা করার সমস্যাটি সমাধান করুন। এটি অ্যাপ্লিকেশনকে রিকভার করতে দেয় না।
- সেশন দ্বারা ম্যানেজ করা হয় না এমন কিছু কন্ট্রোলার পরিবর্তন
IllegalStateExceptions-এর কারণ হতে পারে, এই সমস্যার সমাধান করুন। - সেশন দ্বারা ম্যানেজ করা হয় না এমন কন্ট্রোলার অ্যাকশন, কন্ট্রোলারকে ভুল অবস্থায় রেখে দিতে পারে, এই সমস্যার সমাধান করুন।
- StrictMode-এর অসুরক্ষিত লঞ্চ সংক্রান্ত নীতি লঙ্ঘন সংক্রান্ত সতর্কতার সমাধান করুন (#২৩৩০)।
- মূল থ্রেড থেকে
setSessionExtrasকল করার সময় হওয়া সমস্যার সমাধান করা হয়েছে, যখন মূল থ্রেড ছাড়া অন্য কোনও অ্যাপ্লিকেশন থ্রেড থেকে প্লেয়ার চালানোর সময়IllegalStateException(#২২৬৫) হয়। - কোনও প্লেয়ার মিডিয়া আইটেম সহ সেট-আপ করা হলে, সেগুলি প্রস্তুত বা প্লে না করেই অটোমেটিক বিজ্ঞপ্তি দেখাবেন না
(#২৪২৩https://github.com/androidx/media/issues/2423). এই আচরণ
MediaSessionService.setShowNotificationForIdlePlayer-এর মাধ্যমে কনফিগার করা যায়। - সব বা বেছে নেওয়া কন্ট্রোলারের জন্য কাস্টম
PlaybackExceptionযোগ করুন। MediaController-এ লাইভ স্ট্রিম খোঁজার সময়IllegalArgumentException-এর কারণে হওয়া সমস্যার সমাধান করুন।- লাইভ স্ট্রিমের জন্য, Android Auto UI-তে (এবং প্ল্যাটফর্ম মিডিয়া সেশন থেকে এই তথ্য ব্যবহার করে অন্যান্য কন্ট্রোলার) পজিশন আর্টিফ্যাক্ট এড়াতে, প্লেব্যাক পজিশন প্রকাশ করা এবং প্ল্যাটফর্ম মিডিয়া কন্ট্রোলারের জন্য বর্তমান আইটেমে খোঁজার ক্ষমতা বন্ধ করুন (#১৭৫৮)।
- একটি সমস্যা সমাধান করা হয়েছে যেখানে
getLibraryRoot-এ নাল পাস করার সময়MediaBrowserপুরনোMediaBrowserServiceCompat-এর সাথে কানেক্ট করা থাকলেNullPointerExceptionতৈরি হয়। - কাস্টম অ্যাকশন, সার্চ ফলাফল বা getItem অনুরোধ পাঠানোর সময়
ClassNotFoundException-এর সাথে লিগ্যাসি সেশন অ্যাপ ক্র্যাশ করার সমস্যা সমাধান করুন। - একটি সমস্যার সমাধান করা হয়েছে যেখানে
MediaItem.LocalConfiguration.uriপ্ল্যাটফর্ম সেশনেরMediaMetadata-এ শেয়ার করা হয়েছিল। কন্ট্রোলারকে মিডিয়ার জন্য আবার অনুরোধ করার অনুমতি দিতে, ইচ্ছাকৃতভাবে URI শেয়ার করতে, পরিবর্তেMediaItem.RequestMetadata.mediaUriসেট করুন।
- UI:
LazyColumn-এর মতো আবার ব্যবহার করা যায় এমন কম্পোনেন্টের মধ্যেPlayerSurfaceসঠিকভাবে কাজ না করার সমস্যা সমাধান করা হয়েছে (#২৪৯৩)।- Compose-এর একটি বাগ ঠিক করুন যার ফলে প্রাথমিক বোতামের স্ট্যাটাস সেট করা এবং স্ট্যাটাসে পরিবর্তন (যেমন, আইকনের আকার বা চালু করা) লক্ষ্য করার মধ্যে একটি ব্যবধান তৈরি হয়। পর্যবেক্ষণ সময়সীমার বাইরে প্লেয়ারে করা যেকোনও পরিবর্তন এখন তুলে নেওয়া হয়েছে (#২৩১৩)।
SeekBackButtonStateওSeekForwardButtonState-এর জন্যmedia3-ui-composeমডিউলে স্টেট হোল্ডার ও কম্পোজেবল যোগ করুন।PlayerControlView-এ ExoPlayer-এর স্ক্রাবিং মোডের জন্য সহায়তা যোগ করুন। চালু করা হলে, ব্যবহারকারী স্ক্রাবার বার টেনে নিয়ে যাওয়া শুরু করলে এটি প্লেয়ারকে স্ক্রাবিং মোডে নিয়ে যায়, প্রতিটি মুভমেন্টের জন্যplayer.seekToকল ইস্যু করে এবং স্ক্রিন থেকে টাচ তুলে নেওয়া হলে স্ক্রাবিং মোড থেকে বেরিয়ে আসে। এই ইন্টিগ্রেশন XML-এtime_bar_scrubbing_enabled = trueঅথবা Java/Kotlin থেকেsetTimeBarScrubbingEnabled(boolean)পদ্ধতির মাধ্যমে চালু করা যেতে পারে।PlayerSurface-কে নালেবলPlayerআর্গুমেন্ট গ্রহণ করতে দিন।
- ডাউনলোড:
- প্রোগ্রেসিভ স্ট্রিমের জন্য আংশিক ডাউনলোড করার সুবিধা যোগ করুন। অ্যাপ
DownloadHelper-এর মাধ্যমে প্রোগ্রেসিভ স্ট্রিম প্রস্তুত করতে পারে এবং হেল্পারের কাছেDownloadRequest-এর জন্য অনুরোধ করতে পারে। এই অনুরোধে সময়-ভিত্তিক মিডিয়া শুরু ও শেষ হওয়ার পজিশন উল্লেখ করা থাকে, যা ডাউনলোডের মধ্যে কভার করা উচিত। ফেরত আসাDownloadRequest-এ সমাধান করা বাইট রেঞ্জ থাকে, যার সাহায্যে একটিProgressiveDownloaderতৈরি করা যেতে পারে এবং সেই অনুযায়ী কন্টেন্ট ডাউনলোড করা যেতে পারে। DownloadHelper.Factoryযোগ করুন যার সাথে স্ট্যাটিকDownloadHelper.forMediaItem()পদ্ধতি পরিবর্তন করা হয়েছে।SegmentDownloaderটি প্রয়োগের জন্যFactoryযোগ করুন।- অ্যাডাপ্টিভ স্ট্রিমের জন্য আংশিক ডাউনলোড সংক্রান্ত সহায়তা যোগ করুন। অ্যাপ
DownloadHelper-এর সাহায্যে অ্যাডাপ্টিভ স্ট্রিম তৈরি করতে পারে এবং হেল্পারের কাছেDownloadRequest-এর জন্য অনুরোধ করতে পারে। এই অনুরোধে সময়-ভিত্তিক মিডিয়া শুরু ও শেষ হওয়ার পজিশন উল্লেখ করা থাকে যা ডাউনলোড করার সময় কভার করতে হবে। ফেরত আসাDownloadRequestসমাধান করা সময়সীমা বহন করে, যার সাহায্যে একটি নির্দিষ্টSegmentDownloaderতৈরি করা যেতে পারে এবং সেই অনুযায়ী কন্টেন্ট ডাউনলোড করা যেতে পারে।
- প্রোগ্রেসিভ স্ট্রিমের জন্য আংশিক ডাউনলোড করার সুবিধা যোগ করুন। অ্যাপ
- Cronet এক্সটেনশন:
- অটোমেটিক কুকি ম্যানেজমেন্ট যোগ করুন (#5975)।
- HLS এক্সটেনশন:
- বাফারে কোনও চাঙ্ক উপলভ্য না থাকলে
বাফারের মধ্যে
HlsSampleStreamWrapperসিক করার চেষ্টা সংক্রান্ত সমস্যার সমাধান করা হয়েছে #২৫৯৮। - লো-লেটেন্সি পার্ট লোড করার পরে ট্র্যাক বেছে নেওয়ার পরিবর্তন এবং প্রিলোড হিন্টের কারণে প্লেব্যাক আটকে যাওয়া বা ফ্রিজ হয়ে যাওয়ার মতো সমস্যা সমাধান করা হয়েছে (#২২৯৯)।
- সার্ভার
CAN-BLOCK-RELOAD=YES-কে সম্মান না করলে, টার্গেট করা সময়ের অর্ধেক সময় অপেক্ষা করে অতিরিক্ত রিলোড করা আটকান (#২৩১৭)। - মিড-রোল শুরু হওয়ার আগে ইন্টারস্টিশিয়াল স্ট্রিম শুরু করার সময় প্লেব্যাক থেমে যাওয়া এবং ভুল বিজ্ঞাপনের জন্য অ্যাসেট তালিকার রেজোলিউশন চেষ্টা করার সমস্যা সমাধান করা হয়েছে (#২৫৫৮)।
- কোট করা স্ট্রিং অ্যাট্রিবিউট ভ্যালুতে
\f(ফর্ম ফিড) গ্রহণ করার জন্য প্লেলিস্ট পার্সিং ঠিক করুন (#২৪২০)। - একই আইডি দিয়ে ইন্টারস্টিশিয়াল আপডেট করার সুবিধা (#২৪২৭)।
- লাইভ স্ট্রিম লোড করার জন্য সেগমেন্ট শেষ হয়ে গেলে, প্লেলিস্ট লোড করার সময় হওয়া সমস্যা কখনও কখনও প্রোপাগেট না হওয়ার সমস্যার সমাধান করা হয়েছে (#2401https://github.com/androidx/media/issues/2401)।
- NAME ট্যাগ অনুযায়ী গ্রুপ সাবটাইটেল রেন্ডিশন, অডিও রেন্ডিশন যেভাবে গ্রুপ করা হয় তার মতো (#১৬৬৬)।
- X-ASSET-LIST এবং
HlsInterstitialsAdsLoaderসহ লাইভ স্ট্রিম সাপোর্ট করে।
- বাফারে কোনও চাঙ্ক উপলভ্য না থাকলে
বাফারের মধ্যে
- DASH এক্সটেনশন:
- ট্রিক-প্লে অ্যাডাপ্টেশন সেট তার মূল অ্যাডাপ্টেশন সেটের সাথে মার্জ হয়ে গিয়ে ভুল
TrackGroupতৈরি হওয়ার সমস্যা সমাধান করা হয়েছে (#২১৪৮)। - DASH পিরিয়ডের সময়সীমা কমানোর সময় ব্যতিক্রমী পরিস্থিতি তৈরি হওয়ার সমস্যা সমাধান করা হয়েছে। রেন্ডারিং পাইপলাইন নতুন সময়সীমার বাইরে থাকা স্যাম্পেল আগে থেকেই পড়ে থাকলে এই সমস্যা হয় (#২৪৪০)।
- CMCD কোয়েরি প্যারামিটার ব্যবহার করার সময় রিডাইরেক্ট অনুসরণ না করার সমস্যা সমাধান করা হয়েছে (#২৪৭৫)।
- ট্রিক-প্লে অ্যাডাপ্টেশন সেট তার মূল অ্যাডাপ্টেশন সেটের সাথে মার্জ হয়ে গিয়ে ভুল
- RTSP এক্সটেনশন:
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- যেখানে
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeঅডিও ডিকোডার এক্সটেনশনের জন্য কোনও প্রভাব নেই, সেই সমস্যার সমাধান করা হয়েছে (#2258)।
- যেখানে
- কাস্ট এক্সটেনশন:
- টেস্ট ইউটিলিটি:
- নির্দিষ্ট পজিশনে না পৌঁছানো পর্যন্ত প্লেয়ারকে এগিয়ে নিয়ে যেতে
TestPlayerRunHelper-এadvance(player).untilPositionAtLeastওuntilMediaItemIndexযোগ করুন। বেশিরভাগ ক্ষেত্রে, এই পদ্ধতিগুলি আগে থেকে থাকাuntilPositionএবংuntilStartOfMediaItemপদ্ধতির চেয়ে আরও বেশি নির্ভরযোগ্য। - অন্য টেস্টে আবার ব্যবহার করার জন্য
FakeDownloader-কেtest-utils-robolectricমডিউলে সরান। transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)এবংtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)সরানো হয়েছে। পরিবর্তে শ্যাডো এনকোডার ও ডিকোডার কনফিগার করতেShadowMediaCodecConfigব্যবহার করুন।ShadowMediaCodecConfig-এর মাধ্যমে রিপোর্ট করা কোডেক নামে "exotest" প্রিফিক্সকে "media3" দিয়ে পরিবর্তন করা হয়েছে।
- নির্দিষ্ট পজিশনে না পৌঁছানো পর্যন্ত প্লেয়ারকে এগিয়ে নিয়ে যেতে
- বাতিল করা চিহ্ন সরান:
- বাতিল করা
SegmentDownloaderকনস্ট্রাক্টরSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)এবং এর সাবক্লাসে সংশ্লিষ্ট কনস্ট্রাক্টরDashDownloader,HlsDownloaderএবংSsDownloaderসরানো হয়েছে। - অবচিত
Player.hasNext(),Player.hasNextWindow()সরানো হয়েছে। পরিবর্তেPlayer.hasNextMediaItem()ব্যবহার করুন। - পুরনো হয়ে যাওয়া
Player.next()সরানো হয়েছে। পরিবর্তেPlayer.seekToNextMediaItem()ব্যবহার করুন। - পুরনো হয়ে যাওয়া
Player.seekToPreviousWindow()সরানো হয়েছে। পরিবর্তেPlayer.seekToPreviousMediaItem()ব্যবহার করুন। - পুরনো হয়ে যাওয়া
Player.seekToNextWindow()সরানো হয়েছে। পরিবর্তেPlayer.seekToNextMediaItem()ব্যবহার করুন। exoplayerমডিউলে বন্ধ হয়ে যাওয়াBaseAudioProcessorসরানো হয়েছে।commonমডিউলের অধীনেBaseAudioProcessorব্যবহার করুন।- বন্ধ হয়ে যাওয়া
MediaCodecVideoRendererকনস্ট্রাক্টরMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)সরিয়ে দিন।
- বাতিল করা
ভার্সন 1.8.0-rc02
২৪ জুলাই, ২০২৫
1.8.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.8.0-rc01
১৬ জুলাই, ২০২৫
1.8.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.8.0-beta01
২ জুলাই, ২০২৫
1.8.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.8.0-alpha01
১৯ মে, ২০২৫
1.8.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.7.0
ভার্সন 1.7.1
১৬ মে, ২০২৫
এই রিলিজে 1.6.1-এর মতো একই কোড আছে এবং এটি 1.7.0-এর চেয়ে 'নতুন' রিলিজ হিসেবে দেখানোর জন্য রিলিজ করা হচ্ছে, যেটি একটি আলফা রিলিজ ছিল এবং ভুলবশত স্টেবল হিসেবে ট্যাগ করা হয়েছিল (নিচে দেখুন)।
ভার্সন 1.7.0
১৬ মে, ২০২৫
এই রিলিজটি 1.7.0-alpha01 হওয়া উচিত ছিল, কিন্তু ভুলবশত maven.google.com-এ
1.7.0 (অর্থাৎ, স্টেবল) হিসেবে ট্যাগ করা হয়েছে। এটি ব্যবহার করবেন না। 1.6.1 ভার্সন ব্যবহার করা চালিয়ে যান অথবা 1.7.1 ভার্সনে আপগ্রেড করুন (যার কোড 1.6.1 ভার্সনের মতোই)।
ভার্সন 1.6.0
১.৬.১
১৪ এপ্রিল, ২০২৫
androidx.media3:media3-*:1.6.1 রিলিজ করা হয়েছে। 1.6.1 ভার্সনে এইসব
কমিট আছে।
- কমন লাইব্রেরি:
- নতুন
pitchভ্যালু সহPlaybackParametersসহজে কপি করার জন্যPlaybackParameters.withPitch(float)পদ্ধতি যোগ করুন (#২২৫৭)।
- নতুন
- ExoPlayer:
- পরবর্তী মিডিয়া আইটেম ইনিশিয়ালাইজ করার সময় রিকভার করা যায় এমন রেন্ডারার সমস্যার কারণে মিডিয়া আইটেম ট্রানজিশন ব্যর্থ হওয়ার সমস্যা সমাধান করা হয়েছে (#২২২৯)।
ProgressiveMediaPeriod-এরIllegalStateException-কেPreloadMediaSource-এর মতো করেgetBufferedDurationUs()-কে কল করার চেষ্টা করার সময় প্রস্তুত হওয়ার আগেই (#2315) যে সমস্যা হয় তা সমাধান করুন।- DASH, HLS ও SmoothStreaming-এর (#২২৫৩) জন্য ম্যানিফেস্ট অনুরোধে
CmcdDataপাঠানোর সমস্যা সমাধান করা হয়েছে। - বিজ্ঞাপন গ্রুপ সরিয়ে দেওয়ার পরে
AdPlaybackState.withAdDurationsUs(long[][])ব্যবহার করা যাবে কিনা তা নিশ্চিত করুন। ব্যবহারকারীকে এখনও সরিয়ে দেওয়া বিজ্ঞাপন গ্রুপের জন্য সময়ের ব্যাপ্তির অ্যারে পাস করতে হবে যা খালি বা শূন্য হতে পারে (#২২৬৭)।
- এক্সট্র্যাক্টর:
- MP4:
tkhdবক্স থেকেalternate_groupপার্স করুন এবং প্রতিটি ট্র্যাকেরFormat.metadata-এMp4AlternateGroupDataএন্ট্রি হিসেবে এটি দেখান (#২২৪২)।
- MP4:
- অডিও:
- অফলোড সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ছোট কন্টেন্টের প্লেলিস্ট চালানোর সময় পজিশন আটকে যেতে পারে (#১৯২০)।
- সেশন:
- প্ল্যাটফর্ম
MediaSessionকলব্যাকের জন্য অ্যাগ্রিগেশন টাইমআউট ৫০০ থেকে কমিয়ে ১০০ মিলিসেকেন্ড করুন এবং অ্যাপকে এই ভ্যালু কনফিগার করার অনুমতি দিতে একটি এক্সপেরিমেন্টাল সেটার যোগ করুন। - ব্যবহারকারী বিজ্ঞপ্তি বাতিল করার পরেও সেটি আবার দেখা যাওয়ার সমস্যা সমাধান করা (#২৩০২)।
- র্যাপ করা প্লেয়ার খালি থাকলে সেশন যাতে সিঙ্গল-আইটেম টাইমলাইন দেখায় সেই সমস্যার সমাধান করুন। এটি তখন ঘটে যখন র্যাপ করা প্লেয়ারে
COMMAND_GET_TIMELINEউপলভ্য থাকে না, কিন্তুCOMMAND_GET_CURRENT_MEDIA_ITEMউপলভ্য থাকে এবং র্যাপ করা প্লেয়ার খালি থাকে (#২৩২০)। - এমন একটি সমস্যার সমাধান করা হয়েছে যেখানে
MediaSessionService.setMediaNotificationProviderকল করা পরিষেবার সাথে অন্যান্য ইন্টার্যাকশনের পরেsetForegroundServiceTimeoutMs(#২৩০৫) নীরবে উপেক্ষা করা হয়।
- প্ল্যাটফর্ম
- UI:
PlayerSurface-কেExoPlayer.setVideoEffectsওCompositionPlayer-এর সাথে কাজ করার অনুমতি দিন।PlayerSurface-কে নতুনPlayer-এর সাথে রিকম্পোজ করা যাচ্ছে না, এই সমস্যার সমাধান করুন।
- HLS এক্সটেনশন:
- HLS মিডিয়ার জন্য
CmcdData-এ চাঙ্ক ডিউরেশন সেট না হওয়ার সমস্যা সমাধান করা হয়েছে, যার ফলে এনক্রিপ্ট করা মিডিয়া সেগমেন্ট প্রসেস করার সময় অ্যাসারশন সংক্রান্ত সমস্যা হচ্ছিল (#২৩১২)।
- HLS মিডিয়ার জন্য
- RTSP এক্সটেনশন:
- TCP ব্যবহার করার জন্য RTSP সেশন কনফিগার করার উপায় হিসেবে RTSPT স্কিম সহ URI-এর জন্য সহায়তা যোগ করুন (#১৪৮৪)।
- কাস্ট এক্সটেনশন:
- প্লেলিস্ট মেটাডেটার জন্য সহায়তা যোগ করুন (#২২৩৫)।
১.৬.০
২৬ মার্চ, ২০২৫
androidx.media3:media3-*:1.6.0 রিলিজ করা হয়েছে। ভার্সন 1.6.0-এ এইসব
কমিট আছে।
- কমন লাইব্রেরি:
androidx.media-এ সমতুল্য ক্লাস পরিবর্তন করতেAudioManagerCompatএবংAudioFocusRequestCompatযোগ করুন।- Kotlin-কে 1.9.20 থেকে 2.0.20-এ আপগ্রেড করুন এবং Compose Compiler Gradle প্লাগ-ইন ব্যবহার করুন। KotlinX Coroutines লাইব্রেরি 1.8.1 থেকে 1.9.0-এ আপগ্রেড করুন।
Format.toBundle(boolean excludeMetadata)পদ্ধতি সরিয়ে দিন, পরিবর্তেFormat.toBundle()ব্যবহার করুন।SimpleBasePlayer-এ বাগ ঠিক করুন যেখানেnullMediaMetadata-এর সাথেsetPlaylist-এর পরেState-এ নতুনcurrentMediaItemIndexসেট করলে মেটাডেটা আবার মূল্যায়ন করে না (#১৯৪০)।- অন্যান্য ক্লাসে আপডেট ম্যানেজ করা আরও সহজ করতে
SimpleBasePlayer.Stateঅ্যাক্সেস সুরক্ষিত থেকে সর্বজনীন করুন (#2128)।
- ExoPlayer:
MediaExtractorCompatযোগ করুন, এটি একটি নতুন ক্লাস যা প্ল্যাটফর্মMediaExtractor-এর সমতুল্য ফিচার প্রদান করে।MediaCodecVideoRendererব্যবহার করে প্লেব্যাকের জন্য এক্সপেরিমেন্টাল 'ExoPlayer' প্রি-ওয়ার্মিং সাপোর্ট যোগ করুন। আপনিexperimentalSetEnableMediaCodecVideoRendererPrewarming-এর মাধ্যমেDefaultRenderersFactoryকনফিগার করতে পারবেন যাতেExoPlayer-কে সেকেন্ডারিMediaCodecVideoRendererপ্রদান করা যায়। চালু করা থাকলে, মিডিয়া আইটেম ট্রানজিশন লেটেন্সি কমাতে প্লেব্যাক চলাকালীনExoPlayerপরপর মিডিয়া আইটেমের ভিডিও প্রি-প্রসেস করে।DefaultLoadControl-এbufferForPlaybackMsএবংbufferForPlaybackAfterRebufferMs-এর ডিফল্ট ভ্যালু কমিয়ে যথাক্রমে ১০০০ এবং ২০০০ মিলি সেকেন্ড করুন।DeviceInfoএবং ডিভাইসের ভলিউম অ্যাসিঙ্ক্রোনাসভাবে ইনিশিয়ালাইজ করুন (setDeviceVolumeControlEnabledব্যবহার করে চালু করা থাকলে)।ExoPlayer.Builder.build()-এর পরে এই ভ্যালুগুলি তাত্ক্ষণিকভাবে উপলভ্য হয় না এবংPlayer.ListeneronDeviceInfoChangedএবংonDeviceVolumeChanged-এর মাধ্যমে পরিবর্তনগুলি জানায়।- প্লেয়ার তৈরি করার পরে প্রাথমিক অডিও সেশন আইডি আর অবিলম্বে উপলভ্য হয় না। প্রয়োজন হলে,
প্রাথমিক আপডেট শুনতে আপনি
AnalyticsListener.onAudioSessionIdChangedব্যবহার করতে পারবেন। - ভিডিও ট্র্যাক বেছে নেওয়ার সময় ভাষা বিবেচনা করুন। ডিফল্ট হিসেবে, এমন একটি 'প্রধান' ভিডিও ট্র্যাক বেছে নিন যা বেছে নেওয়া অডিও ট্র্যাকের ভাষার সাথে মেলে, যদি উপলভ্য থাকে। ভিডিওর ভাষা সংক্রান্ত স্পষ্ট পছন্দ
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)-এর মাধ্যমে প্রকাশ করা যেতে পারে। DefaultTrackSelector.selectVideoTrack()পদ্ধতিতেselectedAudioLanguageপ্যারামিটার যোগ করুন।MediaSourceEventListener.onLoadStarted-এretryCountপ্যারামিটার এবং সংশ্লিষ্টMediaSourceEventListener.EventDispatcherপদ্ধতি যোগ করুন।- প্লেলিস্ট আইটেম বা মাল্টি-পিরিয়ড DASH স্ট্রিমে পিরিয়ডের সময়সীমা আসল কন্টেন্টের সাথে না মিললে আইটেমের শেষে ফ্রেম ফ্রিজ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#১৬৯৮)।
BasePreloadManager.Listener-কে টপ-লেভেলPreloadManagerListener-এ সরান।- প্রি-ওয়ার্মিংয়ের জন্য সেকেন্ডারি রেন্ডারার প্রদান করতে
RenderersFactory.createSecondaryRendererপ্রয়োগ করা যেতে পারে। প্রি-ওয়ার্মিংয়ের মাধ্যমে প্লেব্যাকের সময় মিডিয়া আইটেম দ্রুত ট্রানজিশন করা যায়। - অ্যাডাপ্টিভ স্ট্রিমিং ফর্ম্যাট DASH, HLS ও SmoothStreaming-এ ম্যানিফেস্ট অনুরোধের জন্য
CmcdDataপাঠানো চালু করুন (#১৯৫১)। MediaCodecRenderer.onReadyToInitializeCodec-এ ইনিশিয়ালাইজ করা হবে এমন কোডেকেরMediaCodecInfoপ্রদান করুন (#১৯৬৩)।- বিজ্ঞাপন গ্রুপ যোগ করে
AdPlaybackStates-এর সংখ্যা বাড়াতেAdsMediaSourceপরিবর্তন করুন। ভুল পরিবর্তন শনাক্ত করা হয়েছে এবং একটি ব্যতিক্রম থ্রো করা হয়েছে। - মিড-রোল বিজ্ঞাপনের পরে কন্টেন্ট মিডিয়াতে ট্রানজিশন করার সময় অতিরিক্ত ডিকোড-অনলি ফ্রেমগুলি দ্রুত পরপর প্রদর্শিত হতে পারে এমন সমস্যার সমাধান করুন।
DefaultRenderersFactory-কে দুটিMetadataRendererইনস্ট্যান্স যোগ করতে দিন যাতে অ্যাপগুলি ডিফল্টভাবে দুটি ভিন্ন মেটাডেটা স্কিম গ্রহণ করতে পারে।- প্লেব্যাক পজ করা থাকলে, চাঙ্কের চলমান লোড বাতিল করা উচিত কিনা তা পুনরায় মূল্যায়ন করুন (#১৭৮৫)।
ClippingMediaSource-এ বিকল্প যোগ করুন যাতে সিক করা যায় না এমন মিডিয়াতে ক্লিপিং করার অনুমতি দেওয়া যায়।- প্রি-ওয়ার্মিংয়ের মাধ্যমে খোঁজার সময় পরবর্তী মিডিয়া আইটেম ট্রানজিশন ব্লক হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।
ExoPlayer.isLoading()-এরSTATE_IDLEবাSTATE_ENDED-এ ট্রানজিশন হয়ে গেলেওtrue-এ থেকে যাওয়ার সমস্যার সমাধান করা হয়েছে (#2133)।LoadControl.Parameter-এlastRebufferRealtimeMsযোগ করুন (#২১১৩)।
- ট্রান্সফর্মার:
- বিকল্প ব্যাকওয়ার্ড কম্প্যাটিবল ফর্ম্যাটে ট্রান্সমিউক্সিংয়ের জন্য সহায়তা যোগ করুন।
- Dolby Vision (প্রোফাইল ৮) ফর্ম্যাট ট্রান্সকোড ও ট্রান্সমিউক্স করার জন্য সহায়তা যোগ করুন।
Formatব্যবহার করতেVideoFrameProcessor.registerInputStreamএবংVideoFrameProcessor.Listener.onInputStreamRegistered-এর প্যারামিটার আপডেট করুন।DefaultEncoderFactoryব্যবহার করার সময় HDR স্ট্যাটিক মেটাডেটা জেনারেট করুন।MediaMetricsManagerব্যবহার করে Android প্ল্যাটফর্ম ডায়াগনস্টিকসের জন্য সহায়তা চালু করুন। ট্রান্সফর্মার প্ল্যাটফর্মে এডিটিং ইভেন্ট এবং পারফর্ম্যান্স ডেটা ফরওয়ার্ড করে, যা ডিভাইসে সিস্টেম পারফর্ম্যান্স এবং ডিবাগিং তথ্য প্রদান করতে সাহায্য করে। ব্যবহার ও ডায়াগনস্টিক ডেটা শেয়ার করার বিকল্প চালু থাকলে, ডিভাইসের ব্যবহারকারীর থেকে Google এই ডেটাও সংগ্রহ করতে পারে।Transformer.Builder.setUsePlatformDiagnostics(false)-এর সাথে ট্রান্সফরমারের জন্য প্ল্যাটফর্ম ডায়াগনস্টিকসে কন্ট্রিবিউট করা থেকে অ্যাপ বেরিয়ে আসতে পারে।InAppMuxer-কেInAppMp4MuxerওInAppFragmentedMp4Muxer-এ স্প্লিট করুন। আপনিInAppMp4Muxerব্যবহার করে ফ্র্যাগমেন্টেড নয় এমন MP4 ফাইল তৈরি করেন, যেখানেInAppFragmentedMp4Muxerব্যবহার করে ফ্র্যাগমেন্টেড MP4 ফাইল তৈরি করা হয়।media3-muxerথেকেmedia3-transformer-এMuxerইন্টারফেস সরান।MediaProjectionAssetLoaderযোগ করুন, যা স্ক্রিন রেকর্ডিংয়ের জন্যMediaProjectionথেকে মিডিয়া প্রদান করে এবং ট্রান্সফর্মার ডেমো অ্যাপে স্ক্রিন রেকর্ডিংয়ের জন্য সহায়তা যোগ করুন।Codecইন্টারফেসে#getInputFormat()যোগ করুন।- সম্ভব হলে
DefaultVideoFrameProcessorএবংDefaultVideoCompositor-এGlObjectsProviderরিলিজ করার দায়িত্ব কলারের উপর ছেড়ে দিন।
- এক্সট্র্যাক্টর:
- AVI: কনস্ট্যান্ট বিটরেট কম্প্রেসড অডিও সহ ফাইলের হ্যান্ডলিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে স্ট্রিম হেডারে চাঙ্কের সংখ্যার পরিবর্তে বাইটের সংখ্যা স্টোর করা হয়।
- NAL ইউনিটের হ্যান্ডলিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে দৈর্ঘ্য ১ বা ২ বাইটে (৪ বাইটের পরিবর্তে) প্রকাশ করা হয়েছে।
- MP4 এডিট লিস্টে
ArrayIndexOutOfBoundsExceptionসংক্রান্ত সমস্যার সমাধান করুন, যখন এডিট লিস্ট সিঙ্ক না হওয়া ফ্রেম থেকে শুরু হয় এবং তার আগে কোনও সিঙ্ক ফ্রেম থাকে না (#২০৬২)। - কিছু ডিভাইসে TS স্ট্রিম আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে (#২০৬৯)।
- FLAC: ৩২-বিট FLAC ফাইলের জন্য সহায়তা যোগ করুন। আগে এগুলি
IllegalStateException: Playback stuck buffering and not loading-এর সাথে চালানো যেত না (#2197)।
- অডিও:
- প্লেব্যাক আবার চালু হলে
onAudioPositionAdvancingকল করার জন্য ঠিক করুন (আগে প্লেব্যাক পজ করা হলে এটি কল করা হত)। SpeedChangingAudioProcessorডিফল্ট প্যারামিটার দিয়ে কনফিগার করা থাকলেSonicAudioProcessorবাইপাস করবেন না।Sonic#getOutputSize()-এ আন্ডারফ্লো সংক্রান্ত সমস্যার সমাধান করুন, যার ফলেDefaultAudioSinkস্টল হতে পারে।MediaCodecAudioRenderer.getDurationToProgressUs()এবংDecoderAudioRenderer.getDurationToProgressUs()ঠিক করুন যাতে প্রদান করা সময়সীমা সঠিকভাবে রিসেট করা যায়।androidx.media3.common.audio.SonicAudioProcessor-কে ফাইনাল করুন।ChannelMappingAudioProcessorএবংTrimmingAudioProcessor-এ ফ্লোট PCM-এর জন্য সহায়তা যোগ করুন।
- প্লেব্যাক আবার চালু হলে
- ভিডিও:
MediaCodecVideoRenderer.shouldUsePlaceholderSurface-কে সুরক্ষিত হিসেবে পরিবর্তন করুন যাতে অ্যাপ্লিকেশনগুলি ওভাররাইড করে প্লেসহোল্ডার সারফেসের ব্যবহার ব্লক করতে পারে (#১৯০৫)।- স্পিড বাড়াতে এক্সপেরিমেন্টাল
ExoPlayerAV1 স্যাম্পেল ডিপেনডেন্সি পার্সিং যোগ করুন। নতুনDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI-এর মাধ্যমে এটি চালু করুন। - নির্ভরশীল নয় এমন
MediaCodecVideoRendererডিকোডার ইনপুট বাফার ড্রপ করতে পরীক্ষামূলকExoPlayerAPI যোগ করুন।DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs-এর মাধ্যমে এটি চালু করুন। * সারফেস ছাড়া প্লেয়ার অবিলম্বে রেডি হয়ে যাওয়া এবং বাকি থাকা ফ্রেম খুব ধীরে ডিকোড করার সমস্যা সমাধান করা হয়েছে (#১৯৭৩)। - স্ক্রিন ফ্লিকারিং এড়াতে ডিটাচ করা সারফেস মোড থেকে Xiaomi এবং OPPO ডিভাইস বাদ দিন (#২০৫৯)।
- টেক্সট:
- VobSub সাবটাইটেলের জন্য সহায়তা যোগ করা হয়েছে (#৮২৬০)।
MediaItem.Builder.setSubtitleConfigurations-এর সাথে কনফিগার করা সব সাবটাইটেল ফাইল আগ্রহের সাথে লোড করা বন্ধ করুন এবং পরিবর্তে ট্র্যাক নির্বাচনের মাধ্যমে বেছে নেওয়া হলে শুধুমাত্র একটি লোড করুন (#1721)।- TTML:
style(#২৯৫৩) ব্যবহার করেtts:originএবংtts:extentরেফারেন্স করার জন্য সহায়তা যোগ করুন। - WebVTT এবং SubRip টাইমস্ট্যাম্প ঠিক ৩টি দশমিক স্থানে সীমাবদ্ধ করুন। আগে আমরা দশমিকের পরে যেকোনও সংখ্যক সংখ্যা ভুলভাবে পার্স করতাম, কিন্তু সবসময় ধরে নিতাম যে ভ্যালুটি মিলিসেকেন্ডে আছে, যার ফলে ভুল টাইমস্ট্যাম্প (#১৯৯৭) তৈরি হত।
- প্লেলিস্টে CEA-608 বা CEA-708 ক্যাপশন সহ ক্লিপ করা আইটেম থাকলে, প্লেব্যাক হ্যাং হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- SSA ফাইলে শূন্য সময়সীমা (শুরু ও শেষের সময় একই) সহ কিউ থাকলে
IllegalStateExceptionসংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২০৫২)। - সাবটাইটেল পার্সিং সংক্রান্ত সমস্যা দমন (এবং লগ) করুন যখন সাবটাইটেল অডিও এবং ভিডিওর মতো একই কন্টেনারে মাক্স করা হয় (#২০৫২)।
- CR লাইন এন্ডিং (#২১৬৭) ব্যবহার করে WebVTT ফাইলে মাল্টি-বাইট UTF-৮ ক্যারেক্টার ম্যানেজ করার সমস্যা সমাধান করা হয়েছে।
- DRM:
- API < 27 ডিভাইসে ClearKey কন্টেন্ট চালানোর সময়
MediaCodec$CryptoException: Operation not supported in this configurationসমস্যার সমাধান করা হয়েছে (#1732)।
- API < 27 ডিভাইসে ClearKey কন্টেন্ট চালানোর সময়
- প্রভাব:
OverlaySettings-এর কার্যকারিতাStaticOverlaySettings-এ সরানো হয়েছে। ডায়নামিক ওভারলে সেটিংসের অনুমতি দিতেOverlaySettings-এর সাবক্লাস তৈরি করা যেতে পারে।
- Muxers:
- খুব দীর্ঘ সম্পূর্ণ কোয়ালিফায়েড নাম এড়াতে
Muxerইন্টারফেস থেকেMuxerExceptionসরানো হয়েছে। Mp4Muxer.BuilderএবংFragmentedMp4Muxer.Builder, দুটিতেইsetSampleCopyEnabled()পদ্ধতির নাম পরিবর্তন করেsetSampleCopyingEnabled()করা হয়েছে।Mp4Muxer.addTrack()এবংFragmentedMp4Muxer.addTrack()এখনTrackToken-এর পরিবর্তেintট্র্যাক আইডি রিটার্ন করে।Mp4MuxerএবংFragmentedMp4MuxerআরMuxerইন্টারফেস প্রয়োগ করে না।- ডিফল্ট হিসেবে
Mp4Muxerস্যাম্পেল ব্যাচিং ও কপি করার সুবিধা বন্ধ করুন। FragmentedMp4Muxer-এ একটি সমস্যার সমাধান করুন যা শুধুমাত্র অডিও ট্র্যাক লেখার সময় অনেক ফ্র্যাগমেন্ট তৈরি করে।
- খুব দীর্ঘ সম্পূর্ণ কোয়ালিফায়েড নাম এড়াতে
- সেশন:
- প্লেব্যাক পজ, বন্ধ বা ব্যর্থ হলে অতিরিক্ত ১০ মিনিটের জন্য ফোরগ্রাউন্ড পরিষেবার স্ট্যাটাস
রাখুন। এর ফলে ব্যবহারকারীরা বিভিন্ন ডিভাইসে ফোরগ্রাউন্ড সার্ভিস রেসট্রিকশনের ঝুঁকি ছাড়াই এই টাইমআউটের মধ্যে প্লেব্যাক আবার শুরু করতে পারবেন। মনে রাখবেন যে
onTaskRemovedওভাররাইড করার সময়stopSelf()-এর আগে ফোরগ্রাউন্ড সার্ভিস বন্ধ করতে শুধুplayer.pause()কল করা আর ব্যবহার করা যাবে না, পরিবর্তেMediaSessionService.pauseAllPlayersAndStopSelf()ব্যবহার করুন। - প্লেব্যাক বন্ধ হয়ে গেলে বা কোনও সমস্যা হলে বিজ্ঞপ্তি দেখানো চালিয়ে যান। প্লেলিস্ট খালি করা হলে বা প্লেয়ার রিলিজ করা হলে তবেই বিজ্ঞপ্তিটি সরানো হয়।
- Android প্ল্যাটফর্মের MediaSession অ্যাকশন ACTION_PLAY এবং ACTION_PAUSE-এর হ্যান্ডলিং উন্নত করুন যাতে উপলভ্য কমান্ড অনুযায়ী শুধুমাত্র একটি সেট করা যায় এবং শুধুমাত্র একটি সেট করা থাকলেও তা গ্রহণ করা হয়।
Context-কেMediaButtonReceiver.shouldStartForegroundService-এর প্যারামিটার হিসেবে যোগ করুন (#১৮৮৭)।- পুরনো সেশনের সাথে কানেক্ট করা
MediaController-এPlayerমেথড কল করার সময় বাকি থাকা আপডেট থেকে পরিবর্তন ড্রপ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে। MediaSession.setSessionActivity(PendingIntent)-কে নাল গ্রহণ করতে দিন (#2109)।- প্লেলিস্ট মুছে দেওয়ার পরেও পুরনো বিজ্ঞপ্তি দেখা যাওয়ার সমস্যা সমাধান করা হয়েছে (#২২১১)।
- প্লেব্যাক পজ, বন্ধ বা ব্যর্থ হলে অতিরিক্ত ১০ মিনিটের জন্য ফোরগ্রাউন্ড পরিষেবার স্ট্যাটাস
রাখুন। এর ফলে ব্যবহারকারীরা বিভিন্ন ডিভাইসে ফোরগ্রাউন্ড সার্ভিস রেসট্রিকশনের ঝুঁকি ছাড়াই এই টাইমআউটের মধ্যে প্লেব্যাক আবার শুরু করতে পারবেন। মনে রাখবেন যে
- UI:
media3-ui-composeমডিউলে স্টেট হোল্ডার ও কম্পোজেবল যোগ করুনPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateএবংPlaybackSpeedState-এর জন্য।
- ডাউনলোড:
CacheWriter-এ থাকা বাগ ঠিক করুন যা ডেটা সোর্সকে খোলা রাখে এবং ক্যাশে এরিয়া লক করে রাখে যদি ডেটা সোর্সIOExceptionছাড়া অন্য কোনওExceptionথ্রো করে (#৯৭৬০)।
- HLS এক্সটেনশন:
HlsInterstitialsAdsLoader-এর প্রথম ভার্সন যোগ করুন। বিজ্ঞাপন লোডার, HLS মিডিয়া প্লেলিস্টের HLS ইন্টারস্টিশিয়াল পড়ে এবং সেগুলিকেAdPlaybackState-এ ম্যাপ করে যাAdsMediaSource-এ পাস করা হয়। এই প্রাথমিক ভার্সনে শুধুX-ASSET-URIঅ্যাট্রিবিউট সহ HLS VOD স্ট্রিম কাজ করে।HlsInterstitialsAdsLoader.AdsMediaSourceFactoryযোগ করুন। অ্যাপ এটি ব্যবহার করেAdsMediaSourceইনস্ট্যান্স তৈরি করতে পারে যাHlsInterstitialsAdsLoaderসুবিধাজনক ও নিরাপদ উপায়ে ব্যবহার করে।- Dolby Vision ফর্ম্যাট শনাক্ত করতে HLS প্লেলিস্ট থেকে
SUPPLEMENTAL-CODECSট্যাগ পার্স করুন (#১৭৮৫)। - HLS স্ট্রিমে সিঙ্ক পজিশন খোঁজার শর্ত শিথিল করা হয়েছে (#২২০৯)।
- DASH এক্সটেনশন:
- DASH-এর জন্য AC-4 লেভেল-৪ ফর্ম্যাট সাপোর্ট যোগ করুন (#১৮৯৮)।
- মাল্টি-পিরিয়ড লাইভ স্ট্রিমে বিজ্ঞাপন যোগ করার জন্য আপডেট ইন্টারভ্যাল গণনা করার সময় হওয়া সমস্যার সমাধান করা (#১৬৯৮)।
- Dolby Vision ফর্ম্যাট শনাক্ত করতে
DASH ম্যানিফেস্ট থেকে
scte214:supplementalCodecsঅ্যাট্রিবিউট পার্স করুন (#১৭৮৫)। - লাইভ স্ট্রিমে পিরিয়ড ট্রানজিশন ম্যানেজ করার সুবিধা উন্নত করা হয়েছে যেখানে পিরিয়ডে ঘোষিত পিরিয়ড সময়সীমার বাইরে মিডিয়া স্যাম্পেল থাকে (#১৬৯৮)।
adaptation-set-switchingদিয়ে চিহ্নিত করা অ্যাডাপ্টেশন সেট কিন্তু বিভিন্ন ভাষা বা রোল ফ্ল্যাগ একসাথে মার্জ করা সংক্রান্ত সমস্যার সমাধান করা (#২২২২)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
- MPEG-H ডিকোডার মডিউল যোগ করুন যা MPEG-H অডিও ডিকোড করতে বিল্ট-ইন MPEG-H ডিকোডার ব্যবহার করে (#১৮২৬)।
- MIDI এক্সটেনশন:
MidiRenderer-এ কাস্টমAudioSinkএবংAudioRendererEventListenerইনস্ট্যান্স প্লাম্ব করুন।
- কাস্ট এক্সটেনশন:
- Google Play পরিষেবা ইনস্টল করা আছে কিন্তু বন্ধ করা আছে এমন ডিভাইসে API 34+ টার্গেট করা অ্যাপে
FLAG_MUTABLEক্র্যাশ হওয়া ঠিক করতেplay-services-cast-frameworkডিপেন্ডেন্সি 21.5.0-এ বাম্প করুন (#2178)।
- Google Play পরিষেবা ইনস্টল করা আছে কিন্তু বন্ধ করা আছে এমন ডিভাইসে API 34+ টার্গেট করা অ্যাপে
- ডেমো অ্যাপ:
- অতিরিক্ত বোতামের সাহায্যে
demo-compose-এর ক্ষমতা বাড়ান এবং স্কেলিং ও শাটার সাপোর্টের মাধ্যমেPlayerSurfaceইন্টিগ্রেশন উন্নত করুন।
- অতিরিক্ত বোতামের সাহায্যে
- বাতিল করা চিহ্ন সরান:
- অবচিত
AudioMixer.create()পদ্ধতি সরান৷ পরিবর্তেDefaultAudioMixer.Factory().create()ব্যবহার করুন। - নিম্নলিখিত বাতিল করা
Transformer.Builderপদ্ধতিগুলি সরান:setTransformationRequest(), এর পরিবর্তেsetAudioMimeType(),setVideoMimeType()এবংsetHdrMode()ব্যবহার করুন।setAudioProcessors(), অডিও প্রসেসরকেEditedMediaItem.Builder.setEffects()-এ সেট করুন এবং এর পরিবর্তেTransformer.start()-এ পাস করুন।setVideoEffects(), ভিডিও এফেক্টEditedMediaItem.Builder.setEffects()-এ সেট করুন এবং পরিবর্তে এটিTransformer.start()-এ পাস করুন।setRemoveAudio(),EditedMediaItem.Builder.setRemoveAudio()ব্যবহার করুন যাতেEditedMediaItemথেকে অডিও সরিয়েTransformer.start()-এ পাস করা যায়।setRemoveVideo(),EditedMediaItemথেকে ভিডিও সরাতেEditedMediaItem.Builder.setRemoveVideo()ব্যবহার করুন, যাTransformer.start()-এ পাস করা হয়েছে।setFlattenForSlowMotion(),EditedMediaItem.Builder.setFlattenForSlowMotion()ব্যবহার করেEditedMediaItemফ্ল্যাটেন করুন যাTransformer.start()-এ পাস করা হয়েছে।setListener(), এর পরিবর্তেaddListener(),removeListener()বাremoveAllListeners()ব্যবহার করুন।
- নিম্নলিখিত বাতিল করা
Transformer.Listenerপদ্ধতিগুলি সরান:onTransformationCompleted(MediaItem), পরিবর্তেonCompleted(Composition, ExportResult)ব্যবহার করুন।onTransformationCompleted(MediaItem, TransformationResult), পরিবর্তেonCompleted(Composition, ExportResult)ব্যবহার করুন।onTransformationError(MediaItem, Exception), পরিবর্তেonError(Composition, ExportResult, ExportException)ব্যবহার করুন।onTransformationError(MediaItem, TransformationException), পরিবর্তেonError(Composition, ExportResult, ExportException)ব্যবহার করুন।onTransformationError(MediaItem, TransformationResult, TransformationException), পরিবর্তেonError(Composition, ExportResult, ExportException)ব্যবহার করুন।onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), পরিবর্তেonFallbackApplied(Composition, TransformationRequest, TransformationRequest)ব্যবহার করুন।
- পুরনো
TransformationResultক্লাস সরিয়ে দিন। পরিবর্তেExportResultব্যবহার করুন। - পুরনো
TransformationExceptionক্লাস সরিয়ে দিন। পরিবর্তেExportExceptionব্যবহার করুন। Transformer.PROGRESS_STATE_NO_TRANSFORMATION-এর পুরনো ভার্সন সরিয়ে দিন। পরিবর্তেTransformer.PROGRESS_STATE_NOT_STARTEDব্যবহার করুন।Transformer.setListener()-এর পুরনো ভার্সন সরিয়ে দিন। পরিবর্তেTransformer.addListener(),Transformer.removeListener()বাTransformer.removeAllListeners()ব্যবহার করুন।Transformer.startTransformation()-এর পুরনো ভার্সন সরিয়ে দিন। পরিবর্তেTransformer.start(MediaItem, String)ব্যবহার করুন।SingleFrameGlShaderProgram-এর পুরনো ভার্সন সরিয়ে দিন। পরিবর্তেBaseGlShaderProgramব্যবহার করুন।Transformer.flattenForSlowMotionসরান। পরিবর্তেEditedMediaItem.flattenForSlowMotionব্যবহার করুন।ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentএবংExoPlayer.DeviceComponentসরানো হয়েছে।androidx.media3.exoplayer.audio.SonicAudioProcessorসরানো হয়েছে।- নিম্নলিখিত বাতিল করা
DownloadHelperপদ্ধতি সরিয়ে দেওয়া হয়েছে:- কনস্ট্রাক্টর
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), এর পরিবর্তেDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)ব্যবহার করুন। getRendererCapabilities(RenderersFactory),RenderersFactoryসহDefaultRendererCapabilitiesListতৈরি করে এবংDefaultRendererCapabilitiesList.getRendererCapabilities()কল করে একই ধরনের কার্যকারিতা পাওয়া যেতে পারে।PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)পদ্ধতি সরানো হয়েছে। পরিবর্তেPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)ব্যবহার করুন এবং(MediaSession.Token) compatToken.getToken()-এ পাস করুন।
- কনস্ট্রাক্টর
- অবচিত
1.6.0-rc02
১৯ মার্চ, ২০২৫
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
1.6.0-rc01
১২ মার্চ, ২০২৫
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
1.6.0-beta01
২৬ ফেব্রুয়ারি, ২০২৫
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.6.0-alpha03
৬ ফেব্রুয়ারি, ২০২৫
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.6.0-alpha02
৩০ জানুয়ারি, ২০২৫
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.6.0-alpha01
২০ ডিসেম্বর, ২০২৪
1.6.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন ১.৫
ভার্সন ১.৫.১
১৯ ডিসেম্বর, ২০২৪
androidx.media3:media3-*:1.5.1 রিলিজ করা হয়েছে। ভার্সন 1.5.1-এ এইসব
কমিট আছে।
- ExoPlayer:
- এই প্ল্যাটফর্ম API-এর সাথে কোডেক টাইমআউট সংক্রান্ত সমস্যার রিপোর্ট এড়াতে, MediaCodec-এ অ্যাসিঙ্ক্রোনাস ডিক্রিপশনের ব্যবহার বন্ধ করুন (#১৬৪১)।
- এক্সট্র্যাক্টর:
- MP3:
VBRIফ্রেমের সূচিপত্র কোনও ফাইলের সব MP3 ডেটা কভার না করলে, প্লেব্যাক তাড়াতাড়ি বন্ধ করবেন না (#১৯০৪)।
- MP3:
- ভিডিও:
onOutputFormatChangedপ্রসেস করার সময়MediaCodecAdapter-এর দেওয়া পিক্সেল অ্যাস্পেক্ট রেশিও ভ্যালু ব্যবহার করার সুবিধা ফিরিয়ে আনা হয়েছে (#১৩৭১)।
- টেক্সট:
ReplacingCuesResolver.discardCuesBeforeTimeUs-এ সেই সমস্যার সমাধান করা হয়েছে যেখানেtimeUs-এ অ্যাক্টিভ কিউ (আগে শুরু হয়েছে কিন্তু এখনও শেষ হয়নি) ভুলভাবে বাতিল করা হয়েছে (#১৯৩৯)।
- মেটাডেটা:
- Vorbis কমেন্ট থেকে ডিস্ক/ট্র্যাকের নম্বর এবং জনরা এক্সট্র্যাক্ট করে
MediaMetadata(#1958)-এ যোগ করুন।
- Vorbis কমেন্ট থেকে ডিস্ক/ট্র্যাকের নম্বর এবং জনরা এক্সট্র্যাক্ট করে
ভার্সন ১.৫.০
২৭ নভেম্বর, ২০২৪
androidx.media3:media3-*:1.5.0 রিলিজ করা হয়েছে। ভার্সন 1.5.0-এ এইসব
কমিট আছে।
- কমন লাইব্রেরি:
ForwardingSimpleBasePlayerযোগ করুন যা সম্পূর্ণ সামঞ্জস্যতা এবং শ্রোতা হ্যান্ডলিং নিশ্চিত করার সাথে সাথে ছোটখাটো অ্যাডজাস্টমেন্ট সহ অন্য প্লেয়ারে ফরওয়ার্ড করার অনুমতি দেয় (#1183)।getPlaylist()পদ্ধতি দিয়েSimpleBasePlayer.State.playlistপরিবর্তন করুন।- প্লেলিস্ট স্ট্রাকচার তৈরি করার পরিবর্তে
সরাসরি
Timelineএবং বর্তমানTracksওMetadataনির্দিষ্ট করতেSimpleBasePlayer.State.Builder.setPlaylist()-এর জন্য ওভাররাইড যোগ করুন। minSdkবাড়িয়ে 21 (Android Lollipop) করুন। এটি অন্যান্য সব AndroidX লাইব্রেরির সাথে অ্যালাইন করা আছে।androidx.media3:media3-common-ktxআর্টিফ্যাক্ট যোগ করুন যা কমন লাইব্রেরির উপরে তৈরি Kotlin-নির্দিষ্ট কার্যকারিতা প্রদান করেmedia3-common-ktxলাইব্রেরিতেPlayer.Eventsশোনার জন্য একটি কোরুটিন স্পিন করতেPlayer.listenসাসপেন্ডিং এক্সটেনশন ফাংশন যোগ করুন।- রানটাইম ক্লাস যাচাইকরণ
ব্যর্থতা এড়ানোর জন্য ডিজাইন করা ম্যানুয়ালি আউট-অফ-লাইন ইনার ক্লাস থেকে
@DoNotInlineঅ্যানোটেশন সরান। R8-এর সাম্প্রতিক ভার্সন এখন রানটাইম ব্যর্থতা এড়াতে এই ধরনের কল অটোমেটিক আউট-অফ-লাইন করে (তাই ম্যানুয়াল আউট-অফ-লাইনিংয়ের আর প্রয়োজন নেই)। লাইব্রেরির সব Gradle ব্যবহারকারীকে অবশ্যই Android Gradle প্লাগ-ইনের এমন একটি ভার্সন ব্যবহার করতে হবে যা R8-এর এমন একটি ভার্সন ব্যবহার করে যা এটি করে,compileSdk = 35-এর কারণে। নন-গ্রেডেল বিল্ড সিস্টেম সহ লাইব্রেরির ব্যবহারকারীদের নিশ্চিত করতে হবে যে তাদের R8-সমতুল্য সঙ্কুচিত/অস্পষ্ট করার ধাপটি রানটাইম ক্লাস যাচাইকরণ ব্যর্থতা এড়াতে একই রকম অটোমেটিক আউট-অফ-লাইনিং প্রসেস করে। এই পরিবর্তন অন্যান্য AndroidX লাইব্রেরিতে আগেই করা হয়েছে।
- ExoPlayer:
- এখন প্রতিটি মিডিয়া আইটেমের জন্য
MediaCodecRenderer.onProcessedStreamChange()কল করা যাবে। আগে প্রথমটির জন্য এটি কল করা হয়নি। এটি চালু করতেMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()ব্যবহার করুন। - সমস্যা হলে অ্যাকশন নেওয়ার জন্য
PreloadMediaSource.PreloadControlইমপ্লিমেন্টেশনকে অনুমতি দিতেPreloadMediaSource.PreloadControl.onPreloadErrorযোগ করুন। - অ্যাপে প্রিলোড ইভেন্ট প্রচার করতে
BasePreloadManager.Listenerযোগ করুন। - SNTP ক্লায়েন্ট টাইমআউট পরিবর্তন করার এবং টাইমআউট (#১৫৪০) হলে বিকল্প অ্যাড্রেস আবার চেষ্টা করার অনুমতি দিন।
MediaCodecAdapter.Configuration.flagsসরিয়ে দিন কারণ ফিল্ডটি সবসময় শূন্য ছিল।- Wear OS API 35+ (যেখানে ডিভাইস এটির জন্য সহায়তা বিজ্ঞাপন করে)-এ প্লেব্যাকের জন্য ব্যবহারকারীকে বিল্ট-ইন স্পিকার বেছে নেওয়ার অনুমতি দিন।
- অডিও ফোকাস হ্যান্ডলিং চালু না হওয়া পর্যন্ত
Context.getSystemService(Context.AUDIO_SERVICE)-এ ব্লকিং কল স্থগিত করুন। এটি নিশ্চিত করে যে অডিও ফোকাস হ্যান্ডলিং চালু না থাকলে ব্লকিং কল করা হবে না (#1616)। - লোড করা না গেলে বাফার করা সময়সীমা নির্বিশেষে প্লেব্যাক করার অনুমতি দিন (#১৫৭১)।
AnalyticsListener.onRendererReadyChanged()যোগ করুন যাতে ব্যক্তিগত রেন্ডারার প্লেব্যাক রেডি করার অনুমতি দিলে সিগন্যাল পাওয়া যায়।MediaCodecঅ্যাসিঙ্ক্রোনাস মোডে (API 31+ ভার্সনে ডিফল্ট আচরণ) অপারেট করার সময়MediaCodec.CryptoExceptionকখনও কখনও "অপ্রত্যাশিত রানটাইম সমস্যা" হিসেবে রিপোর্ট করা হয়, এই সমস্যার সমাধান করা।bufferedPositionUs-এর পরিবর্তেbufferedDurationUsপাস করুন, সাথেPreloadMediaSource.PreloadControl.onContinueLoadingRequested()। এছাড়াও,DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS-কেDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS-এ পরিবর্তন করে, অ্যাপকে তখন ডিফল্ট শুরুর পজিশন থেকে নির্দিষ্ট সময়সীমা দেখায় এমন একটি ভ্যালু পাস করতে হবে, যার জন্য সংশ্লিষ্ট মিডিয়া সোর্সকে এই IntDef-এর সাথে প্রিলোড করতে হবে, পজিশনের পরিবর্তে।ForwardingRendererইমপ্লিমেন্টেশন যোগ করুন যা সব মেথড কল অন্য রেন্ডারারে ফরওয়ার্ড করে (১৭০৩)।- প্লেলিস্টের পরবর্তী আইটেমের জন্য প্লেলিস্ট প্রিলোড করার সুবিধা যোগ করুন। অ্যাপ
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)-এ কল করে প্রিলোড করার সুবিধা চালু করতে পারে। ডিফল্ট হিসেবে প্রিলোড করার সুবিধা বন্ধ করা থাকে। চালু করা থাকলে এবং প্লেব্যাকে কোনও বাধা সৃষ্টি না করতে,DefaultLoadControlপ্রিলোডিং শুরু করা এবং চালিয়ে যাওয়া তখনই সীমাবদ্ধ করে যখন প্লেয়ার প্লেব্যাকের জন্য লোড হচ্ছে না। অ্যাপ সেই অনুযায়ীLoadControl.shouldContinuePreloading()প্রয়োগ করে এই আচরণ পরিবর্তন করতে পারে (যেমনDefaultLoadControl-এ এই পদ্ধতি ওভাররাইড করার সময়)।LoadControl-এর ডিফল্ট প্রয়োগ, কোনও অ্যাপLoadControl-এর কাস্টম প্রয়োগ ব্যবহার করলে, প্রিলোডিং বন্ধ করে দেয়। - সাবক্লাস লিসনারের ইভেন্ট ইনভোক করার অনুমতি দিতে
MediaSourceEventListener.EventDispatcher.dispatchEvent()পদ্ধতি যোগ করুন (১৭৩৬)। DefaultPreloadManager.Builderযোগ করুন যা ধারাবাহিকভাবে শেয়ার করা কনফিগারেশন সহDefaultPreloadManagerএবংExoPlayerইনস্ট্যান্স তৈরি করে।LoadControl.onTracksSelected()থেকেRenderer[]প্যারামিটার সরান কারণDefaultLoadControlপ্রয়োগের মাধ্যমেExoTrackSelection[]থেকে স্ট্রিমের ধরন উদ্ধার করা যেতে পারে।DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])বন্ধ করা হয়েছে এবং ওভাররাইড করা আটকাতে পদ্ধতিকে চূড়ান্ত হিসেবে চিহ্নিত করা হয়েছে। পরিবর্তে নতুনDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])ব্যবহার করা উচিত।MergingMediaSource-এ সেকেন্ডারি সোর্স থেকেMediaSourceEventListenerটি ইভেন্ট সম্পর্কে রিপোর্ট করুন। এর ফলে সাইডলোড করা সাবটাইটেলের (MediaItem.LocalConfiguration.subtitleConfigurations-এর সাথে যোগ করা) জন্য লোড শুরু/সমস্যা/বাতিল/সম্পূর্ণ ইভেন্ট রিপোর্ট করা হবে, যাAnalyticsListenerথেকে নির্গত ডুপ্লিকেট লোড ইভেন্ট হিসেবে দেখা যেতে পারে।- সাবটাইটেল ও মেটাডেটা সংক্রান্ত সমস্যার কারণে প্লেব্যাক সম্পূর্ণ বন্ধ হয়ে যাওয়া আটকান।
পরিবর্তে, সমস্যাযুক্ত ট্র্যাকটি বন্ধ করা হয় এবং বাকি ট্র্যাকগুলির প্লেব্যাক
চালিয়ে যাওয়া হয়
(#১৭২২)।
- নতুন সাবটাইটেল ম্যানেজ করার সময় (এক্সট্র্যাক্ট করার সময়), সংশ্লিষ্ট পার্স (যেমন,
ভুল সাবটাইটেল ডেটা) এবং লোড সংক্রান্ত সমস্যা (যেমন, HTTP 404)
onLoadErrorকলব্যাকের মাধ্যমে দেখানো হয়। - পুরনো সাবটাইটেল হ্যান্ডলিংয়ের (রেন্ডারিংয়ের সময়) ক্ষেত্রে, শুধু সংশ্লিষ্ট লোড
সমস্যা
onLoadErrorকলব্যাকের মাধ্যমে দেখানো হয়, যেখানে পার্স সমস্যা নীরবে উপেক্ষা করা হয় (এটি আগে থেকেই আছে)।
- নতুন সাবটাইটেল ম্যানেজ করার সময় (এক্সট্র্যাক্ট করার সময়), সংশ্লিষ্ট পার্স (যেমন,
ভুল সাবটাইটেল ডেটা) এবং লোড সংক্রান্ত সমস্যা (যেমন, HTTP 404)
- প্লেলিস্ট আইটেম বা মাল্টি-পিরিয়ড DASH স্ট্রিমে পিরিয়ডের সময়সীমা আসল কন্টেন্টের সাথে না মিললে আইটেমের শেষে ফ্রেম ফ্রিজ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#১৬৯৮)।
SntpClient-এ একটি সেটার যোগ করুন যাতে শেষ আপডেটের পর থেকে অতিবাহিত হওয়া সর্বোচ্চ সময় সেট করা যায়, যার পরে ক্লায়েন্ট আবার শুরু করা হয় (#১৭৯৪)।
- এখন প্রতিটি মিডিয়া আইটেমের জন্য
- ট্রান্সফর্মার:
SurfaceAssetLoaderযোগ করুন, যাSurface-এর মাধ্যমে ট্রান্সফর্মারে ভিডিও ডেটা কিউতে রাখার সুবিধা দেয়।ImageAssetLoaderAssetLoader.onError-এর মাধ্যমে কাজ করে না এমন ইনপুট সম্পর্কে রিপোর্ট করেIllegalStateExceptionদেখানোর পরিবর্তে।- ছবির এক্সপোর্ট করার জন্য
MediaItem.Builder.setImageDurationMsব্যবহার করে ছবির সময়সীমা সেট করা বাধ্যতামূলক করুন। - অডিও EditedMediaItems-এর সিকোয়েন্সে গ্যাপের জন্য এক্সপোর্ট করার সুবিধা যোগ করুন।
- ট্র্যাক বেছে নেওয়া:
DefaultTrackSelector: অন্যান্য ফ্যাক্টর সমান হলে চ্যানেল-ভিত্তিক অডিওর চেয়ে অবজেক্ট-ভিত্তিক অডিওকে বেশি পছন্দ করুন।
- এক্সট্র্যাক্টর:
Mp4ExtractorএবংFragmentedMp4Extractor-কে H264 স্যাম্পেল শনাক্ত করার অনুমতি দিন যা পরবর্তী স্যাম্পেল দ্বারা রেফারেন্স হিসেবে ব্যবহার করা হয় না।AmrExtractor-এ ইন্ডেক্স-ভিত্তিক খোঁজার সুবিধা চালু করার বিকল্প যোগ করুন।- বৈধ ফ্রেমের মধ্যে ১২৮kB-এর বেশি সাইজের MP3 ফাইলকে ট্রাঙ্কেট করা হিসেবে বিবেচনা করুন
(ভুল হিসেবে নয়)। এর অর্থ হল, শেষে নন-MP3 ডেটা সহ ফাইল,
MP3 বাইটের দৈর্ঘ্য নির্দেশ করার জন্য অন্য কোনও মেটাডেটা ছাড়াই, এখন
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563) সহ ব্যর্থ হওয়ার পরিবর্তে MP3 ডেটার শেষে প্লেব্যাক বন্ধ করুন। - MP4 ফাইলে এডিট লিস্ট প্রসেস করার সময় নন-কীফ্রেম মিডিয়া শুরুর পজিশনের জন্য প্রি-রোল স্যাম্পেল ম্যানেজ করার সমস্যা সমাধান করা হয়েছে (#১৬৫৯)।
Mp4ExtractorওFragmentedMp4Extractor-এmdhdবক্স থেকে মিডিয়ার সময়সীমা ব্যবহার করে ফ্রেম রেট গণনা উন্নত করা হয়েছে (#১৫৩১)।- MP4 এডিট লিস্টে
media_time-এর ভুল স্কেলিং ঠিক করুন। মুভি টাইমস্কেল ব্যবহার করেsegment_durationআগে থেকেই সঠিকভাবে স্কেল করা হলেও, MP4 ফর্ম্যাট স্ট্যান্ডার্ড (#১৭৯২) অনুযায়ী ট্র্যাক টাইমস্কেল ব্যবহার করেmedia_timeএখন সঠিকভাবে স্কেল করা হয়েছে। - এডিট লিস্ট (#১৭৯৭) সহ MP4-এর জন্য
endIndicesগণনায় আউট-অফ-অর্ডার ফ্রেম ম্যানেজ করুন। -1ভ্যালু (#১৮১৯) ম্যানেজ করতে MP4 ফাইলেরmdhdবক্সে মিডিয়া ডিউরেশন পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে।- H.263 ভিডিওর জন্য MP4 ফাইলে
h263বক্স শনাক্ত করার জন্য সহায়তা যোগ করুন (#১৮২১)। - AC-4 লেভেল-৪ ISO বেস মিডিয়া ফাইল ফর্ম্যাট সাপোর্ট যোগ করুন (#১২৬৫)।
- DataSource:
- API লেভেল ৩৪-এর পরিবর্তে ভার্সন S
এক্সটেনশন ৭ থেকে শুরু করে ব্যবহার করার অনুমতি দিতে
HttpEngineDataSourceআপডেট করুন (#১২৬২)। DataSourceContractTest: Assert thatDataSource.getUri()returns the resolved URI (as documented). অনুরোধ করা URI-এর থেকে এটি আলাদা হলে, নতুনDataSourceContractTest.TestResource.Builder.setResolvedUri()পদ্ধতি ব্যবহার করে টেস্ট এটি দেখাতে পারে।DataSourceContractTest:DataSource.getUri()এবংgetResponseHeaders()-এর 'open' ভ্যালু রিটার্ন করে,open()-এ কল করার চেষ্টা ব্যর্থ হওয়ার পরে ('রিসোর্স খুঁজে পাওয়া যায়নি' বলে) এবং পরবর্তীclose()কলের আগে।DataSourceContractTest.getNotFoundResources()ওভাররাইড করলে টেস্ট সাব-ক্লাস একাধিক 'খুঁজে পাওয়া যায়নি' রিসোর্স প্রদান করতে পারে এবং প্রত্যাশিত যেকোনও হেডারও প্রদান করতে পারে। এটি HTTP 404 (হেডার সহ) এবং "সার্ভার খুঁজে পাওয়া যায়নি" (হেডার ছাড়া) স্ট্যাটাসের মধ্যে পার্থক্য করতে সাহায্য করে।
- API লেভেল ৩৪-এর পরিবর্তে ভার্সন S
এক্সটেনশন ৭ থেকে শুরু করে ব্যবহার করার অনুমতি দিতে
- অডিও:
- মিডিয়াতে CTA-2075 লাউডনেস মেটাডেটা থাকলে, কোডেকে তা অটোমেটিক কনফিগার করুন।
- সিক করার সময় ভলিউম যেন মসৃণভাবে কমে যায় তা নিশ্চিত করুন।
- সিক করার সময় পপ সাউন্ডের সমস্যা সমাধান করুন।
- Sonic-এর টাইম-স্ট্রেচিং/পিচ-শিফ্টিং অ্যালগরিদমের জন্য ট্রাঙ্কেশন সংক্রান্ত সমস্যার অ্যাকুমুলেশন ঠিক করুন।
SpeedChangingAudioProcessor-এ থাকা বাগ সংক্রান্ত সমস্যার সমাধান করুন যার কারণে আউটপুট ফ্রেম ড্রপ হয়।
- ভিডিও:
MediaCodecVideoRendererএমন স্যাম্পেল ডিকোড করা এড়িয়ে যায় যেগুলি অন্যান্য স্যাম্পেল দ্বারা রেন্ডার করা বা রেফারেন্স হিসেবে ব্যবহার করা হয় না।- API 35 ও তার পরবর্তী ভার্সনে,
MediaCodecAdapterএখনnullSurfaceconfigure-এ পেতে পারে এবং নতুন পদ্ধতিdetachOutputSurface-এ কল করতে পারে যাতে আগে সেট করাSurfaceসরানো যায়, যদি কোডেক এটি সাপোর্ট করে (MediaCodecInfo.detachedSurfaceSupported)। onOutputFormatChangedপ্রসেস করার সময়MediaCodecAdapter-এর দেওয়া পিক্সেল অ্যাস্পেক্ট রেশিও ভ্যালু ব্যবহার করুন (#১৩৭১)।- Galaxy Tab S7 FE-তে ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন যার ফলে 60fps নিরাপদ H264 স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয় (#১৬১৯)।
- এন্ড-অফ-স্ট্রিম সিগন্যাল না ফিরিয়ে শেষ স্যাম্পেলের পরে আটকে যাওয়া কোডেকগুলির জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন।
- টেক্সট:
- একটি কাস্টম
VoiceSpanযোগ করুন এবং WebVTT ভয়েস স্প্যান-এর জন্য এটি পপুলেট করুন (#১৬৩২)। - HLS-এ WebVTT-তে খুব বড় সাবটাইটেল টাইমস্ট্যাম্প (যা মাইক্রোসেকেন্ড হিসেবে
দেখানো হলে এবং
90,000MPEG টাইমবেস দিয়ে গুণ করা হলে ৬৪-বিটlong-এর সীমা অতিক্রম করে) দেখানো হচ্ছে কিনা তা নিশ্চিত করুন (#১৭৬৩)। - Dolby Vision কন্টেন্টে CEA-608 সাবটাইটেল কাজ করে (#১৮২০)।
- CEA-608 সাবটাইটেল চালু থাকলে DASH মাল্টি-পিরিয়ড স্ট্রিমে প্লেব্যাক হ্যাং হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#১৮৬৩)।
- একটি কাস্টম
- মেটাডেটা:
- icy বা vnd.dvb.ait কন্টেন্ট আছে এমন ট্র্যাকে
C.TRACK_TYPE_METADATAধরন অ্যাসাইন করুন।
- icy বা vnd.dvb.ait কন্টেন্ট আছে এমন ট্র্যাকে
- ছবি:
- Glide বা Coil-এর মতো এক্সটার্নাল ইমেজ লোডিং লাইব্রেরির সাথে
সহজ ইন্টিগ্রেশনের জন্য
ExternallyLoadedImageDecoderযোগ করুন।
- Glide বা Coil-এর মতো এক্সটার্নাল ইমেজ লোডিং লাইব্রেরির সাথে
সহজ ইন্টিগ্রেশনের জন্য
- DataSource:
FileDescriptorDataSourceযোগ করুন, একটি নতুনDataSourceযাFileDescriptorথেকে পড়ার জন্য ব্যবহার করা যেতে পারে (#3757)।
- প্রভাব:
- ছোটখাটো
SurfaceTextureস্কেলিংয়ের জন্যDefaultVideoFrameProcessorওয়ার্কঅ্যারাউন্ড যোগ করুন।SurfaceTexture-এ ছোট স্কেলিং অন্তর্ভুক্ত থাকতে পারে যা ক্রপ করা বাফারের প্রান্তের চারপাশে ১-টেক্সেল বর্ডার কেটে দেয়। এটি এখন এমনভাবে ম্যানেজ করা হয় যাতে আউটপুট প্রত্যাশার কাছাকাছি হয়। DefaultVideoFrameProcessor.queueInputBitmap()-এর স্পিড বাড়ান। এর ফলে,Transformer-এর মাধ্যমে ছবি থেকে ভিডিও এক্সপোর্ট করার প্রসেস আরও দ্রুত হয়।
- ছোটখাটো
- IMA এক্সটেনশন:
- প্লেলিস্ট মুছে দেওয়ার সময়
ImaServerSideAdInsertionMediaSource-এArrayIndexOutOfBoundsExceptionহতে পারে, এই সমস্যার সমাধান করা হয়েছে। - সার্ভার-সাইড ইনসার্ট করা DAI স্ট্রিমে প্রিরোল না থাকলে, শেষ মিডরোলের পরে
প্লে করার সময়
ArrayIndexOutOfBoundsExceptionহতে পারে, এই সমস্যার সমাধান করা হয়েছে (#১৭৪১)।
- প্লেলিস্ট মুছে দেওয়ার সময়
- সেশন:
- এই পদ্ধতি ওভাররাইড করে প্লেব্যাক আবার চালু করার জন্য আসা প্লে কমান্ড
অ্যাপ যাতে বন্ধ করতে পারে, তার অনুমতি দিতে
MediaButtonReceiver.shouldStartForegroundService(Intent)যোগ করুন। সাধারণত, পরিষেবাটি সবসময় চালু থাকে এবং সিস্টেম ক্র্যাশ না করলে প্লেব্যাক বন্ধ করা যায় নাForegroundServiceDidNotStartInTimeException(#1528) দিয়ে। MediaBrowserথেকে পাঠানো কাস্টম কমান্ডMediaBrowserServiceCompat-এর পরিবর্তেMediaSessionCompat.Callback-এ পাঠানোর সমস্যার সমাধান করা হয়েছে। এই সমস্যাটি লেগেসি পরিষেবার সাথে কানেক্ট করার সময় দেখা যায়। এর ফলেMediaBrowser, লিগ্যাসি পরিষেবার মাধ্যমে ফেরত পাঠানো প্রকৃত রিটার্ন ভ্যালু পায়নি (#১৪৭৪)।- মিডিয়া বোতাম ইনটেন্টের (#১৭৩০) জন্য ব্রডকাস্ট রিসিভার সেট করার সময় নির্দিষ্ট কিছু প্রস্তুতকারকের ডিভাইসের মাধ্যমে থ্রো করা
IllegalArgumentExceptionম্যানেজ করুন। - মিডিয়া আইটেমের জন্য কমান্ড বোতাম যোগ করুন। এটি Media3 API যোগ করে যা
Custom browse actionsনামে পরিচিত ছিল এবং এর সাথেMediaBrowserCompatসহ লিগ্যাসি লাইব্রেরি আছে। মনে রাখবেন, Media3-এর সাথে মিডিয়া আইটেমের জন্য কমান্ড বোতামMediaBrowserএবংMediaController, দুটির জন্যই উপলভ্য। কাস্টম ব্রাউজ অ্যাকশন প্রয়োগ করুন দেখুন। * Media3 কন্ট্রোলার কখনও কখনওplay()-এর অনুরোধ করার পরে সেশন অ্যাপকে ফোরগ্রাউন্ড সার্ভিস চালু করতে না দেওয়ার সমস্যার সমাধান করা হয়েছে। CommandButton.Builder.setIconUri-কে শুধু কন্টেন্ট Uri গ্রহণ করার জন্য সীমাবদ্ধ করুন।- পুরনো
MediaBrowserCompat-এর সাথে কানেক্ট করার সময়, প্রাথমিকMediaBrowserCompat-এ Media3 ব্রাউজারের কানেকশন সংক্রান্ত ইঙ্গিত পাস করুন।onGetRoot()-এ প্রথম কলের সাথে রুট হিন্ট হিসেবে পাস করা কানেকশন হিন্ট পরিষেবাটি পেতে পারে। - পুরনো ব্রাউজার পরিষেবার সাথে কানেক্ট করা
MediaBrowser-এ হওয়া সমস্যার সমাধান করুন, ব্রাউজারparentid-এ সাবস্ক্রাইব করার পরে পরিষেবার মাধ্যমে পাঠানো কোনও সমস্যা সংক্রান্ত মেসেজ পায়নি। - ইন্টারঅপারেবিলিটি সংক্রান্ত আচরণ উন্নত করুন, যাতে পুরনো
MediaBrowserService-এর সাথে কানেক্ট করা Media3 ব্রাউজার, পেরেন্ট আইটেমে সাবস্ক্রাইব করার সময়parentId-এর চাইল্ড আইটেমের জন্য দু'বার অনুরোধ না করে।
- এই পদ্ধতি ওভাররাইড করে প্লেব্যাক আবার চালু করার জন্য আসা প্লে কমান্ড
অ্যাপ যাতে বন্ধ করতে পারে, তার অনুমতি দিতে
- UI:
- XML-ভিত্তিক শেয়ার করা ট্রানজিশনের সাথে সমস্যার কারণে,
PlayerView-in-Compose-AndroidViewওয়ার্কঅ্যারাউন্ড অপ্ট-ইনে স্ট্রেচ/ক্রপ করা ভিডিও তৈরি করুন।PlayerViewব্যবহার করা অ্যাপAndroidView-এর ভিতরেPlayerView.setEnableComposeSurfaceSyncWorkaround-কে কল করতে হবে যাতে অপ্ট-ইন করা যায় (#১২৩৭, #১৫৯৪)। - ফুলস্ক্রিন বোতামের আইকন চাহিদা অনুযায়ী আপডেট করার অনুমতি দিতে
setFullscreenButtonState-কেPlayerView-এ যোগ করুন, অর্থাৎ আউট-অফ-ব্যান্ড এবং ক্লিক ইন্টারঅ্যাকশনে প্রতিক্রিয়াশীল নয় (#১৫৯০, #১৮৪)। - অ্যাপ-নির্ধারিত টেক্সট ট্র্যাক বেছে নেওয়ার পছন্দ থাকলে, টেক্সট বেছে নেওয়ার ক্ষেত্রে "কোনওটিই নয়" বিকল্প কাজ না করার সমস্যা সমাধান করুন।
- XML-ভিত্তিক শেয়ার করা ট্রানজিশনের সাথে সমস্যার কারণে,
- DASH এক্সটেনশন:
- সেগমেন্টের মাঝখানে শুরু হওয়া পিরিয়ডের জন্য সহায়তা যোগ করুন (#1440)।
- স্মুথ স্ট্রিমিং এক্সটেনশন:
- টেক্সট ট্র্যাক সহ SmoothStreaming স্ট্রিম চালানোর সময়
Bad magic number for Bundleসংক্রান্ত সমস্যার সমাধান করা (#১৭৭৯)।
- টেক্সট ট্র্যাক সহ SmoothStreaming স্ট্রিম চালানোর সময়
- RTSP এক্সটেনশন:
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, ইত্যাদি):
- IAMF ডিকোডার মডিউল যোগ করুন, যা অডিও সিন্থেসাইজ করার জন্য libiamf নেটিভ লাইব্রেরি ব্যবহার করে IAMF ট্র্যাক সহ MP4 ফাইল প্লেব্যাকের জন্য সহায়তা প্রদান করে।
- স্টেরিও লেআউটের পাশাপাশি ৫.১ স্পেশিয়ালাইজেশন ও ঐচ্ছিক হেড ট্র্যাকিং চালু থাকলে প্লেব্যাক কাজ করে, তবে বাইনরাল প্লেব্যাক বর্তমানে কাজ করে না।
- Android 15-এ ডিকোডার এক্সটেনশনের জন্য ১৬ কেবি পৃষ্ঠা সংক্রান্ত সহায়তা যোগ করা হয়েছে (#১৬৮৫)।
- IAMF ডিকোডার মডিউল যোগ করুন, যা অডিও সিন্থেসাইজ করার জন্য libiamf নেটিভ লাইব্রেরি ব্যবহার করে IAMF ট্র্যাক সহ MP4 ফাইল প্লেব্যাকের জন্য সহায়তা প্রদান করে।
- Cast এক্সটেনশন:
- CastSession ডিসকানেক্ট হওয়ার পরে টাইমলাইন ক্লিন করা বন্ধ করুন, যা ডিসকানেকশনের পরে প্রেরক অ্যাপকে লোকালি প্লেব্যাক আবার চালু করতে দেয়।
Contextপ্রদান করা হলে CastPlayer-এরDeviceInfoপপুলেট করুন। এটিMediaSession-কেRoutingSession-এর সাথে লিঙ্ক করার সুবিধা দেয়, যা আউটপুট সুইচার (#১০৫৬) ইন্টিগ্রেট করার জন্য প্রয়োজনীয়।
- টেস্ট ইউটিলিটি:
DataSourceContractTest-এ এখন যাচাই করার জন্য টেস্ট অন্তর্ভুক্ত করা হয়েছে:- ইনপুট স্ট্রিম
read positionআপডেট করা হয়েছে। - আউটপুট বাফার
offsetসঠিকভাবে প্রয়োগ করা হয়েছে।
- ইনপুট স্ট্রিম
- ডেমো অ্যাপ
- ডেমো শর্ট-ফর্ম অ্যাপে মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন (#১৮৩৯)।
- বাতিল করা চিহ্ন সরান:
Player.hasPrevious,Player.hasPreviousWindow()-এর মতো বন্ধ হয়ে যাওয়া ফিচার সরিয়ে দিন। পরিবর্তেPlayer.hasPreviousMediaItem()ব্যবহার করুন।- অবচিত
Player.previous()পদ্ধতি সরান৷ পরিবর্তেPlayer.seekToPreviousMediaItem()ব্যবহার করুন। - অবচিত
DrmSessionEventListener.onDrmSessionAcquiredপদ্ধতি সরান৷ - বাতিল করা
DefaultEncoderFactoryকনস্ট্রাক্টর সরান। পরিবর্তেDefaultEncoderFactory.Builderব্যবহার করুন।
ভার্সন 1.5.0-rc02
১৯ নভেম্বর, ২০২৪
1.5.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.5.0-rc01
১৩ নভেম্বর, ২০২৪
1.5.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.5.0-beta01
৩০ অক্টোবর, ২০২৪
1.5.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.5.0-alpha01
১০ সেপ্টেম্বর, ২০২৪
1.5.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.4.0
ভার্সন ১.৪.১
২৭ আগস্ট, ২০২৪
androidx.media3:media3-*:1.4.1 রিলিজ করা হয়েছে। 1.4.1 ভার্সনে এইসব
কমিট আছে।
- ExoPlayer:
- এক্সট্র্যাক্টর:
- MP3:
Infoফ্রেমের (#1480) দৈর্ঘ্য ফিল্ডের উপর ভিত্তি করে ট্রেলিং নন-MP3 ডেটা সঠিকভাবে উপেক্ষা করেSearched too many bytesসমস্যার সমাধান করুন।
- MP3:
- টেক্সট:
- TTML: শতাংশ
tts:fontSizeভ্যালু ম্যানেজ করার বিষয়টি ঠিক করুন যাতে সেগুলি শতাংশtts:fontSizeভ্যালু সহ পেরেন্ট নোড থেকে সঠিকভাবে উত্তরাধিকার সূত্রে প্রাপ্ত হয়। LegacySubtitleUtil-এIndexOutOfBoundsExceptionঠিক করুন, কারণ অনুরোধ করা আউটপুট শুরুর সময়Subtitle-এ চূড়ান্ত ইভেন্টের সময়ের থেকে বেশি বা সমান হওয়ার কেস ভুলভাবে ম্যানেজ করা হয়েছে (#১৫১৬)।
- TTML: শতাংশ
- DRM:
- L1 Widevine কন্টেন্ট চালানোর সময় API 31+ ডিভাইসে
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEসংক্রান্ত সমস্যার সমাধান করা। ফ্রেমওয়ার্কMediaDrm.requiresSecureDecoderপদ্ধতি (#১৬০৩) অসম্পূর্ণভাবে প্রয়োগ করার কারণে এই সমস্যা হয়।
- L1 Widevine কন্টেন্ট চালানোর সময় API 31+ ডিভাইসে
- প্রভাব:
GlObjectsProvider-এrelease()পদ্ধতি যোগ করুন।
- সেশন:
KEYCODE_HEADSETHOOK-এ ডবল ট্যাপ করার অ্যাকশনকে 'পরের আইটেমে যান' অ্যাকশনে পরিবর্তন করুন, যেমন ডকুমেন্ট করা হয়েছে (#১৪৯৩)।KEYCODE_HEADSETHOOK-কেMediaButtonReceiver-এ 'প্লে' কমান্ড হিসেবে ম্যানেজ করুন যখনForegroundServiceDidNotStartInTimeExceptionএড়াতে এটি উপেক্ষা করবেন কিনা তা সিদ্ধান্ত নেবেন (#1581)।
- RTSP এক্সটেনশন:
- SDP পার্সিংয়ে ভুল মিডিয়া বিবরণ এড়িয়ে যান (#১০৮৭)।
ভার্সন 1.4.0
২৫ জুলাই, ২০২৪
androidx.media3:media3-*:1.4.0 রিলিজ করা হয়েছে। ভার্সন 1.4.0-এ এইসব
কমিট রয়েছে।
- কমন লাইব্রেরি:
- সম্ভাব্য নো-অপ সিক কল উপেক্ষা করার পরিবর্তে সুরক্ষিত
BasePlayer.seekTo()এবংSimpleBasePlayer.handleSeek()পদ্ধতিতে ফরওয়ার্ড করুন। আপনি যদি কাস্টম প্লেয়ারে এই পদ্ধতিগুলি প্রয়োগ করেন, তাহলে আপনাকেmediaItemIndex == C.INDEX_UNSET-এর মাধ্যমে এই অতিরিক্ত কলগুলি পরিচালনা করতে হতে পারে। - উন্নত Java 8 ডিসুগারিং থেকে কম্পাইল ডিপেন্ডেন্সি সরান (#১৩১২)।
- Ensure the duration passed to
MediaItem.Builder.setImageDurationMs()is ignored for a non-imageMediaItem(as documented). Formatইনস্ট্যান্স সম্পর্কে অ্যাপের প্রদান করা কাস্টম তথ্য স্টোর করতেFormat.customDataযোগ করুন।
- সম্ভাব্য নো-অপ সিক কল উপেক্ষা করার পরিবর্তে সুরক্ষিত
- ExoPlayer:
BasePreloadManagerযোগ করুন যাrankingDataদ্বারা নির্ধারিত অগ্রাধিকারের ভিত্তিতে একাধিক সোর্সের জন্য প্রিলোডিং সমন্বয় করে। এই ক্লাস এক্সটেন্ড করে কাস্টমাইজ করা সম্ভব।DefaultPreloadManagerযোগ করুন যা মেমরিতে সোর্সের মিডিয়া স্যাম্পেল প্রিলোড করতেPreloadMediaSourceব্যবহার করে এবং একটি পূর্ণসংখ্যাrankingDataব্যবহার করে যা UI-তে কোনও আইটেমের ইন্ডেক্স নির্দেশ করে।LoadControl-এর বেশিরভাগ পদ্ধতিতেPlayerIdযোগ করুন যাতেLoadControlইমপ্লিমেন্টেশন একাধিক প্লেয়ারকে সাপোর্ট করতে পারে।Buffer.isDecodeOnly()এবংC.BUFFER_FLAG_DECODE_ONLYসরান। এই ফ্ল্যাগ সেট করার কোনও প্রয়োজন নেই কারণ রেন্ডারার ও ডিকোডার টাইমস্ট্যাম্পের ভিত্তিতে বাফার এড়িয়ে যাওয়ার সিদ্ধান্ত নেবে। কাস্টমRendererইমপ্লিমেন্টেশনকে চেক করতে হবে যে বাফার টাইম অন্ততBaseRenderer.getLastResetPositionUs()কিনা, যাতে স্যাম্পেল দেখানো হবে কিনা তা সিদ্ধান্ত নেওয়া যায়। কাস্টমSimpleDecoderইমপ্লিমেন্টেশনisAtLeastOutputStartTimeUs()চেক করতে পারে যদি প্রয়োজন হয় অথবা অন্যান্য বাফারকেDecoderOutputBuffer.shouldBeSkippedদিয়ে চিহ্নিত করতে পারে যাতে সেগুলি এড়িয়ে যাওয়া যায়।TargetPreloadStatusControl.getTargetPreloadStatus(T)-এর মাধ্যমে একটি নাল ভ্যালু ফিরিয়ে দেওয়ার অনুমতি দিন যাতে বোঝা যায় যে প্রদত্তrankingData-এর সাথেMediaSourceপ্রিলোড করতে হবে না।BasePreloadManager-এremove(MediaSource)যোগ করুন।- প্রিলোড ম্যানেজার ইনস্ট্যান্স রেখে, হোল্ড করা সব সোর্স রিলিজ করতে
BasePreloadManager-এreset()যোগ করুন। PriorityTaskManager-এ ব্যবহৃত অগ্রাধিকারের মান এবং API 35 থেকে MediaCodec-এর গুরুত্ব নির্ধারণ করতেExoPlayer.setPriority()(এবংBuilder.setPriority()) যোগ করুন।- শেষবার রিবাফার করার সময় আপডেট করার সমস্যা সমাধান করা হয়েছে যার ফলে
CMCD-তে ভুল
bs(বাফার স্টারভেশন) কী দেখাচ্ছিল (#১১২৪)। - সোর্সটি শেষ পর্যন্ত লোড হয়েছে তা বোঝাতে
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)যোগ করুন। এটিDefaultPreloadManagerএবং কাস্টমPreloadMediaSource.PreloadControlইমপ্লিমেন্টেশনকে পরবর্তী সোর্স প্রিলোড করতে বা অন্যান্য অ্যাকশন নিতে দেয়। - আইটেমের শেষে সাইলেন্স স্কিপ করার ফলে প্লেব্যাক ব্যতিক্রম ট্রিগার হওয়ার সমস্যা সমাধান করুন।
- প্রিলোডিংয়ের সময়সীমা বাতিল করতে
PreloadMediaSource-এclearযোগ করুন। - নতুন ত্রুটি কোড
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDযোগ করুন যা আরও বেশি অগ্রাধিকারের টাস্কের জন্য কোডেক রিসোর্স রিক্লেম করা হলে ব্যবহার করা হয়। - প্রাথমিক কন্টেন্ট মিডিয়া প্রস্তুতি সম্পূর্ণ হওয়ার আগে
AdsMediaSource-কে প্রিরোল বিজ্ঞাপন লোড করতে দিন (#১৩৫৮)। - ম্যানিফেস্ট থেকে আসল সময়সীমা সরিয়ে দেওয়ার পরে মাল্টি-পিরিয়ড DASH লাইভ স্ট্রিম আবার প্রস্তুত করার সময় প্লেব্যাক
STATE_ENDED-এ চলে যাওয়ার সমস্যা সমাধান করা হয়েছে। PreloadMediaSource.PreloadControl-এonTimelineRefreshed()-এর নাম পরিবর্তন করেonSourcePrepared()এবংonPrepared()-এর নাম পরিবর্তন করেonTracksSelected()করুন। এছাড়াও,DefaultPreloadManager.Stage-এ IntDefs-এর নাম পরিবর্তন করুন।- CPU ওয়েক-সাইকেলের সাথে কাজ আরও ভালোভাবে অ্যালাইন করতে এবং রেন্ডারার প্রগ্রেস করতে না পারা পর্যন্ত ওয়েক-আপে দেরি করতে, ডায়নামিক শিডিউলিংয়ের জন্য এক্সপেরিমেন্টাল সহায়তা যোগ করুন।
আপনার ExoPlayer ইনস্ট্যান্স সেট-আপ করার সময়
experimentalSetDynamicSchedulingEnabled()ব্যবহার করে আপনি এটি চালু করতে পারবেন। Renderer.getDurationToProgressUs()যোগ করুন।Rendererএই পদ্ধতি প্রয়োগ করতে পারে যাতে ExoPlayer-এ সেই সময়সীমা ফিরিয়ে দেওয়া যায় যেটি রেন্ডারারকে এগিয়ে নিয়ে যাওয়ার জন্য প্লেব্যাককে অবশ্যই এগিয়ে যেতে হবে।ExoPlayerযদিexperimentalSetDynamicSchedulingEnabled()-এর সাথে সেট করা থাকে, তাহলেExoPlayerএই পদ্ধতি কল করবে যখন এটি কাজের টাস্ক শিডিউল করার সময় গণনা করবে।MediaCodecRenderer-এর ব্যবহারের জন্য ইনপুট ও আউটপুট বাফার উপলভ্য হলে, সতর্ক করার জন্যMediaCodecAdapter#OnBufferAvailableListenerযোগ করুন। এইসব কলব্যাক পাওয়ার সময়MediaCodecRenderer,ExoPlayer-কে সিগন্যাল পাঠাবে এবংExoPlayer,experimentalSetDynamicSchedulingEnabled()-এর সাথে সেট করা থাকলে,ExoPlayerতার ওয়ার্ক লুপ শিডিউল করবে যাতে রেন্ডারার প্রসেস চালিয়ে যেতে পারে।- স্বতন্ত্র প্যারামিটারের পরিবর্তে
LoadControlপদ্ধতির জন্য ডেটা ক্লাস ব্যবহার করুন। Exoplayer.release()-কে কল করা হয়েছে কিনা তা চেক করতেExoPlayer.isReleased()যোগ করুন।ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()যোগ করুন যাতেseekToPrevious()-এর জন্য সর্বাধিক পজিশন কনফিগার করা যায়, যার জন্য এটি আগের আইটেমে (#1425) যায়।- অডিও ফোকাস সংক্রান্ত কিছু অসঙ্গতি ঠিক করা, যেমন প্লেয়ার পজ করা থাকাকালীন সম্পূর্ণ বা ক্ষণস্থায়ী ফোকাস লস রিপোর্ট না করা (#১৪৩৬)।
- প্রাথমিক প্রস্তুতির ধাপের পরে এক্সট্র্যাক্টর অতিরিক্ত ট্র্যাক রিপোর্ট করার কারণে
সম্ভাব্য
IndexOutOfBoundsExceptionঠিক করুন (#১৪৭৬)। ExoPlayer.setVideoEffect()-এEffectsরেন্ডারার অফসেট সরিয়ে টাইমস্ট্যাম্প পাবে (#১০৯৮)।- অন্য প্লেলিস্ট আইটেম পড়ার সময় প্লেয়ারে হওয়া সম্ভাব্য
IllegalArgumentExceptionসমাধান করা হয়েছে (#১৪৮৩)।
- ট্রান্সফর্মার:
ExportResult-এaudioConversionProcessএবংvideoConversionProcessযোগ করুন যা আউটপুট ফাইলে সংশ্লিষ্ট ট্র্যাক কীভাবে তৈরি করা হয়েছে তা নির্দেশ করে।- ট্রিম অপ্টিমাইজেশন H.264 লেভেল চেক শিথিল করুন।
- একটি সিকোয়েন্সে SDR ও HDR ইনপুট মিডিয়ার মধ্যে পরিবর্তন করার জন্য সহায়তা যোগ করুন।
- কম্পোজিশন-লেভেল অডিও এফেক্টের জন্য সহায়তা যোগ করুন।
- Ultra HDR ছবিকে HDR ভিডিওতে ট্রান্সকোড করার জন্য সহায়তা যোগ করুন।
- রিসেট ও আবার ব্যবহার করার পরে
DefaultAudioMixerসঠিক পরিমাণ বাইট আউটপুট না করার সমস্যা সমাধান করুন। - ডিকোডার বাগের সমাধান করা হয়েছে যেখানে PCM ইনপুট ম্যানেজ করার সময় অডিও চ্যানেলের সংখ্যা স্টেরিওতে সীমাবদ্ধ ছিল।
ExoPlayerAssetLoader-এ ট্র্যাক বেছে নেওয়ার সময়, অডিও চ্যানেল গণনার সীমাবদ্ধতা উপেক্ষা করুন কারণ সেগুলি শুধুমাত্র প্লেব্যাকের ক্ষেত্রে প্রযোজ্য।androidx.media3.transformer.Muxerইন্টারফেসের পরিবর্তেandroidx.media3.muxer.Muxerব্যবহার করুন এবংandroidx.media3.transformer.Muxerসরিয়ে দিন।- কন্টেন্ট URI স্কিম থেকে HEIC ছবি লোড করার সমস্যা সমাধান করা। (#১৩৭৩)।
- AV সিঙ্ক উন্নত করতে
AudioGraphInput-এ অডিও ট্র্যাকের সময়সীমা অ্যাডজাস্ট করুন। ExportResult.processedInputsফিল্ড সরান। আপনি যদি কোডেক বিবরণের জন্য এই ফিল্ড ব্যবহার করেন, তাহলে পরিবর্তেDefaultDecoderFactory.listenerব্যবহার করুন। কোডেক ব্যতিক্রমের ক্ষেত্রে, কোডেক বিবরণExportException.codecInfo-এ উপলভ্য হবে।
- এক্সট্র্যাক্টর:
- MPEG-TS: স্ট্রিমের শেষ অ্যাক্সেস ইউনিট স্যাম্পেল সারিতে পাস করে শেষ ফ্রেম রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করে পরিবর্তনটি রোল ফরওয়ার্ড করুন (#৭৯০৯)। শুধুমাত্র I-ফ্রেম HLS স্ট্রিম(#১১৫০) এবং H.262 HLS স্ট্রিম (#১১২৬)-এ দেখা দেওয়া সমস্যার সমাধান করার জন্য ফিক্স অন্তর্ভুক্ত করা।
- MP3: অন্তর্নিহিত স্ট্রিমের (যেমন, ফাইলের সাইজ বা HTTP
Content-Lengthহেডার) মাধ্যমে রিপোর্ট করা সাইজের পরিবর্তেInfoফ্রেম থেকে ডেটার সাইজকে অগ্রাধিকার দিন। এটি কনস্ট্যান্ট বিটরেট সিকিং গণনা থেকে প্লে করা যায় না এমন ট্রেলার ডেটা (যেমন, অ্যালবাম আর্টওয়ার্ক) বাদ দিতে সাহায্য করে, যার ফলে সিকিং আরও নির্ভুল হয় (#১৩৭৬)। - MP3: কনস্ট্যান্ট বিটরেট খোঁজার জন্য গড় বিটরেট গণনা করতে,
Infoফ্রেমের (যদি থাকে) পরে ফ্রেমের বিটরেট থেকে এক্সট্রাপোলেট করার পরিবর্তে,Infoফ্রেমে ফ্রেমের সংখ্যা এবং অন্যান্য ডেটা ব্যবহার করুন, যা কৃত্রিমভাবে ছোট হতে পারে, যেমনPCUTফ্রেম (#১৩৭৬)। - AVI কন্টেনারে পিসিএম অডিও ফর্ম্যাট এক্সট্র্যাকশন সংক্রান্ত সমস্যার সমাধান করুন।
- অডিও:
- পাসথ্রু প্লেব্যাকের জন্য DTS:X প্রোফাইল ২ এনকোডিং অ্যাট্রিবিউট সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১২৯৯)।
- অফলোড করা প্লেব্যাকের জন্য,
AudioTrack.stop()কল করার আগেDefaultAudioSink-এ স্ট্রিম সম্পূর্ণ হওয়ার জন্য ট্র্যাকিং ফিল্ড রিসেট করুন যাতেAudioTrack.StreamEventCallback#onPresentationEndedসঠিকভাবে শনাক্ত করতে পারে যে কখন সব বাকি থাকা ডেটা চালানো হয়েছে। SilenceSkippingAudioProcessor-এ থাকা সমস্যার সমাধান করুন যেখানে বিভিন্ন অডিও ফর্ম্যাটের (যেমন, স্টিরিও থেকে মোনো) মধ্যে ট্রানজিশন প্রসেসরকে একটি ব্যতিক্রম (#১৩৫২) থ্রো করতে বাধ্য করতে পারে।MediaCodecAudioRenderer.getDurationToProgressUs()প্রয়োগ করুন যাতে ExoPlayer তার প্রধান কাজের লুপ ডায়নামিকভাবে শিডিউল করতে পারে, যখন MediaCodecAudioRenderer প্রোগ্রেস করতে পারে।
- ভিডিও:
- মিড-প্লেব্যাক সারফেস পরিবর্তন করার সময়
Listener.onRenderedFirstFrame()খুব তাড়াতাড়ি আসার সমস্যা সমাধান করুন। - প্রয়োজন হলে, Dolby Vision-এর জন্য ডিকোডার ফলব্যাক লজিক ঠিক করুন যাতে মানানসই AV1 ডিকোডার ব্যবহার করা যায় (#১৩৮৯)।
- প্লেব্যাক চলাকালীন ভিডিও রেন্ডারার চালু করার কারণে কোডেক এক্সেপশন হতে পারে, সেটি ঠিক করুন।
- মিড-প্লেব্যাক সারফেস পরিবর্তন করার সময়
- টেক্সট:
- সিক পজিশনের আগে শুরু হওয়া সাবটাইটেল স্কিপ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে। এই সমস্যাটি শুধুমাত্র Media3 1.4.0-alpha01-এ দেখা গেছে।
- ডিফল্ট সাবটাইটেল পার্সিং আচরণ পরিবর্তন করুন যাতে এটি রেন্ডারিংয়ের পরিবর্তে
এক্সট্র্যাকশনের সময় ঘটে (এক্সট্র্যাকশন এবং রেন্ডারিংয়ের মধ্যে পার্থক্যের জন্য
ExoPlayer-এর আর্কিটেকচার
ডায়াগ্রাম
দেখুন)।
- উভয়
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)এবংTextRenderer.experimentalSetLegacyDecodingEnabled(true)কল করে এই পরিবর্তন ওভাররাইড করা যাবে।ExoPlayerইনস্ট্যান্সে এইসব কম্পোনেন্ট কীভাবে প্লাম্ব করতে হয় তা জানতে কাস্টমাইজেশন সংক্রান্ত ডকুমেন্ট দেখুন। এইসব পদ্ধতি (এবং পুরনো সাবটাইটেল ডিকোডিংয়ের জন্য সব সহায়তা) ভবিষ্যতে রিলিজের সময় সরিয়ে দেওয়া হবে। - কাস্টম
SubtitleDecoderপ্রয়োগ করা অ্যাপগুলিকে পরিবর্তেSubtitleParser(এবংSubtitleDecoderFactory-এর পরিবর্তেSubtitleParser.Factory) প্রয়োগ করার জন্য সেগুলিকে আপডেট করতে হবে।
- উভয়
- PGS: রান-লেংথ ডিকোডিং ঠিক করা হয়েছে যাতে
0একটি আক্ষরিক রঙের মানের পরিবর্তে (#1367) একটি রঙের সূচক হিসাবে বিবেচিত হয়। - CEA-708:
rowLockভ্যালু উপেক্ষা করুন। CEA-708-E S-2023 স্পেসিফিকেশন অনুযায়ী, স্ট্রিমে যে ভ্যালুই থাকুক না কেন,rowLockএবংcolumnLockদুটিকেই সত্য বলে ধরে নিতে হবে (columnLockসাপোর্ট প্রয়োগ করা হয়নি, তাই এটিকে কার্যকরভাবে সবসময় মিথ্যা বলে ধরে নেওয়া হয়)।- এটি প্রথমে
1.3.0-alpha01রিলিজ নোটে অন্তর্ভুক্ত করা হয়েছিল, কিন্তু1.3.0-rc01রিলিজের আগে ভুলবশত পরিবর্তনটি আগের অবস্থায় ফিরিয়ে আনা হয়। এটি এখন ঠিক করা হয়েছে, তাই পরিবর্তনটি আবার দেখা যাচ্ছে।
- এটি প্রথমে
- CEA-708: ExoPlayer-এর 'সেট পেন লোকেশন' কমান্ডের সহজ হ্যান্ডলিংয়ের মাধ্যমে ডুপ্লিকেট নতুন লাইন যোগ করা এড়িয়ে চলুন (#১৩১৫)।
- WebVTT সাবটাইটেল স্যাম্পেলে কোনও কিউ না থাকলে,
LegacySubtitleUtilথেকেIllegalArgumentExceptionসংক্রান্ত সমস্যার সমাধান করুন, যেমন DASH স্ট্রিমের অংশ হিসেবে (#১৫১৬)।
- মেটাডেটা:
- ID3 সর্ট ট্যাগে MP4-এর ম্যাপিং ঠিক করুন। আগে 'অ্যালবাম সর্ট'
(
soal), 'আর্টিস্ট সর্ট' (soar) এবং 'অ্যালবাম আর্টিস্ট সর্ট' (soaa) MP4 ট্যাগগুলি ভুলভাবেTSO2,TSOAএবংTSOPID3 ট্যাগের সাথে ম্যাপ করা হয়েছিল (#1302)। - ভ্যালু এক বাইটের বেশি হলে MP4 (/iTunes) নিউমেরিক
gnre(জনরা) এবংtmpo(টেম্পো) ট্যাগ রিডিং সংক্রান্ত সমস্যার সমাধান করুন। - ID3
TCONফ্রেমMediaMetadata.genre-এ প্রোপাগেট করুন (#1305).
- ID3 সর্ট ট্যাগে MP4-এর ম্যাপিং ঠিক করুন। আগে 'অ্যালবাম সর্ট'
(
- ছবি:
- বর্গাকার নয় এমন DASH থাম্বনেল গ্রিডের জন্য সহায়তা যোগ করুন (#1300)।
- API 34+-এর জন্য AVIF-এর জন্য সহায়তা যোগ করুন।
- আগে সেট করা
ImageOutputমুছে ফেলতে,ExoPlayer.setImageOutput()-এর জন্য প্যারামিটার হিসেবেnull-কে অনুমতি দিন।
- DataSource:
android.resource://package/idর রিসোর্স URI-এর জন্য সহায়তা প্রয়োগ করুন যেখানেpackageবর্তমান অ্যাপ্লিকেশনের প্যাকেজ থেকে আলাদা। এটি আগে থেকে কাজ করার জন্য ডকুমেন্ট করা হয়নি, তবে এটি অন্য প্যাকেজে নাম ছাড়া রিসোর্স অ্যাক্সেস করার আরও কার্যকর উপায়।DataSpecকনস্ট্রাক্টরেurlনাল নয় কিনা তা চেক করুন। এই প্যারামিটারটি আগে থেকেই নন-নাল হিসেবে অ্যানোটেট করা হয়েছে।ByteArrayDataSource-কেopen()-এর সময় বাইট অ্যারেতে URI সমাধান করার অনুমতি দিন, কনস্ট্রাকশনে হার্ড-কোড করার পরিবর্তে (#১৪০৫)।
- DRM:
LoadErrorHandlingPolicy-এDefaultDrmSessionManagerProvider(#১২৭১) সেট করার অনুমতি দিন।
- প্রভাব:
SpeedChangeEffect-এ একইEditedMediaItemবাComposition-এর মধ্যে একাধিক স্পিড পরিবর্তন করার সুবিধা।- আলট্রা HDR বিটম্যাপ ইনপুট থেকে HLG ও PQ আউটপুটের জন্য সহায়তা।
- EGL_GL_COLORSPACE_BT2020_HLG_EXT-এর জন্য সহায়তা যোগ করুন, যা ExoPlayer.setVideoEffect এবং Transformer-এর ডিবাগ SurfaceView-তে HLG সারফেস আউটপুট উন্নত করে।
setOverlayFrameAnchor()-এ প্রয়োগ করা x ও y ভ্যালু ফ্লিপ করে ডকুমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ করতে ওভারলে ম্যাট্রিক্স ইমপ্লিমেন্টেশন আপডেট করুন।OverlaySettings.Builder.setOverlayFrameAnchor()ব্যবহার করলে,-1দিয়ে গুণ করে x ও y-এর মান ফ্লিপ করুন।TimestampWrapper-এর সাথেExoPlayer#setVideoEffects(#821) ব্যবহার করলে ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে।- ডিফল্ট SDR কালার ওয়ার্কিং স্পেস লিনিয়ার কালার থেকে ইলেকট্রিক্যাল BT 709 SDR ভিডিওতে পরিবর্তন করুন। এছাড়াও, আসল কালারস্পেস বজায় রাখার জন্য তৃতীয় বিকল্প প্রদান করুন।
- EditedMediaItemSequences-এর অনির্দিষ্ট z-অর্ডার সংজ্ঞায়িত করার অনুমতি দিন (#১০৫৫)।
- HDR কন্টেন্টের বিভিন্ন অংশে (HLG রেঞ্জ ব্যবহার করে) একই ধরনের লুমিন্যান্স রেঞ্জ বজায় রাখুন।
- HDR কন্টেন্টে আলট্রা HDR (বিটম্যাপ) ওভারলে করার জন্য সহায়তা যোগ করুন।
- API 26-এর আগে
SeparableConvolutionএফেক্ট ব্যবহার করার অনুমতি দিন। - অব্যবহৃত
OverlaySettings.useHdrসরান কারণ ওভারলে ও ফ্রেমের ডায়নামিক রেঞ্জ অবশ্যই মিলতে হবে। TextOverlay-এর জন্য HDR সাপোর্ট যোগ করুন।OverlaySettings.Builder.setHdrLuminanceMultiplier()-এর সাহায্যে টেক্সট ওভারলের লুমিন্যান্স অ্যাডজাস্ট করা যেতে পারে।
- IMA এক্সটেনশন:
- অ্যাপে DAI বিজ্ঞাপন স্ট্রিম চালানোর জন্য প্রয়োজনীয় API-কে স্টেবল ভার্সনে প্রোমোট করুন।
ImaServerSideAdInsertionMediaSource.AdLoader-এreplaceAdTagParameters(Map <String, String>)যোগ করুন যা রানটাইমে বিজ্ঞাপন ট্যাগ প্যারামিটার পরিবর্তন করার অনুমতি দেয়।- বিজ্ঞাপন প্লেব্যাকের সময় প্লেয়ারে সমস্যা হলে
VideoAdPlayer.VideoAdPlayerCallback.onError()কল না হওয়ার সমস্যার সমাধান করা হয়েছে (#১৩৩৪)। data://বিজ্ঞাপন ট্যাগ URI ব্যবহার করার সময়NullPointerExceptionসংক্রান্ত সমস্যার সমাধান করতে IMA SDK ভার্সন 3.33.0-এ আপডেট করুন (#700)।
- সেশন:
CommandButton.enabled-এর ডিফল্ট মান পরিবর্তন করেtrueকরুন এবং নিশ্চিত করুন যে কন্ট্রোলারের জন্য মান 'মিথ্যা' থাকতে পারে, এমনকি সংশ্লিষ্ট কমান্ড উপলভ্য থাকলেও।CommandButton-এর জন্য আইকন কনস্ট্যান্ট যোগ করুন যা কাস্টম আইকন রিসোর্সের পরিবর্তে ব্যবহার করা উচিত।MediaSessionService.isPlaybackOngoing()যোগ করুন যাতে অ্যাপ কোয়েরি করতে পারে যেonTaskRemoved()-এ পরিষেবা বন্ধ করতে হবে কিনা (#১২১৯)।MediaSessionService.pauseAllPlayersAndStopSelf()যোগ করুন যা সব সেশনের প্লেব্যাক পজ করার এবংMediaSessionService-এর লাইফসাইকেল শেষ করার জন্যstopSelf()কল করার সুবিধা দেয়।MediaSessionService.onTaskRemoved(Intent)ওভাররাইড করুন যাতে একটি নিরাপদ ডিফল্ট ইমপ্লিমেন্টেশন প্রদান করা যায় যা প্লেব্যাক চলতে থাকলে ফোরগ্রাউন্ডে পরিষেবা চালু রাখে অথবা অন্যথায় পরিষেবা বন্ধ করে দেয়।- প্ল্যাটফর্ম সেশন মেটাডেটাতে সময়সীমা সেট না করে লাইভ স্ট্রিমের জন্য মিডিয়া বিজ্ঞপ্তিতে সিকবার লুকান (#১২৫৬)।
MediaMetadataথেকেMediaDescriptionCompat-এ কনভার্সন অ্যালাইন করুন, যাতে মেটাডেটা প্রপার্টি বেছে নেওয়ার সময় একই পছন্দের ক্রম ও লজিক ব্যবহার করা যায়, যেমন media1-এ করা হয়।MediaSession.sendError()যোগ করুন যা Media3 কন্ট্রোলারে মারাত্মক নয় এমন সমস্যা পাঠাতে দেয়। বিজ্ঞপ্তি কন্ট্রোলার ব্যবহার করার সময় (MediaSession.getMediaNotificationControllerInfo()দেখুন), প্ল্যাটফর্ম সেশনেরPlaybackState-কে প্রদত্ত সমস্যার তথ্য (#৫৪৩) সহ সমস্যা সংক্রান্ত স্ট্যাটাসে আপডেট করতে কাস্টম সমস্যা ব্যবহার করা হয়।- নির্দিষ্ট কন্ট্রোলার থেকে প্লেয়ার ইন্টার্যাকশনের সিরিজ শেষ হলে
সেশনকে জানানোর জন্য
MediaSession.Callback.onPlayerInteractionFinished()যোগ করুন। SessionErrorযোগ করুন এবংSessionResultওLibraryResult-এ এটি ব্যবহার করুন সমস্যার কোডের পরিবর্তে সমস্যা সম্পর্কে আরও তথ্য প্রদান করতে এবং কীভাবে সমস্যা সমাধান করা যায়, যদি সম্ভব হয়।- media3 কন্ট্রোলার টেস্ট অ্যাপের জন্য কোড প্রকাশ করুন যা মিডিয়া সেশন প্রকাশ করা অ্যাপের সাথে ইন্টার্যাকশন টেস্ট করতে ব্যবহার করা যেতে পারে।
- media3-এর
MediaSession[Builder].setSessionExtras()-এ পাস করা অতিরিক্ত তথ্য media1 কন্ট্রোলারেরPlaybackStateCompat.getExtras()-এ প্রোপাগেট করুন। - প্ল্যাটফর্ম সেশনে এবং সেশন থেকে মারাত্মক এবং মারাত্মক নয় এমন সমস্যা ম্যাপ করুন।
PlaybackException-কেPlaybackStateCompat-এর মারাত্মক সমস্যা সংক্রান্ত স্ট্যাটাসে ম্যাপ করা হয়েছে।MediaSession.sendError(ControllerInfo, SessionError)সহ মিডিয়া বিজ্ঞপ্তি কন্ট্রোলারে পাঠানোSessionErrorPlaybackStateCompat-এ মারাত্মক নয় এমন সমস্যার সাথে ম্যাপ করা হয়, যার অর্থ হল সমস্যার কোড ও মেসেজ সেট করা আছে কিন্তু প্ল্যাটফর্ম সেশনের স্ট্যাটাসSTATE_ERROR-এর থেকে আলাদা থাকে। - গ্লোবাল সেশন অ্যাক্টিভিটি ওভাররাইড করতে, প্রতিটি কন্ট্রোলারের জন্য সেশন অ্যাক্টিভিটি সেট করার অনুমতি দিন। কানেকশন করার সময়
AcceptedResultBuilder.setSessionActivivty(PendingIntent)-এর সাথেConnectionResultতৈরি করে কন্ট্রোলারের জন্য সেশন অ্যাক্টিভিটি সংজ্ঞায়িত করা যেতে পারে। কানেক্ট করা হয়ে গেলে, সেশন অ্যাক্টিভিটিMediaSession.setSessionActivity(ControllerInfo, PendingIntent)-এর সাথে আপডেট করা যাবে। MediaLibrarySession.Callback-এ কলের ক্ষেত্রে সমস্যার রেপ্লিকেশন উন্নত করুন। সমস্যার রেপ্লিকেশন এখনMediaLibrarySession.Builder.setLibraryErrorReplicationMode()ব্যবহার করে কনফিগার করা যেতে পারে সমস্যার ধরন বেছে নেওয়ার জন্য অথবা সমস্যার রেপ্লিকেশন থেকে অপ্ট-আউট করার জন্য যা সাধারণত চালু থাকে।
- UI:
ExoPlayer-এর সাথে কানেক্ট করা থাকলেPlayerView-এ ছবি দেখানোর সুবিধা যোগ করুন (#1144)।- গ্লোবাল ওভাররাইডের পরিবর্তে,
প্রতি
PlayerViewইনস্ট্যান্সে বিভিন্ন ড্রয়েবলকে অনুমতি দিতে, xml অ্যাট্রিবিউটের মাধ্যমেPlayerControlView-এ বিভিন্ন আইকনের কাস্টমাইজেশন যোগ করুন (#১২০০)। - API 34-এ
AndroidView-এর মধ্যেSurfaceViewব্যবহার করার সময় প্ল্যাটফর্মের একটি বাগের কারণে ভিডিও স্ট্রেচ/ক্রপ হয়ে যাচ্ছে, এই সমস্যার সমাধান করা হয়েছে (#1237)।
- ডাউনলোড:
- নিশ্চিত করুন যে
DownloadHelperরিলিজ না হওয়াRendererইনস্ট্যান্স লিক করে না, যার ফলে শেষ পর্যন্ত অ্যাপ ক্র্যাশ করতে পারেIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224)।
- নিশ্চিত করুন যে
- Cronet এক্সটেনশন:
CronetDataSource-এSocketTimeoutExceptionসংক্রান্ত সমস্যার সমাধান করুন। Cronet-এর কিছু ভার্সনে, কলব্যাকের মাধ্যমে দেওয়া অনুরোধ সবসময় এক হয় না। এর ফলে কলব্যাক সম্পূর্ণ হয় না এবং অনুরোধের সময়সীমা শেষ হয়ে যায় (https://issuetracker.google.com/328442628)।
- HLS এক্সটেনশন:
- অসম্পূর্ণতার জন্য অপেক্ষা করা বাকি থাকা EMSG স্যাম্পেল ভুল অফসেট সহ
HlsSampleStreamWrapper-এ ডেলিগেট করার ফলেIndexOutOfBoundsExceptionবাIllegalArgumentException(#1002) হওয়ার সমস্যা সমাধান করা হয়েছে। - LL-HLS স্ট্রিমের জন্য প্রাইমারি নয় এমন প্লেলিস্ট বারবার রিলোড হওয়ার সমস্যার সমাধান করা হয়েছে (#১২৪০)।
- ইনিশিয়ালাইজেশন সেগমেন্ট সহ HLS-এর জন্য CMCD চালু করার সময় হওয়া বাগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে,
যার ফলে
Source ErrorএবংIllegalArgumentExceptionহয়েছে। - লাইভ প্লেব্যাক চলাকালীন প্রাইমারি নয় এমন প্লেলিস্ট রিফ্রেশ না হওয়ার সমস্যা সমাধান করা হয়েছে (#১২৪০)।
- HLS লাইভ স্ট্রিমের জন্য CMCD চালু করার ফলে যে সমস্যা হয় তা সমাধান করুন
ArrayIndexOutOfBoundsException(#১৩৯৫)।
- অসম্পূর্ণতার জন্য অপেক্ষা করা বাকি থাকা EMSG স্যাম্পেল ভুল অফসেট সহ
- DASH এক্সটেনশন:
- Cast এক্সটেনশন:
- Media3 মিডিয়া আইটেমে
MediaQueueItem-এর অ্যালবাম টাইটেলকে আর্টিস্টে কনভার্ট করে দেওয়ার বাগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১২৫৫)।
- Media3 মিডিয়া আইটেমে
- টেস্ট ইউটিলিটি:
FakeRenderer-এonInit()এবংonRelease()প্রয়োগ করুন।TestPlayerRunHelper.runUntil()/playUntil()পদ্ধতি পরিবর্তন করুন যাতে নন-ফেটাল সমস্যার (যেমন,AnalyticsListener.onVideoCodecError()-এ রিপোর্ট করা সমস্যা) ক্ষেত্রে ব্যর্থ হয়। এই আচরণ বন্ধ করতে নতুনTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()পদ্ধতি চেইন ব্যবহার করুন।
- ডেমো অ্যাপ:
- শর্ট ফর্ম ডেমো অ্যাপে
DefaultPreloadManagerব্যবহার করুন। - কমান্ড লাইন থেকে
Intentআর্গুমেন্ট সহ রিপিট মোড সেট করার অনুমতি দিন (#১২৬৬)। - ডিভাইসে কাজ করলে,
HttpDataSourceহিসেবেHttpEngineDataSourceব্যবহার করুন।
- শর্ট ফর্ম ডেমো অ্যাপে
- বাতিল করা চিহ্ন সরান:
CronetDataSourceFactoryসরান। পরিবর্তেCronetDataSource.Factoryব্যবহার করুন।- কিছু
DataSpecকনস্ট্রাক্টর সরান। পরিবর্তেDataSpec.Builderব্যবহার করুন। DefaultHttpDataSource,OkHttpDataSourceএবংCronetDataSourceথেকেsetContentTypePredicate(Predicate)পদ্ধতি সরিয়ে দিন। পরিবর্তে প্রতিটিXXXDataSource.Factory-এ সমতুল্য পদ্ধতি ব্যবহার করুন।OkHttpDataSourceকনস্ট্রাক্টর ওOkHttpDataSourceFactoryসরান। পরিবর্তেOkHttpDataSource.Factoryব্যবহার করুন।PlayerMessage.setHandler(Handler)সরান। পরিবর্তেsetLooper(Looper)ব্যবহার করুন।Timeline.Window.isLiveফিল্ড সরান। পরিবর্তেisLive()পদ্ধতি ব্যবহার করুন।DefaultHttpDataSourceকনস্ট্রাক্টর সরান। পরিবর্তেDefaultHttpDataSource.Factoryব্যবহার করুন।DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MSসরান। পরিবর্তেDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSব্যবহার করুন।MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)সরান। পরিবর্তেMediaCodecInfo.canReuseCodec(Format, Format)ব্যবহার করুন।DrmSessionManager.DUMMYএবংgetDummyDrmSessionManager()পদ্ধতি সরিয়ে দিন। পরিবর্তেDrmSessionManager.DRM_UNSUPPORTEDব্যবহার করুন।AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format)সরান। পরিবর্তেDecoderReuseEvaluationনেয় এমন ওভারলোড ব্যবহার করুন।RendererSupport.FormatSupportIntDef এবংFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPEকনস্ট্যান্ট সরান। পরিবর্তেandroidx.media3.common.C-এ সমতুল্য IntDef এবং কনস্ট্যান্ট ব্যবহার করুন (যেমনC.FORMAT_HANDLED)।Bundleableইন্টারফেস সরান। এর মধ্যে সবBundleable.Creator<Foo> CREATORকনস্ট্যান্ট ফিল্ড সরিয়ে দেওয়া অন্তর্ভুক্ত। পরিবর্তে, কলারদের প্রতিটি ধরনের জন্যBundle toBundle()এবংstatic Foo fromBundle(Bundle)পদ্ধতি ব্যবহার করা উচিত।
Version 1.4.0-rc01
১০ জুলাই, ২০২৪
1.4.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.4.0-beta01
২৬ জুন, ২০২৪
1.4.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.4.0-alpha02
৭ জুন, ২০২৪
1.4.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.4.0-alpha01
১৭ এপ্রিল, ২০২৪
1.4.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.3.0
ভার্সন 1.3.1
১১ এপ্রিল, ২০২৪
androidx.media3:media3-*:1.3.1 রিলিজ করা হয়েছে। ভার্সন 1.3.1-এ এইসব
কমিট আছে।
- কমন লাইব্রেরি:
- লোকালাইজ করা বা অন্যান্য বিকল্প লেবেলের অনুমতি দিতে
Format.labelsযোগ করুন।
- লোকালাইজ করা বা অন্যান্য বিকল্প লেবেলের অনুমতি দিতে
- ExoPlayer:
PreloadMediaPeriodআবার প্রিলোড করা হলে, স্ট্রিম ধরে রাখতে না পারার সমস্যার সমাধান করা হয়েছে।- ট্র্যাক আবার বেছে নেওয়ার সময়, প্লে করার সময়সীমার সাথে
সঠিক
TrackSelectionResultপ্রয়োগ করুন। - মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় প্লেয়িং পিরিয়ড অ্যাডভান্স করার পরেই আগে থেকে চালু করা রেন্ডারার শুরু করুন (#১০১৭)।
DefaultVideoFrameProcessor.Factory.Builder.build()-এর জন্য proguard-keepclasseswithmembersনিয়মে বাদ পড়া রিটার্ন টাইপ যোগ করুন (#১১৮৭)।
- ট্রান্সফর্মার:
- API 30-এর আগে নেগেটিভ প্রেজেন্টেশন টাইমস্ট্যাম্প
MediaMuxerসাপোর্ট না করার কারণে ব্যতিক্রমের জন্য সমাধান যোগ করুন।
- API 30-এর আগে নেগেটিভ প্রেজেন্টেশন টাইমস্ট্যাম্প
- ট্র্যাক বেছে নেওয়া:
DefaultTrackSelector: কম বা সেট না করা ফ্রেম রেটের ভিডিও ট্র্যাকের পরিবর্তে 'যুক্তিযুক্ত' ফ্রেম রেট (>=১০fps) সহ ভিডিও ট্র্যাককে অগ্রাধিকার দিন। এটি নিশ্চিত করে যে প্লেয়ার মোশন ফটো থেকে এক্সট্র্যাক্ট করা MP4-এ 'আসল' ভিডিও ট্র্যাক বেছে নেয় যেটিতে দুটি HEVC ট্র্যাক থাকতে পারে, যার মধ্যে একটির রেজোলিউশন বেশি কিন্তু ফ্রেমের সংখ্যা খুব কম (#১০৫১)।
- এক্সট্র্যাক্টর:
- WAV ফাইল থেকে বিজোড়-সাইজের চাঙ্ক পড়ার সময় প্যাডিং এড়ানো না যাওয়ার সমস্যা সমাধান করা হয়েছে (#1117)।
- MP3: মেটাডেটা ফ্রেম থেকে
Format.averageBitrateপপুলেট করুন, যেমনXINGএবংVBRI। - MPEG-TS: স্যাম্পেল সারিতে স্ট্রিমের শেষ অ্যাক্সেস ইউনিট পাস করার মাধ্যমে শেষ ফ্রেমটি রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করার উদ্দেশ্যে করা একটি পরিবর্তন ফিরিয়ে আনা (#7909)। এই পরিবর্তনের ফলে I-ফ্রেম-অনলি HLS স্ট্রিম (#১১৫০) এবং H.262 HLS স্ট্রিম (#১১২৬) সংক্রান্ত নতুন সমস্যা দেখা দিয়েছে।
- অডিও:
- অফলোড মোডে অডিও ট্র্যাক শুরু করতে না পারলে, অফলোড বন্ধ করে রেন্ডারার রিকভারির অনুমতি দিন।
- ভিডিও:
- Galaxy Tab S7 FE, Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন, যার ফলে 60fps H265 স্ট্রিমকে 'কাজ করে না' হিসেবে চিহ্নিত করা হয়
- এমন সমাধান যোগ করুন যা নিশ্চিত করে যে টানেলিং করার সময় প্রথম ফ্রেমটি সর্বদা রেন্ডার করা হয়, এমনকি ডিভাইসটি API (#1169) দ্বারা প্রয়োজনীয় হিসাবে এটি অটোমেটিক না করলেও। (#966)।
- HDR কালার তথ্য হ্যান্ডেল করার সময় কোডেক ঠিকমতো কাজ না করা এবং SDR ভিডিও ট্র্যাকের জন্য অ্যাডাপ্টিভ ফর্ম্যাট সুইচ করতে না পারার সমস্যা সমাধান করা হয়েছে (#1158)।
- টেক্সট:
- WebVTT: সরাসরি পরপর কিউ থেকে
WebvttParser.parse-এর অতিরিক্তCuesWithTimingইনস্ট্যান্স তৈরি হওয়া আটকান (#১১৭৭)।
- WebVTT: সরাসরি পরপর কিউ থেকে
- DRM:
NoSuchMethodError-এর জন্য বিকল্প সমাধান যাResourceBusyExceptionবাNotProvisionedException-এর পরিবর্তেMediaDrmফ্রেমওয়ার্কের মাধ্যমে কিছু Android 14 ডিভাইসে থ্রো করা যেতে পারে (#1145)।
- প্রভাব:
- কালার স্পেস কনভার্ট করার মাধ্যমে উন্নত PQ থেকে SDR টোন-ম্যাপিং।
- সেশন:
- UI:
Localeকোনও ডিসপ্লে নাম শনাক্ত করতে না পারলে, অডিও ট্র্যাকের ভাষার নাম অন্তর্ভুক্ত করার জন্য ফলব্যাক (#৯৮৮)।
- DASH এক্সটেনশন:
- ম্যানিফেস্ট থেকে
Format.labels-এ সবLabelএলিমেন্ট পপুলেট করুন (#১০৫৪)।
- ম্যানিফেস্ট থেকে
- RTSP এক্সটেনশন:
- SDP পার্সিংয়ে খালি সেশন সংক্রান্ত তথ্য ভ্যালু (i-ট্যাগ) এড়িয়ে যান (#১০৮৭)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
- সাধারণত, MIDI এক্সটেনশনকে লোকাল ডিপেন্ডেন্সি হিসেবে বন্ধ করুন কারণ এটির জন্য অতিরিক্ত Maven রিপোজিটরি কনফিগার করতে হয়। যেসব ব্যবহারকারীর স্থানীয় ডিপেন্ডেন্সি থেকে এই মডিউল প্রয়োজন তারা এটি আবার চালু করতে পারবেন।
ভার্সন 1.3.0
৬ মার্চ, ২০২৪
androidx.media3:media3-*:1.3.0 রিলিজ করা হয়েছে। ভার্সন 1.3.0-এ এইসব
কমিট রয়েছে।
- কমন লাইব্রেরি:
android.resource://package/[type/]nameর রিসোর্স URI-এর জন্য সহায়তা প্রয়োগ করুন যেখানেpackageবর্তমান অ্যাপ্লিকেশনের প্যাকেজ থেকে আলাদা। এটি কাজ করার জন্য সবসময় ডকুমেন্ট করা হয়েছে, কিন্তু এখন পর্যন্ত সঠিকভাবে প্রয়োগ করা হয়নি।- অ্যাপ কোড দ্বারা সেট করা বা মিডিয়া থেকে পড়া MIME-এর ধরনকে সম্পূর্ণ ছোট হাতের অক্ষরে নর্মালাইজ করুন।
AdPlaybackState-এ একটিUri-এর পরিবর্তে সম্পূর্ণMediaItem-এর মাধ্যমে বিজ্ঞাপন নির্ধারণ করুন।minSdkবাড়িয়ে ১৯ (Android KitKat) করুন। এটি অন্যান্য সব AndroidX লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ এবং আমাদের AndroidX ডিপেন্ডেন্সির লেটেস্ট ভার্সনে আপগ্রেড করার জন্য প্রয়োজন।artworkUriএবংartworkDataদুটিতেইMediaMetadata.Builder.populate(MediaMetadata)-এ পপুলেট করুন যখন তাদের মধ্যে অন্তত একটি নন-নাল (#964) হয়।
- ExoPlayer:
PreloadMediaSourceএবংPreloadMediaPeriodযোগ করুন যা অ্যাপকে প্লেব্যাকের আগে একটি নির্দিষ্ট শুরুর অবস্থানে কন্টেন্ট মিডিয়া সোর্স প্রিলোড করার অনুমতি দেয়।PreloadMediaSourceকন্টেন্ট মিডিয়া সোর্সকেTimelineরিসিভ করার জন্য প্রস্তুত করে, প্রদত্ত শুরুর পজিশনে পিরিয়ড প্রস্তুত ও ক্যাশে করে, ট্র্যাক বেছে নেয় এবং পিরিয়ডের জন্য মিডিয়া ডেটা লোড করে। অ্যাপPreloadMediaSource.PreloadControlপ্রয়োগ করে প্রিলোড প্রোগ্রেস কন্ট্রোল করে এবং প্লেব্যাকের জন্য প্লেয়ারে প্রিলোড করা সোর্স সেট করে।ExoPlayer.setImageOutputযোগ করুন যা অ্যাপকেImageRenderer.ImageOutputসেট করার অনুমতি দেয়।DefaultRenderersFactoryএখন প্লেয়ারকেImageRendererপ্রদান করে ডিফল্ট হিসেবে নালImageOutputএবংImageDecoder.Factory.DEFAULTসহ।- সাইলেন্স এড়িয়ে গেলে
Player.Listener.onPositionDiscontinuityইভেন্ট এমিট করুন (#765)। - এক্সট্র্যাক্ট করার সময় সাবটাইটেল পার্স করার জন্য এক্সপেরিমেন্টাল সহায়তা যোগ করুন। আপনি
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()ব্যবহার করে এটি চালু করতে পারবেন। PreloadMediaSource-এর সাথে অ্যাডাপ্টিভ মিডিয়া সোর্স কাজ করে।HttpEngineDataSource, একটিHttpDataSourceপ্রয়োগ করুন HttpEngine API ব্যবহার করে।CompositeSequenceableLoaderসাবক্লাসিং প্রতিরোধ করুন। এই কম্পোনেন্টটি আগে এক্সটেনসিবল করা হয়েছিল কিন্তু লাইব্রেরির মধ্যে কখনই সাবক্লাস করা হয়নি। ডেকোরেটর প্যাটার্ন ব্যবহার করে ইনস্ট্যান্স র্যাপ করে এবং কাস্টমCompositeSequenceableLoaderFactoryপ্রয়োগ করে কাস্টমাইজ করা যেতে পারে।- একই সময় বারবার উল্লেখ করার ফলে এই আইটেম থেকে মেটাডেটা মুছে যাওয়ার সমস্যার সমাধান করা হয়েছে (#১০০৭)।
BundledChunkExtractor.FactoryএবংDefaultHlsExtractorFactory-এexperimentalSetSubtitleParserFactoryমেথডের নাম পরিবর্তন করেsetSubtitleParserFactoryকরুন এবংnullপাস করার অনুমতি দেবেন না। পার্সিংয়ের আচরণ নিয়ন্ত্রণ করতে নতুনexperimentalParseSubtitlesDuringExtraction(boolean)পদ্ধতি ব্যবহার করুন।- এক্সট্র্যাক্ট করার সময় ব্যবহৃত
SubtitleParser.Factoryকাস্টমাইজ করার জন্য সহায়তা যোগ করুন।MediaSource.Factory.setSubtitleParserFactory()-এর মাধ্যমে এটি অর্জন করা যেতে পারে। MergingMediaSourceথেকে জেনারেট করা সবFormat.idফিল্ডে সোর্স প্রিফিক্স যোগ করুন। এটি কোন সোর্স থেকেFormat(#৮৮৩) তৈরি হয়েছে তা শনাক্ত করতে সাহায্য করে।- কাস্টম কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) কী-এর নাম যাচাই করার জন্য ব্যবহৃত regex-এ শুধুমাত্র হাইফেন চেক করার জন্য এটি পরিবর্তন করে সমস্যার সমাধান করুন (#১০২৮)।
- CMCD কোয়েরি প্যারামিটার ডবল-এনকোড করা বন্ধ করুন (#১০৭৫)।
- ট্রান্সফর্মার:
- H.265/HEVC SEF স্লো মোশন ভিডিও ফ্ল্যাট করার জন্য সহায়তা যোগ করুন।
- ট্রান্সমিক্সিংয়ের স্পিড বাড়ান, বিশেষত 'ভিডিও সরান' এডিটের জন্য।
- আউটপুট ফাইল যাতে ভিডিও ফ্রেম থেকে শুরু হয় তা নিশ্চিত করতে API যোগ করুন। এটি ট্রিম করার অপারেশনের আউটপুটকে প্লেয়ার ইমপ্লিমেন্টেশনের সাথে আরও মানানসই করে তুলতে পারে যা প্রেজেন্টেশন টাইমস্ট্যাম্প (#829) না আসা পর্যন্ত প্রথম ভিডিও ফ্রেম দেখায় না।
- সিঙ্গেল অ্যাসেট MP4 ট্রিম অপারেশন অপ্টিমাইজ করার জন্য সহায়তা যোগ করুন।
- আউটপুট ফাইলে ভিডিও ফ্রেমের প্রথম টাইমস্ট্যাম্প আছে কিনা তা নিশ্চিত করতে সহায়তা যোগ করুন। iOS ভিত্তিক প্লেয়ারে (#829) কালো ফ্রেম দিয়ে শুরু হওয়া আউটপুট ফাইল সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
- ট্র্যাক বেছে নেওয়া:
- ইমেজ ট্র্যাক বেছে নেওয়ার সুবিধা চালু করতে
DefaultTrackSelector.selectImageTrackযোগ করুন। - ইমেজ ট্র্যাক ও ভিডিও ট্র্যাক, দুটিই উপলভ্য থাকলে, ইমেজ ট্র্যাক বেছে নেওয়া হবে কিনা তা নির্ধারণ করতে
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledযোগ করুন। ডিফল্ট ভ্যালু হলfalseযার অর্থ ভিডিও ট্র্যাক বেছে নেওয়াকে অগ্রাধিকার দেওয়া হয়।
- ইমেজ ট্র্যাক বেছে নেওয়ার সুবিধা চালু করতে
- এক্সট্র্যাক্টর:
ColorInfo.colorSpace,ColorInfo.colorTransfer, এবংColorInfo.colorRangeভ্যালু (#692) ফিরিয়ে আনতে MP4 এক্সট্র্যাক্টরে অতিরিক্ত AV1C পার্সিং যোগ করুন।- MP3:
Infoহেডার সহ ফাইলের জন্য কনস্ট্যান্ট বিটরেট (CBR) ব্যবহার করুন (Xingহেডারের সমতুল্য CBR)। আগে আমরাInfoহেডার থেকে সিক টেবিল ব্যবহার করতাম, কিন্তু এর ফলে আমরা যদি এটি উপেক্ষা করি এবং ফাইলটি CBR বলে ধরে নিই, তার চেয়ে কম সুনির্দিষ্ট সিকিং হয়। - MPEG2-TS: DTS, DTS-LBR এবং DTS:X Profile2 সাপোর্ট যোগ করুন (#২৭৫)।
- TS ডেসক্রিপ্টর থেকে অডিওর ধরন এক্সট্র্যাক্ট করে রোল ফ্ল্যাগে ম্যাপ করা, যাতে ব্যবহারকারীরা আরও ভালভাবে জেনে অডিও ট্র্যাক বেছে নিতে পারেন (#973)।
- অডিও:
- ভিডিও:
MediaCodecVideoRendererকনস্ট্রাক্টর পরিবর্তন করুন যা একটিVideoFrameProcessor.Factoryআর্গুমেন্ট নেয় এবং এটিকে এমন একটি কনস্ট্রাক্টর দিয়ে প্রতিস্থাপন করুন যা একটিVideoSinkProviderআর্গুমেন্ট নেয়। যেসব অ্যাপ কাস্টমVideoFrameProcessor.Factoryইনজেক্ট করতে চায়, সেগুলিCompositingVideoSinkProviderইনস্ট্যানশিয়েট করতে পারে যা কাস্টমVideoFrameProcessor.Factoryব্যবহার করে এবং ভিডিও সিঙ্ক প্রোভাইডারকেMediaCodecVideoRenderer-এ পাস করে।
- টেক্সট:
DefaultExtractorsFactory.setTextTrackTranscodingEnabled(#৮৩৬) ব্যবহার করার সময়Tried to marshall a Parcel that contained Binder objectsসমস্যা সমাধান করতে বিটম্যাপ কিউয়ের সিরিয়ালাইজেশন সংক্রান্ত সমস্যার সমাধান করুন।- CEA-708:
rowLockভ্যালু উপেক্ষা করুন। CEA-708-E S-2023 স্পেসিফিকেশন অনুযায়ী, স্ট্রিমে যে ভ্যালুই থাকুক না কেন,rowLockএবংcolumnLockদুটিকেই সত্য বলে ধরে নিতে হবে (columnLockসাপোর্ট প্রয়োগ করা হয়নি, তাই এটিকে কার্যকরভাবে সবসময় মিথ্যা বলে ধরে নেওয়া হয়)।
- ছবি:
- DASH থাম্বনেলের জন্য সহায়তা যোগ করুন। গ্রিড ছবি ক্রপ করা হয় এবং
ImageOutput-কে আলাদা থাম্বনেল দেওয়া হয় যা তাদের প্রেজেন্টেশন সময়ের কাছাকাছি।
- DASH থাম্বনেলের জন্য সহায়তা যোগ করুন। গ্রিড ছবি ক্রপ করা হয় এবং
- DRM:
- ডিফল্ট হিসেবে, DRM কন্টেন্টে 'ক্লিয়ার লিড' আনএনক্রিপ্টেড স্যাম্পেল অবিলম্বে চালান,
এমনকি পরবর্তী এনক্রিপ্টেড স্যাম্পেলের 'কী' এখনও রেডি না থাকলেও। এর ফলে প্লেব্যাক পজিশন এনক্রিপ্ট করা স্যাম্পেলে পৌঁছানোর পরেও যদি'কী' প্রস্তুত না থাকে,
তাহলে প্লেব্যাক মাঝপথে বন্ধ হয়ে যেতে পারে (তবে আগে
এই পয়েন্টে প্লেব্যাক শুরুই হতো না)। এই আচরণ
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyবাDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys-এর মাধ্যমে বন্ধ করা যেতে পারে।- IMA এক্সটেনশন:
- উপযুক্ত ফাইল এক্সটেনশন ছাড়া DASH এবং HLS বিজ্ঞাপন চালানো যাবে না, এই সমস্যার সমাধান করুন।
- ডিফল্ট হিসেবে, DRM কন্টেন্টে 'ক্লিয়ার লিড' আনএনক্রিপ্টেড স্যাম্পেল অবিলম্বে চালান,
এমনকি পরবর্তী এনক্রিপ্টেড স্যাম্পেলের 'কী' এখনও রেডি না থাকলেও। এর ফলে প্লেব্যাক পজিশন এনক্রিপ্ট করা স্যাম্পেলে পৌঁছানোর পরেও যদি'কী' প্রস্তুত না থাকে,
তাহলে প্লেব্যাক মাঝপথে বন্ধ হয়ে যেতে পারে (তবে আগে
এই পয়েন্টে প্লেব্যাক শুরুই হতো না)। এই আচরণ
- সেশন:
- TV অ্যাপের জন্য ডবল-ক্লিক শনাক্তকরণ বন্ধ করুন (#962)।
- মিডিয়া কন্ট্রোলার ও সেশনের মধ্যে শুধু নন-নাল এক্সট্রা সহ
MediaItem.RequestMetadataট্রান্সমিট না হওয়ার সমস্যা সমাধান করুন। MediaLibrarySession.Builder-এ কনস্ট্রাক্টর যোগ করুন যাMediaLibraryService-এর পরিবর্তে শুধুমাত্রContextনেয়।
- HLS এক্সটেনশন:
HlsMediaPeriod-এর দৃশ্যমানতা কমিয়ে প্যাকেজ-প্রাইভেট করুন। এই ধরনের HLS প্যাকেজের বাইরে থেকে সরাসরি নির্ভর করা উচিত নয়।- আরও দক্ষতার সাথে সেগমেন্টের শুরুতে সিঙ্ক করার সমস্যা সমাধান করা হয়েছে (#১০৩১)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
- MIDI ডিকোডার: SysEx ইভেন্ট মেসেজ উপেক্ষা করুন (#৭১০)।
- টেস্ট ইউটিলিটি:
TestPlayerRunHelper.playUntilPosition-এ প্লেব্যাক পজ করবেন না। টেস্ট প্লেব্যাককে প্লেয়িং অবস্থায় রাখে, কিন্তু টেস্ট অ্যাসারশন ও আরও অ্যাকশন যোগ করতে না পারা পর্যন্ত প্রোগ্রেস সাসপেন্ড করে রাখে।
- ডেমো অ্যাপ:
- শর্ট-ফর্ম কন্টেন্ট ব্যবহারের কেসের সাথে
PreloadMediaSource-এর ব্যবহার ডেমো করতে একটি শর্টফর্ম ডেমো মডিউল যোগ করুন।
- শর্ট-ফর্ম কন্টেন্ট ব্যবহারের কেসের সাথে
Version 1.3.0-rc01
২২ ফেব্রুয়ারি, ২০২৪
1.3.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.3.0-beta01
৭ ফেব্রুয়ারি, ২০২৪
1.3.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.3.0-alpha01
১৫ জানুয়ারি, ২০২৪
1.3.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন ১.২.০
ভার্সন ১.২.১
৯ জানুয়ারি, ২০২৪
- ExoPlayer:
LiveConfiguration.min/maxOffsetরেঞ্জের বাইরে ম্যানুয়ালি খোঁজার সময় অফসেটকেmin/maxOffset-এ অ্যাডজাস্ট করার সমস্যা সমাধান করা হয়েছে।- ৩, ৫, ৬, ৭ ও ৮ চ্যানেলের জন্য OPUS ও VORBIS চ্যানেল লেআউট ভুল হওয়ার সমস্যা সমাধান করা হয়েছে (#৮৩৯৬)।
- লাইভ স্ট্রিমে শূন্যে খোঁজার পরে ট্র্যাক বেছে নেওয়ার ফলে ভুল করে স্ট্রিমটি তার ডিফল্ট পজিশনে শুরু হওয়ার সমস্যা সমাধান করা হয়েছে (#৯৩৪৭)।
CmcdData.Factory-এর নতুন ইনস্ট্যান্স চাঙ্ক সোর্স থেকেbufferedDurationUs-এর জন্য নেগেটিভ ভ্যালু পাচ্ছিল, যার ফলেIllegalArgumentException(#888) হচ্ছিল। এই সমস্যার সমাধান করা হয়েছে।
- ট্রান্সফর্মার:
- অপারেটিং রেট বেশি সেট করার কারণে কনফিগারেশনের সময় এনকোডার যে সমস্যা তৈরি করে তা সমাধান করুন।
- এক্সট্র্যাক্টর:
- JPEG মোশন ফটোতে সেকেন্ডারি (যা চালানো যায় না) HEVC ট্র্যাককে
ROLE_FLAG_ALTERNATEহিসেবে চিহ্নিত করুন যাতে বেশি রেজোলিউশনের কারণে প্লেব্যাকের জন্য সেগুলি অটোমেটিক বেছে নেওয়া না হয়। - TS H264 স্ট্রিমের জন্য ভুল কীফ্রেম শনাক্তকরণ সংক্রান্ত সমস্যার সমাধান করা (#864)।
- TS স্ট্রিমের আনুমানিক সময়সীমা ঠিক করুন যা ৪৭৭২১ সেকেন্ডের চেয়ে বেশি (#৮৫৫)।
- JPEG মোশন ফটোতে সেকেন্ডারি (যা চালানো যায় না) HEVC ট্র্যাককে
- অডিও:
SilenceSkippingAudioProcessor-এর জন্য EOS হ্যান্ডেল করার সমস্যা সমাধান করা হয়েছে, যখন একাধিকবার কল করা হয় (#712)।
- ভিডিও:
- Galaxy Tab S7 FE, Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন, যার ফলে 60fps AVC স্ট্রিমকে 'কাজ করে না' হিসেবে চিহ্নিত করা হয় (#693)।
- মেটাডেটা:
- Vorbis কমেন্ট থেকে বড় হাতের কী সহ
MediaMetadataশুধুমাত্র পপুলেট হওয়ার সমস্যা সমাধান করা হয়েছে (#876)। - খুব বড় ID3 ফ্রেম পার্স করার সময়
OutOfMemoryErrorক্যাচ করুন, যার অর্থ প্লেব্যাক সম্পূর্ণভাবে ব্যর্থ হওয়ার পরিবর্তে ট্যাগ তথ্য ছাড়াই প্লেব্যাক চালিয়ে যাওয়া যেতে পারে।
- Vorbis কমেন্ট থেকে বড় হাতের কী সহ
- DRM:
- API 33+ (আগে ওয়ার্কঅ্যারাউন্ড শুধু API 33-এর ক্ষেত্রে
প্রযোজ্য ছিল) (#837)-এ জাল ClearKey
https://default.urlলাইসেন্স URL-এর জন্য ওয়ার্কঅ্যারাউন্ড বাড়ানো হয়েছে। - প্লেয়ারের সাথে সারফেস অ্যাটাচ না করে এনক্রিপ্ট করা থেকে
ক্লিয়ার কন্টেন্টে পরিবর্তন করার সময়
ERROR_DRM_SESSION_NOT_OPENEDসংক্রান্ত সমস্যার সমাধান করুন। ক্লিয়ার কন্টেন্ট চালানোর জন্য সুরক্ষিত ডিকোডার ভুলভাবে ব্যবহার করার কারণে এই সমস্যা হয়েছে।
- API 33+ (আগে ওয়ার্কঅ্যারাউন্ড শুধু API 33-এর ক্ষেত্রে
প্রযোজ্য ছিল) (#837)-এ জাল ClearKey
- সেশন:
MediaMetadataCompatথেকেMediaMetadata.extrasএবংMediaMetadata.extrasথেকেMediaMetadataCompat-এ কাস্টম কী ও ভ্যালু লিখুন (#756, #802)।- লিগ্যাসি কন্ট্রোলারের জন্য ব্রডকাস্টিং
notifyChildrenChangedসংক্রান্ত সমস্যার সমাধান করা (#৬৪৪)। - বিজ্ঞপ্তির বন্ধ থাকা
setWhenটাইমারের জন্য নেগেটিভ সময় সেট করার ফলে কিছু ডিভাইসে ক্র্যাশ হওয়ার সমস্যা সমাধান করা হয়েছে (#903)। - প্রথম বিজ্ঞপ্তি আপডেট করার অনুরোধ করা হলে, মিডিয়া বিজ্ঞপ্তি কন্ট্রোলার
কানেক্ট করার প্রসেস সম্পূর্ণ না করলে,
IllegalStateExceptionসংক্রান্ত সমস্যার সমাধান করুন (#917)।
- UI:
- DASH এক্সটেনশন:
- DASH ম্যানিফেস্টে Dolby-র জন্য চ্যানেল সংখ্যা ৫ হিসেবে "f800" পার্স করুন (#৬৮৮)।
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
- Cast এক্সটেনশন:
- কাস্ট ডিভাইসে মিডিয়া লোড করার সময় ক্র্যাশ হওয়া থেকে অ্যাপকে বাঁচাতে
Timeline-এর স্যানিটাইজ ক্রিয়েশন (#৭০৮)।
- কাস্ট ডিভাইসে মিডিয়া লোড করার সময় ক্র্যাশ হওয়া থেকে অ্যাপকে বাঁচাতে
ভার্সন ১.২.০
১৫ নভেম্বর, ২০২৩
- কমন লাইব্রেরি:
Log.Loggerইন্টারফেসের পদ্ধতিতে একটি@Nullable Throwableপ্যারামিটার যোগ করুন। এইসব পদ্ধতিতেmessageপ্যারামিটারেLog.{d,i,w,e}()পদ্ধতিতে পাস করাThrowableসম্পর্কে আর কোনও তথ্য থাকে না, তাই প্রয়োজন হলে (সম্ভবতLogger.appendThrowableString(String, Throwable)ব্যবহার করে) এই তথ্য ম্যানুয়ালি যোগ করতে হবে।- Kotlin-এর কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান করুন যেখানে নালেবেল জেনেরিক টাইপ প্যারামিটার
এবং নালেবেল অ্যারে এলিমেন্ট টাইপ নালেবেল হিসেবে শনাক্ত করা হয় না। উদাহরণ
হল
TrackSelectorResultএবংSimpleDecoderমেথড প্যারামিটার (#6792)। Util.shouldShowPlayButton-এ ডিফল্ট UI ও বিজ্ঞপ্তি দেখানোর আচরণ পরিবর্তন করুন যাতে প্লেব্যাক সাময়িকভাবে বন্ধ থাকলে (যেমন, ক্ষণস্থায়ী অডিও ফোকাস হারিয়ে যাওয়ার কারণে) "চালান" বোতাম দেখানো যায়।PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)বাMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#১১২১৩) ব্যবহার করে পুরনো আচরণ বজায় রাখা যেতে পারে।- https://issuetracker.google.com/251172715
সমস্যার সমাধান করতে
androidx.annotation:annotation-experimentalথেকে1.3.1-এ আপগ্রেড করুন। ExoPlayer.setAudioAttributes-কেPlayerইন্টারফেসে সরান।
- ExoPlayer:
- ডিকোড-অনলি স্যাম্পেল সঠিকভাবে শনাক্ত না করার কারণে AC4 স্ট্রিমে সিকিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#11000)।
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput-এর মাধ্যমে এই ফিচার চালু করা হলে, অনুপযুক্ত অডিও আউটপুট ডিভাইসে (যেমন, Wear OS ডিভাইসে বিল্ট-ইন স্পিকার) প্লেব্যাক বন্ধ করার সুবিধা যোগ করুন। উপযুক্ত অডিও আউটপুট উপলভ্য না থাকলে অথবা প্লেব্যাক চলাকালীন সব উপযুক্ত আউটপুট ডিসকানেক্ট হয়ে গেলে, প্লেব্যাক বন্ধ করার কারণ হিসেবেPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTআপডেট করা হবে। উপযুক্ত আউটপুট কানেক্ট করা হলে, সাপ্রেশন কারণ সরিয়ে দেওয়া হবে।Player.replaceMediaItem(s)-এর মাধ্যমে তৈরি করার পরেMediaItemআপডেট গ্রহণ করতেMediaSource.canUpdateMediaItemএবংMediaSource.updateMediaItemযোগ করুন।Player.replaceMediaItem(s)-এর মাধ্যমে লাইব্রেরি দ্বারা প্রদান করা সবMediaSourceক্লাসের জন্যMediaItemআপডেট করার অনুমতি দিন (#৩৩, #৯৯৭৮)।MimeTypes.TEXT_EXOPLAYER_CUES-এর নাম পরিবর্তন করেMimeTypes.APPLICATION_MEDIA3_CUESকরুন।PngExtractorযোগ করুন যা একটি স্যাম্পেল হিসেবেTrackOutput-এ সম্পূর্ণ PNG ফাইল পাঠায় ও পড়ে।SequenceableLoaderইন্টারফেসেSequenceableLoader.continueLoading(long)পদ্ধতি উন্নত করেSequenceableLoader.continueLoading(LoadingInfo loadingInfo)করুন।LoadingInfo-এ অতিরিক্ত প্যারামিটার আছে, যার মধ্যে আগে থেকে থাকাplaybackPositionUs-এর সাথেplaybackSpeedএবংlastRebufferRealtimeMsঅন্তর্ভুক্ত।ChunkSourceইন্টারফেসেChunkSource.getNextChunk(long, long, List, ChunkHolder)পদ্ধতি উন্নত করেChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)করুন।- কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: বাফার
স্টারভেশন (
bs), ডেডলাইন (dl), প্লেব্যাক রেট (pr) এবং স্টার্টআপ (su) (#8699)। ColorInfo-এ লুমা ও ক্রোমা বিটডেপথ যোগ করুন (#৪৯১)।- কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: পরবর্তী
অবজেক্ট অনুরোধ (
nor) এবং পরবর্তী রেঞ্জ অনুরোধ (nrr) (#8699). - কোয়েরি প্যারামিটার (#553) ব্যবহার করে কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) ডেটা ট্রান্সমিট করার জন্য ফাংশনালিটি যোগ করুন।
ExperimentalBandwidthMeter-এConcurrentModificationExceptionসংক্রান্ত সমস্যার সমাধান করুন (#612)।CompositeMediaSource.getMediaTimeForChildMediaTime-এMediaPeriodIdপ্যারামিটার যোগ করুন।ConcatenatingMediaSource2-এClippingMediaSource(এবং পিরিয়ড/উইন্ডো টাইম অফসেট সহ অন্যান্য সোর্স) কাজ করে (#11226)।BaseRenderer.onStreamChanged()পরিবর্তন করুন যাতেMediaPeriodIdআর্গুমেন্টও পাওয়া যায়।
- ট্রান্সফর্মার:
- ছবি ইনপুটের জন্য EXIF রোটেশন ডেটা পার্স করুন।
TransformationRequest.HdrModeঅ্যানোটেশনের ধরন এবং এর সাথে যুক্ত কনস্ট্যান্ট সরিয়ে দিন। পরিবর্তেComposition.HdrModeএবং এর সাথে সম্পর্কিত কনস্ট্যান্ট ব্যবহার করুন।- ঘূর্ণন সংক্রান্ত সমস্যার সমাধান করতে
OverlaySettingsসরল করুন। SampleConsumer.queueInputBitmap-এরframeRateওdurationUsপ্যারামিটার পরিবর্তন করেTimestampIteratorকরা হয়েছে।
- ট্র্যাক বেছে নেওয়া:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessযোগ করুন যাতে নন-সিমলেস অ্যাডাপ্টেশন স্পষ্টভাবে অনুমোদন বা বাতিল করা যায়। ডিফল্টtrue-এর বর্তমান আচরণে থাকে।
- এক্সট্র্যাক্টর:
- MPEG-TS: স্যাম্পেল সারিতে স্ট্রিমের শেষ অ্যাক্সেস ইউনিট পাস করার মাধ্যমে শেষ ফ্রেমটি রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করুন (#৭৯০৯)।
rotationDegreesনির্ধারণ করার সময় টাইপো ঠিক করুন।projectionPosePitchথেকেprojectionPoseRoll-এ পরিবর্তন করা হয়েছে (#৪৬১)।Extractorইনস্ট্যান্স সরাসরিinstanceof-এর মাধ্যমে পরীক্ষা করা যাবে, এই অনুমান সরিয়ে দিন। আপনি যদিExtractor-এর ইমপ্লিমেন্টেশন সংক্রান্ত বিবরণের রানটাইম অ্যাক্সেস চান, তাহলে আপনাকে প্রথমেExtractor.getUnderlyingInstance-এ কল করতে হবে।BmpExtractorযোগ করুন।WebpExtractorযোগ করুন।HeifExtractorযোগ করুন।Mp4Extractor-এ QuickTime classic সাপোর্ট যোগ করুন।
- অডিও:
- MP4 ও Matroska-তে ২৪/৩২-বিট বিগ-এন্ডিয়ান PCM-এর জন্য সহায়তা যোগ করুন এবং MP4-এ
lpcm-এর জন্য PCM এনকোডিং পার্স করুন। - MP4-এ Vorbis অডিও এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন।
AudioSink.getFormatOffloadSupport(Format)যোগ করুন যাDefaultAudioOffloadSupportProvider-এর মাধ্যমে সিঙ্ক ফর্ম্যাটের জন্য অফলোড সাপোর্টের লেভেল ফিরিয়ে আনে। এটি নতুনAudioOffloadSupportফিরিয়ে দেয় যাতেisFormatSupported,isGaplessSupportedএবংisSpeedChangeSupportedথাকে।AudioSink.setOffloadMode()যোগ করুন যার মাধ্যমে অডিও সিঙ্কে অফলোড কনফিগারেশন কনফিগার করা হয়। ডিফল্ট হলAudioSink.OFFLOAD_MODE_DISABLED।TrackSelectionParameters-এsetAudioOffloadPreference-এর মাধ্যমে অফলোড চালু করা যেতে পারে। সেট করা পছন্দ চালু করতে হলে, ডিভাইসটি ফর্ম্যাটের জন্য অফলোড সমর্থন করে এবং ট্র্যাক নির্বাচন একটি একক অডিও ট্র্যাক, তাহলে অডিও অফলোড চালু করা হবে।audioOffloadModePreferenceযদিAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED-এ সেট করা থাকে, তাহলেDefaultTrackSelectorশুধুমাত্র একটি অডিও ট্র্যাক বেছে নেবে এবং শুধুমাত্র সেই ট্র্যাকের ফর্ম্যাট অফলোডে কাজ করলে তবেই এটি হবে। অফলোডে কোনও অডিও ট্র্যাক কাজ না করলে, কোনও ট্র্যাক বেছে নেওয়া হবে না।- ট্র্যাক ট্রানজিশনের পরে প্লেব্যাক পজিশন সংক্রান্ত সমস্যার কারণে API লেভেল 33-এর আগের ভার্সনে অফলোডের জন্য গ্যাপলেস সাপোর্ট বন্ধ করা হচ্ছে।
DefaultRenderersFactory.buildAudioSinkমেথড সিগনেচার থেকেenableOffloadপ্যারামিটার সরান।DefaultAudioSink.Builder.setOffloadModeপদ্ধতি সরান।- intdef ভ্যালু সরান
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED। - অফলোড প্লেব্যাকের সময় Opus গ্যাপলেস মেটাডেটার জন্য সহায়তা যোগ করুন।
- প্রথমবার লেখার সময় ব্যর্থ হলে অফলোড বন্ধ করে রেন্ডারার রিকভারির অনুমতি দিন (#৬২৭)।
- শুধুমাত্র-অডিও অফলোড করা প্লেব্যাকের জন্য ডিফল্ট হিসেবে অফলোড শিডিউলিং চালু করুন।
ExoPlayer.experimentalSetOffloadSchedulingEnabledএবংAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChangedমুছুন।onExperimentalSleepingForOffloadChanged-এর নাম পরিবর্তন করেonSleepingForOffloadChangedএবংonExperimentalOffloadedPlayback-এর নাম পরিবর্তন করেonOffloadedPlaybackকরা হয়েছে।- অডিও অফলোড মোড সম্পর্কিত
TrackSelectionParametersইন্টারফেস ও সংজ্ঞা একটি ইনারAudioOffloadPreferencesক্লাসে সরান। AnalyticsListener,AudioRendererEventListenerএবংAudioSink.Listener-এonAudioTrackInitializedএবংonAudioTrackReleasedকলব্যাক যোগ করুন।- DTS Express অডিও বাফার আন্ডারফ্লো সংক্রান্ত সমস্যার সমাধান করা (#650)।
- E-AC3-JOC-এর জন্য ক্ষমতা চেক করার সময়
IllegalArgumentException(#677) থ্রো করার সমস্যা সমাধান করা হয়েছে।
- MP4 ও Matroska-তে ২৪/৩২-বিট বিগ-এন্ডিয়ান PCM-এর জন্য সহায়তা যোগ করুন এবং MP4-এ
- ভিডিও:
MediaCodecVideoRenderer-কে কাস্টমVideoFrameProcessor.Factoryব্যবহার করার অনুমতি দিন।- অডিও স্ট্রিম নেগেটিভ টাইমস্ট্যাম্প দিয়ে শুরু হলে প্রথম ফ্রেম রেন্ডার না হওয়ার সমস্যা সমাধান করা হয়েছে (#২৯১)।
- টেক্সট:
ExoplayerCuesDecoderসরান।sampleMimeType = application/x-media3-cuesসহ টেক্সট ট্র্যাক এখন সরাসরিTextRendererদ্বারা ম্যানেজ করা হয়,SubtitleDecoderইনস্ট্যান্সের প্রয়োজন হয় না।
- মেটাডেটা:
- "শুধুমাত্র ডিকোড" স্যাম্পেলের জন্য
MetadataDecoder.decodeআর কল করা হবে না কারণ প্রয়োগের ফলে যেকোনও উপায়ে নাল রিটার্ন করতে হবে।
- "শুধুমাত্র ডিকোড" স্যাম্পেলের জন্য
- প্রভাব:
- টাইমস্ট্যাম্প অনুযায়ী
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)বিটম্যাপ ইনপুট কিউতে যোগ করুন। VideoFrameProcessor.registerInputStream()-কে নন-ব্লকিং হিসেবে পরিবর্তন করুন। অ্যাপে অবশ্যইVideoFrameProcessor.Listener#onInputStreamRegistered()থাকতে হবে।VideoFrameProcessor.queueInputBitmap-এরframeRateওdurationUsপ্যারামিটার পরিবর্তন করেTimestampIteratorকরা হয়েছে।
- টাইমস্ট্যাম্প অনুযায়ী
- IMA এক্সটেনশন:
- প্লেলিস্টের প্রথম আইটেম নয় এমন মাল্টি-পিরিয়ড DASH লাইভ স্ট্রিম ব্যতিক্রম দেখাতে পারে, এই সমস্যার সমাধান করা হয়েছে (#571)।
AdsLoader.destroy()কল করার আগে StreamManager রিলিজ করুন- IMA SDK ভার্সন 3.31.0-এ আপডেট করুন।
- সেশন:
- বিজ্ঞপ্তি ফোরগ্রাউন্ড সার্ভিস আচরণ
FOREGROUND_SERVICE_IMMEDIATE-এ সেট করুনDefaultMediaNotificationProvider-এ (#১৬৭)। - Samsung ডিভাইসে বন্ধ হয়ে যাওয়া API-এর সাথে সমস্যা এড়াতে শুধুমাত্র
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()API 31-এর উপরের ভার্সন ব্যবহার করুন (#১৬৭)। - উপলভ্য কমান্ড সেট করতে প্রক্সি হিসেবে মিডিয়া বিজ্ঞপ্তি কন্ট্রোলার ব্যবহার করুন এবং বিজ্ঞপ্তি ও প্ল্যাটফর্ম সেশন পপুলেট করতে কাস্টম লেআউট ব্যবহার করা হয়।
- মিডিয়া বোতাম ইভেন্টকে কনভার্ট করুন যা
MediaSessionService.onStartCommand()-এর মাধ্যমে Media3-এর মধ্যে রিসিভ করা হয়, প্ল্যাটফর্ম সেশনে সেগুলি রাউট করার পরিবর্তে এবং Media3-তে ফিরে যান। এর ফলে, কলার কন্ট্রোলার সবসময় মিডিয়া বিজ্ঞপ্তি কন্ট্রোলার হয় এবং অ্যাপগুলি সহজেই সব কাজ করে এমন API লেভেলে একই উপায়ে বিজ্ঞপ্তি থেকে আসা কল শনাক্ত করতে পারে। - পুরনো
MediaSessionCompat-এর সাথে কানেক্ট করা থাকলে,MediaController.getCurrentPosition()এগোচ্ছে না, এই সমস্যার সমাধান করুন। - সুবিধার জন্য
MediaLibrarySession.getSubscribedControllers(mediaId)যোগ করুন। - কন্ট্রোলার যে প্যারেন্ট আইডিতে সাবস্ক্রাইব করে, সেটির উপলভ্যতা নিশ্চিত করতে
MediaLibrarySession.Callback.onSubscribe()ওভাররাইড করুন। সাবস্ক্রিপশন সফল হলে, সেটি গ্রহণ করা হয় এবং ব্রাউজারকে জানানোর জন্য অবিলম্বেnotifyChildrenChanged()-কে কল করা হয় (#৫৬১)। - Automotive OS-এর জন্য সেশন ডেমো মডিউল যোগ করুন এবং Android Auto-এর জন্য সেশন ডেমো চালু করুন।
- মিডিয়া বিজ্ঞপ্তি কন্ট্রোলারের জন্য
COMMAND_GET_TIMELINEউপলভ্য না থাকলে, ফ্রেমওয়ার্ক সেশনের সারি সেট করবেন না। Android Auto ফ্রেমওয়ার্ক সেশন থেকে রিড করা ক্লায়েন্ট কন্ট্রোলার হিসেবে কাজ করার ফলে, Android Auto-র UI-তেqueueবোতামটি দেখা যায় না (#৩৩৯)। SimpleBitmapLoader-এর পরিবর্তে ডিফল্ট হিসেবেDataSourceBitmapLoaderব্যবহার করুন (#২৭১, #৩২৭)।MediaSession.Callback.onMediaButtonEvent(Intent)যোগ করুন যা অ্যাপকে ডিফল্ট মিডিয়া বোতাম ইভেন্ট হ্যান্ডলিং ওভাররাইড করার অনুমতি দেয়।
- বিজ্ঞপ্তি ফোরগ্রাউন্ড সার্ভিস আচরণ
- UI:
- Wear OS ডিভাইসের জন্য
Player.Listenerইমপ্লিমেন্টেশন যোগ করুন যাPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT-এর কারণে প্লেব্যাক সাপ্রেশন ম্যানেজ করে। এটি করার জন্য সিস্টেম ডায়ালগ লঞ্চ করে যাতে ব্যবহারকারী উপযুক্ত অডিও আউটপুট (যেমন, ব্লুটুথ হেডফোন) কানেক্ট করতে পারেন। কনফিগার করা যায় এমন টাইমআউটের (ডিফল্ট হল ৫ মিনিট) মধ্যে উপযুক্ত ডিভাইস কানেক্ট করা হলে, লিসেনার অটোমেটিক প্লেব্যাক আবার চালু করবে।
- Wear OS ডিভাইসের জন্য
- ডাউনলোড:
- Android 14-এর সাথে মানানসই হওয়ার জন্য
DownloadService-এর জন্য "ডেটা সিঙ্ক" ফোরগ্রাউন্ড পরিষেবার ধরন ঘোষণা করুন। এই পরিষেবা ব্যবহার করার সময়, অ্যাপকে ম্যানিফেস্টেforegroundServiceTypeহিসেবেdataSyncযোগ করতে হবে এবংFOREGROUND_SERVICE_DATA_SYNCঅনুমতি যোগ করতে হবে (#১১২৩৯)।
- Android 14-এর সাথে মানানসই হওয়ার জন্য
- HLS এক্সটেনশন:
- শেষবার লোড সম্পূর্ণ হওয়ার সময়ের পরিবর্তে শেষবার লোড শুরু হওয়ার সময় থেকে হিসেব করা বিরতিতে HLS লাইভ প্লেলিস্ট রিফ্রেশ করুন (#৬৬৩)।
- DASH এক্সটেনশন:
- সেগমেন্ট টেমপ্লেট URL-এ একই DASH শনাক্তকারী একাধিকবার ব্যবহার করার অনুমতি দিন।
- এক্সট্র্যাক্ট করার সময় সাবটাইটেল পার্স করার জন্য এক্সপেরিমেন্টাল সহায়তা যোগ করুন। এতে
ওভারল্যাপ করা সাবটাইটেল মার্জ করার জন্য আরও ভালো সহায়তা রয়েছে, যার মধ্যে
সাবটাইটেল সেগমেন্টের মধ্যে ট্রানজিশন করার সময় ফ্লিকারিং সংক্রান্ত সমস্যার সমাধান করাও অন্তর্ভুক্ত। আপনি
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#২৮৮) ব্যবহার করে এটি চালু করতে পারবেন।
- RTSP এক্সটেনশন:
- রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে TCP-তে ফিরে যাওয়ার সময়
IndexOutOfBoundsExceptionহতে পারে অথবা কিছু পরিস্থিতিতে প্লেব্যাক হ্যাং হয়ে যেতে পারে। - RTSP সেট-আপে স্টেট চেক করুন যখন
RtspMediaPeriod-এর লোডিং স্টেট রিটার্ন করা হচ্ছে (#৫৭৭)। - বিকল্পের উত্তর সংক্রান্ত পাবলিক হেডারে কাস্টম Rtsp অনুরোধের পদ্ধতি উপেক্ষা করুন (#৬১৩)।
- কিপ-অ্যালাইভ RTSP বিকল্পের অনুরোধ পাঠানোর সময়সীমার মধ্যে RTSP সেট-আপ রেসপন্স টাইম-আউট ভ্যালু ব্যবহার করুন (#৬৬২)।
- রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে TCP-তে ফিরে যাওয়ার সময়
- ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
- MIDI ডিকোডার মডিউল রিলিজ করুন, যা অডিও সিন্থেসাইজ করার জন্য Jsyn লাইব্রেরি ব্যবহার করে স্ট্যান্ডার্ড MIDI ফাইল প্লেব্যাকের জন্য সহায়তা প্রদান করে।
- যেসব আউটপুট বাফার দেখানোর প্রয়োজন নেই, সেগুলি সরাসরি চিহ্নিত করতে
DecoderOutputBuffer.shouldBeSkippedযোগ করুন।C.BUFFER_FLAG_DECODE_ONLY-এর পরিবর্তে এটি ব্যবহার করা হয় যা শীঘ্রই বন্ধ হতে চলেছে। - শুরুর সময়ের আগে ডিকোডারকে শুধুমাত্র ডিকোড স্যাম্পেল ড্রপ করার অনুমতি দিতে
Decoder.setOutputStartTimeUsএবংSimpleDecoder.isAtLeastOutputStartTimeUsযোগ করুন।Buffer.isDecodeOnly-এর পরিবর্তে এটি ব্যবহার করা উচিত যা শীঘ্রই বন্ধ হতে চলেছে। - Maven রিপোজিটরিতে MIDI ডিকোডার আর্টিফ্যাক্ট প্রকাশ করার সময় হওয়া সমস্যার সমাধান করা হয়েছে। আর্টিফ্যাক্টের
নাম পরিবর্তন করে
media3-exoplayer-midi(#734) করা হয়েছে।
- Leanback এক্সটেনশন:
- সারফেস বন্ধ করার ফলে Leanback কোডে (#617)
ArithmeticExceptionহতে পারে, এই সমস্যার সমাধান করা হয়েছে।
- সারফেস বন্ধ করার ফলে Leanback কোডে (#617)
- টেস্ট ইউটিলিটি:
- Espresso UI টেস্ট ও Compose UI টেস্টের সাথে
TestExoPlayerBuilderওFakeClock-কে মানানসই করে তুলুন। Espresso বা Compose ভিউ ইন্টার্যাকশনের সময় প্লেব্যাক অনির্ধারিতভাবে এগিয়ে যাওয়ার সমস্যা এটি সমাধান করে।
- Espresso UI টেস্ট ও Compose UI টেস্টের সাথে
- বাতিল করা চিহ্ন সরান:
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)এবংTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)সরিয়ে দিন। পরিবর্তেComposition.Builder.setHdrMode(int)ব্যবহার করুন এবংComposition-কেTransformer.start(Composition, String)-এ পাস করুন।- বন্ধ হয়ে যাওয়া
DownloadNotificationHelper.buildProgressNotificationপদ্ধতি সরিয়ে দিন, এর পরিবর্তে বন্ধ হয়ে যায়নি এমন পদ্ধতি ব্যবহার করুন যাnotMetRequirementsপ্যারামিটার নেয়।
Version 1.2.0-rc01
১ নভেম্বর ২০২৩
1.2.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.2.0-beta01
১৯ অক্টোবর, ২০২৩
1.2.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.2.0-alpha02
২৯ সেপ্টেম্বর, ২০২৩
1.2.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.2.0-alpha01
১৭ আগস্ট, ২০২৩
1.2.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.1.0
ভার্সন ১.১.১
১৬ আগস্ট, ২০২৩
- কমন লাইব্রেরি:
- সব মডিউল থেকে ভুলবশত যোগ করা
multidexডিপেন্ডেন্সি সরিয়ে দিন (#৪৯৯)।
- সব মডিউল থেকে ভুলবশত যোগ করা
- ExoPlayer:
PlaybackStatsListener-এ সমস্যা সমাধান করুন যেখানে প্লেলিস্ট মুছে দেওয়ার পরে জালPlaybackStatsতৈরি করা হয়।- কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: স্ট্রিমিং ফর্ম্যাট (sf), স্ট্রিমের ধরন (st), ভার্সন (v), টপ বিটরেট (tb), অবজেক্টের সময়সীমা (d), পরিমাপ করা থ্রুপুট (mtp) এবং অবজেক্টের ধরন (ot) (#8699)।
- অডিও:
- খুব ছোট ফাইল চালানোর সময়
Player.getState()কখনওSTATE_ENDED-এ ট্রানজিশন না করার সমস্যা সমাধান করা হয়েছে (#538)।
- খুব ছোট ফাইল চালানোর সময়
- অডিও অফলোড:
- RFC 7845 অনুযায়ী অফলোড করা Opus প্লেব্যাকের জন্য বিটস্ট্রিমে Ogg ID হেডার এবং কমেন্ট হেডার পেজ প্রিপেন্ড করুন।
- ভিডিও:
- H.265/HEVC: SPS স্বল্প ও দীর্ঘমেয়াদী রেফারেন্স ছবির তথ্য পার্স করার সমস্যা সমাধান করা হয়েছে।
- টেক্সট:
- CEA-608: শুধুমাত্র দৃশ্যমান টেক্সট বিবেচনা করার জন্য কিউ ট্রাঙ্কেশন লজিক পরিবর্তন করুন। আগে কিউয়ের দৈর্ঘ্য ৩২ অক্ষরে সীমিত করার সময় ইন্ডেন্ট ও ট্যাব অফসেট অন্তর্ভুক্ত করা হত (যা স্পেসিফিকেশন অনুযায়ী টেকনিক্যালি সঠিক ছিল) (#11019)।
- IMA এক্সটেনশন:
- IMA SDK ভার্সন 3.30.3-এ আপডেট করুন।
- সেশন:
- কন্ট্রোলারের স্ট্যাটাসে কাস্টম লেআউট যোগ করুন এবং এটি অ্যাক্সেস করার জন্য গেটার প্রদান করুন। কাস্টম লেআউট পরিবর্তন হলে,
MediaController.Listener.onCustomLayoutChangedকল করা হয়। যেসব অ্যাপ বিভিন্ন Media3 কন্ট্রোলারে আলাদা আলাদা কাস্টম লেআউট পাঠাতে চায়, তারাMediaSession.Callback.onConnect-এAcceptedResultBuilderব্যবহার করে এটি করতে পারে, যাতে কানেকশন সম্পূর্ণ হওয়ার পরে কন্ট্রোলারের কাছে কাস্টম লেআউট উপলভ্য থাকে। - এমন সমস্যার সমাধান করুন যেখানে
MediaLibraryServiceLegacyStubএকটিResult-এ সমস্যা পাঠিয়েছে যা এটি সমর্থন করেনি এবং এর ফলে একটিUnsupportedOperationException(#78) তৈরি হয়েছে। PlayerWrapperযেভাবেVolumeProviderCompatতৈরি করে তা ঠিক করুনvolumeControlTypeনির্ধারণ করার মাধ্যমে, পুরনো কমান্ড (COMMAND_ADJUST_DEVICE_VOLUMEএবংCOMMAND_SET_DEVICE_VOLUME) এবং নতুন কমান্ড (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSএবংCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554) দুটির মাধ্যমেই।
- কন্ট্রোলারের স্ট্যাটাসে কাস্টম লেআউট যোগ করুন এবং এটি অ্যাক্সেস করার জন্য গেটার প্রদান করুন। কাস্টম লেআউট পরিবর্তন হলে,
ভার্সন 1.1.0
৫ জুলাই, ২০২৩
- কমন লাইব্রেরি:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#১৫).
- প্লেয়ারে কমান্ড যোগ করুন:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Player-এ ওভারলোড করা পদ্ধতি যোগ করুন যা ব্যবহারকারীদের ভলিউম ফ্ল্যাগ নির্দিষ্ট করার অনুমতি দেয়:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
DeviceInfo-এর জন্যBuilderযোগ করুন এবং আগে থেকে থাকা কনস্ট্রাক্টর সরিয়ে দিন।- রিমোট প্লেব্যাকের জন্য রাউটিং কন্ট্রোলার আইডি নির্দিষ্ট করতে
DeviceInfo.routingControllerIdযোগ করুন। - একই পজিশনে আইটেম যোগ করা ও সরানোর জন্য
শর্টকাট হিসেবে
Player.replaceMediaItem(s)যোগ করুন (#8046)।
- ExoPlayer:
- ExoPlayer-কে ডিভাইসের ভলিউম কন্ট্রোল করার অনুমতি দিন, তবে শুধুমাত্র
স্পষ্টভাবে অপ্ট-ইন করা থাকলে।
ExoPlayer.Builder.setDeviceVolumeControlEnabledব্যবহার করে এগুলি অ্যাক্সেস করুন:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)ওsetDeviceVolume(int, int)increaseDeviceVolume(int)ওincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)ওdecreaseDeviceVolume(int, int)
FilteringMediaSourceযোগ করুন যাMediaSourceথেকে উপলভ্য ট্র্যাকের ধরন ফিল্টার করার অনুমতি দেয়।- DASH, HLS এবং SmoothStreaming-এর মতো অ্যাডাপ্টিভ স্ট্রিমিং ফর্ম্যাটের আউটগোয়িং অনুরোধে কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) অন্তর্ভুক্ত করার জন্য সহায়তা যোগ করুন। নিম্নলিখিত ফিল্ড,
br,bl,cid,rtp, এবংsid, অন্তর্ভুক্ত করা হয়েছে (#8699)। API স্ট্রাকচার ও API পদ্ধতি:- CMCD লগিং ডিফল্ট হিসেবে বন্ধ করা থাকে, এটি চালু করতে
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)ব্যবহার করুন। - সব কী ডিফল্ট হিসেবে চালু করা থাকে, কোন কোন কী লগ করা হয়েছে তা ফিল্টার করতে
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)ওভাররাইড করুন। - কাস্টম কী লগিং চালু করতে
CmcdConfiguration.RequestConfig.getCustomData()ওভাররাইড করুন।
- CMCD লগিং ডিফল্ট হিসেবে বন্ধ করা থাকে, এটি চালু করতে
- কাস্টম
*.exolist.jsonফাইলের মাধ্যমে ডেমো অ্যাপ শুরু করা আরও সহজ করতে মূল ডেমোর ম্যানিফেস্টে অতিরিক্ত অ্যাকশন যোগ করুন (#৪৩৯)। - ভিডিও প্লেব্যাকের সময়
Effectব্যবহার করার জন্যExoPlayer.setVideoEffects()যোগ করুন। SampleQueueআপডেট করুন যাতেsourceId-কেint-এর পরিবর্তেlongহিসেবে স্টোর করা যায়। এটি পাবলিক মেথডের সিগনেচার পরিবর্তন করেSampleQueue.sourceIdএবংSampleQueue.peekSourceId।LoadControlপদ্ধতিতেshouldStartPlaybackএবংonTracksSelectedপ্যারামিটার যোগ করুন যা এই পদ্ধতিগুলিকে প্রাসঙ্গিকMediaPeriod-এর সাথে যুক্ত করার অনুমতি দেয়।ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)-এর সিগনেচার পরিবর্তন করুন। এর জন্য টাইমলাইন প্যারামিটার যোগ করুন যাতে ম্যাপে কী হিসেবে ব্যবহৃত UID সহ সময়সীমা থাকে। একাধিক সময়সীমা সহ লাইভ স্ট্রিমের ক্ষেত্রে কনকারেন্সি সংক্রান্ত সমস্যা এড়াতে এটি প্রয়োজন।EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)এবংBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)শীঘ্রই বন্ধ করুন। পরিবর্তেmediaTimeOffsetUsছাড়া পদ্ধতির ভেরিয়েন্টকে কল করা যেতে পারে। মনে রাখবেন, বন্ধ হয়ে যাওয়া ভেরিয়েন্টের ক্ষেত্রেও, ডিসপ্যাচার দ্বারা ডিসপ্যাচ করাMediaLoadDataঅবজেক্টেরstartTimeUsএবংendTimeUs-এ অফসেট আর যোগ করা হয় না।ExoTrackSelection.blacklist-এর নাম পরিবর্তন করেexcludeTrackএবংisBlacklisted-এর নাম পরিবর্তন করেisTrackExcludedকরুন।- খালি প্লেলিস্টে কল করার সময়
ExoPlayer.setMediaItem(s)এবংaddMediaItem(s)-এর মধ্যে অসামঞ্জস্যপূর্ণ আচরণ ঠিক করুন।
- ExoPlayer-কে ডিভাইসের ভলিউম কন্ট্রোল করার অনুমতি দিন, তবে শুধুমাত্র
স্পষ্টভাবে অপ্ট-ইন করা থাকলে।
- ট্রান্সফর্মার:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)সরান। পরিবর্তেExoPlayerAssetLoader.Factory(MediaSource.Factory)এবংTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)ব্যবহার করুন।Transformer.startTransformation(MediaItem, ParcelFileDescriptor)সরান।- ইনপুট ফ্রেম প্রসেস করা বাকি থাকার সময় ভিডিও স্ট্রিমের শেষ অংশ সিগন্যাল করা হলে, ট্রান্সফর্মেশন আটকে যাওয়ার (যার ফলে মাক্সার টাইমআউট হয়) সমস্যার সমাধান করা হয়েছে।
findDecoder/EncoderForFormatইউটিলিটি ব্যবহার করার পরিবর্তেMediaCodecList-এর মাধ্যমে কোয়েরি কোডেক, যাতে সাপোর্ট আরও বাড়ানো যায়।DefaultEncoderFactory-এ B-ফ্রেম কনফিগারেশন সরিয়ে দিন কারণ এটি কিছু ডিভাইসে কাজ করে না।
- ট্র্যাক বেছে নেওয়া:
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeযোগ করুন, যা ডিফল্ট হিসেবে বন্ধ করা থাকে। চালু করা হলে, রেন্ডারার ক্ষমতা পরিবর্তিত হলেDefaultTrackSelectorএকটি নতুন ট্র্যাক নির্বাচন ট্রিগার করবে।
- এক্সট্র্যাক্টর:
- অডিও:
- টানেলিং চালু থাকলে এবং
AudioProcessorsঅ্যাক্টিভ থাকলে কিছু প্লেব্যাক ব্যর্থ হওয়ার সমস্যা সমাধান করা হয়েছে, যেমন গ্যাপলেস ট্রিমিংয়ের জন্য (#১০৮৪৭)। - সরাসরি প্লেব্যাকের (অফলোড) ক্ষেত্রে Ogg প্যাকেটে Opus ফ্রেম এনক্যাপসুলেট করুন।
- অফলোড শিডিউলিংয়ের মাধ্যমে স্লিপ মোডে বর্তমান পজিশন এক্সট্রাপোলেট করুন।
- প্লেয়ারের লাইফসাইকেলের শেষে রিসোর্স রিলিজ করার জন্য
Renderer.release()এবংAudioSink.release()যোগ করুন। DefaultAudioSink-এ অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন শুনুন।DefaultAudioSink-এর কনস্ট্রাক্টরে একটি প্রয়োজনীয় প্যারামিটারcontextযোগ করুন, যার মাধ্যমেDefaultAudioSink,AudioCapabilitiesReceiver-এর লিসেনার হিসেবে রেজিস্টার করবে এবং ক্ষমতা পরিবর্তন সম্পর্কে জানানো হলে তারaudioCapabilitiesপ্রপার্টি আপডেট করবে।- নতুন ইভেন্টের মাধ্যমে অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন প্রচার করুন
onAudioCapabilitiesChangedAudioSink.Listenerইন্টারফেসে এবং একটি নতুন ইন্টারফেসRendererCapabilities.ListenerযাonRendererCapabilitiesChangedইভেন্ট ট্রিগার করে। - অডিও চ্যানেলে স্কেলিং/মিক্সিং প্রয়োগ করার জন্য
ChannelMixingAudioProcessorযোগ করুন। - অডিওর ক্ষমতা পরিবর্তন হওয়ার পরে বাইপাস মোড
সম্ভব হলে, অডিও ডিকোডার বাতিল করতে
DecoderDiscardReasons-এ নতুন int ভ্যালুDISCARD_REASON_AUDIO_BYPASS_POSSIBLEযোগ করুন। - DTS Express ও DTS:X-এর জন্য সরাসরি প্লেব্যাক সাপোর্ট যোগ করুন (#৩৩৫)।
- টানেলিং চালু থাকলে এবং
- ভিডিও:
- রেন্ডারার বন্ধ করা থাকলে,
MediaCodecVideoRenderer-কেVideoSize-এর প্রস্থ ও উচ্চতা ০ হিসেবে রিপোর্ট করতে বলুন।Player.getVideoSize()পরিবর্তন হলে সেই অনুযায়ীPlayer.Listener.onVideoSizeChangedকল করা হয়। এই পরিবর্তনের ফলে, ExoPlayer-এর ভিডিওর সাইজMediaCodecVideoRenderer-এর সাথে প্রস্থ ও উচ্চতা ০ হবে যখনPlayer.getCurrentTracksভিডিও সাপোর্ট করে না অথবা কাজ করে এমন ভিডিও ট্র্যাকের সাইজ এখনও নির্ধারণ করা হয়নি।
- রেন্ডারার বন্ধ করা থাকলে,
- DRM:
DefaultDrmSession-এ বেশ কিছু ইন্টার্নাল-অনলি পদ্ধতির দৃশ্যমানতা কমান যেগুলি DRM প্যাকেজের বাইরে থেকে কল করা হবে বলে আশা করা হয় না:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Muxer:
- একটি নতুন মাক্সার লাইব্রেরি যোগ করুন যা MP4 কন্টেনার ফাইল তৈরি করতে ব্যবহার করা যেতে পারে।
- IMA এক্সটেনশন:
- DAI-এর জন্য মাল্টি-পিরিয়ড লাইভ DASH স্ট্রিম চালু করুন। #10912-এ বর্তমানে লাইভ স্ট্রিমে সিক করার সুবিধা নেই।
- লাইভ স্ট্রিমে নতুন বিজ্ঞাপন গ্রুপ যোগ করার সময় হওয়া সমস্যার সমাধান করুন, কারণ পরপর টাইমলাইনে কন্টেন্টের পজিশন সামান্য আলাদা হয়।
- সেশন:
- বর্তমানে যে কন্ট্রোলার
Playerপদ্ধতি কল করছে, তার সম্পর্কে তথ্য পেতে সহায়ক পদ্ধতিMediaSession.getControllerForCurrentRequestযোগ করুন। androidx.media3.session.MediaButtonReceiverযোগ করুন যাতে অ্যাপগুলি মিডিয়া বোতাম ইভেন্টের মাধ্যমে প্লেব্যাক আবার চালু করার সুবিধা প্রয়োগ করতে পারে, যেমন ব্লুটুথ হেডসেট (#১৬৭)।MediaSession.Callback.onAddMediaItems-এ ডিফল্ট ইমপ্লিমেন্টেশন যোগ করুন যাতে অনুরোধ করাMediaItems-কেPlayer-এ পাস করা যায়, যদি তাদের কাছেLocalConfiguration(যেমন, URI) থাকে (#২৮২)।- Android 12 এবং তার আগের ভার্সনের জন্য ডিফল্ট হিসেবে কম্প্যাক্ট মিডিয়া বিজ্ঞপ্তি ভিউতে "আগেরটিতে যান" এবং "পরেরটিতে যান" কমান্ড বোতাম যোগ করুন (#410)।
MediaSession.Callback.onAddMediaItems-এ ডিফল্ট ইমপ্লিমেন্টেশন যোগ করুন যাতে অনুরোধ করাMediaItems-কেPlayer-এ পাস করা যায়, যদি তাদের কাছেLocalConfiguration(যেমন, URI) থাকে (#২৮২)।- Android 12 এবং তার আগের ভার্সনের জন্য ডিফল্ট হিসেবে কম্প্যাক্ট মিডিয়া বিজ্ঞপ্তি ভিউতে "আগেরটিতে যান" এবং "পরেরটিতে যান" কমান্ড বোতাম যোগ করুন (#410)।
- বর্তমানে যে কন্ট্রোলার
- UI:
- প্লে/পজ বোতাম সহ কাস্টম UI এলিমেন্ট লিখতে
Util পদ্ধতি
shouldShowPlayButtonএবংhandlePlayPauseButtonActionযোগ করুন।
- প্লে/পজ বোতাম সহ কাস্টম UI এলিমেন্ট লিখতে
Util পদ্ধতি
- RTSP এক্সটেনশন:
- DASH এক্সটেনশন:
- মাল্টি পিরিয়ড DASH স্ট্রিমের জন্য
MediaLoadData.startTimeMsএবংMediaLoadData.endTimeMsথেকে মিডিয়া টাইম অফসেট সরিয়ে দিন। - মাল্টি-পিরিয়ড লাইভ ড্যাশ মিডিয়া সোর্স আবার প্রস্তুত করার সময়
IndexOutOfBoundsException(#10838) তৈরি হওয়ার সমস্যা সমাধান করা হয়েছে।
- মাল্টি পিরিয়ড DASH স্ট্রিমের জন্য
- HLS এক্সটেনশন:
TimestampAdjusterইনিশিয়ালাইজ করার জন্য লোডিং থ্রেডকে অপেক্ষা করানোর জন্য টাইমআউট সেট করতেHlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)যোগ করুন। টাইমআউটের আগে ইনিশিয়ালাইজেশন সম্পূর্ণ না হলে, প্লেব্যাক যাতে অনির্দিষ্টকালের জন্য বন্ধ না হয়ে যায়, তার জন্যPlaybackExceptionথ্রো করা হয়। টাইমআউট সাধারণত শূন্যতে সেট করা থাকে (#323)।
- টেস্ট ইউটিলিটি:
DataSourceContractTest-এ URI স্কিমের ক্ষেত্রে ছোট ও বড় হাতের অক্ষরের মধ্যে পার্থক্য করা হয় কিনা তা চেক করুন।
- বাতিল করা চিহ্ন সরান:
DefaultAudioSinkকনস্ট্রাক্টর সরিয়ে দিন, পরিবর্তেDefaultAudioSink.Builderব্যবহার করুন।HlsMasterPlaylistসরিয়ে, পরিবর্তেHlsMultivariantPlaylistব্যবহার করুন।Player.stop(boolean)সরান। পরিবর্তেPlayer.stop()এবংPlayer.clearMediaItems()(যদিresettrueহয়) ব্যবহার করুন।- দুটি বন্ধ হয়ে যাওয়া
SimpleCacheকনস্ট্রাক্টর সরিয়ে দিন, আরও ভালো পারফর্ম্যান্সের জন্য এর পরিবর্তে বন্ধ হয়ে যায়নি এমন কনস্ট্রাক্টর ব্যবহার করুন যাDatabaseProviderনেয়। DefaultBandwidthMeterকনস্ট্রাক্টর সরিয়ে দিন, পরিবর্তেDefaultBandwidthMeter.Builderব্যবহার করুন।DefaultDrmSessionManagerকনস্ট্রাক্টর সরিয়ে দিন, পরিবর্তেDefaultDrmSessionManager.Builderব্যবহার করুন।- দুটি বন্ধ করা
HttpDataSource.InvalidResponseCodeExceptionকনস্ট্রাক্টর সরান, বন্ধ করা হয়নি এমন কনস্ট্রাক্টর ব্যবহার করুন যা অতিরিক্ত ফিল্ড(cause,responseBody) গ্রহণ করে যাতে সমস্যা লগিং উন্নত করা যায়। DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashওDownloadHelper.forSmoothStreamingসরিয়ে দিন, পরিবর্তেDownloadHelper.forMediaItemব্যবহার করুন।- বন্ধ হয়ে যাওয়া
DownloadServiceকনস্ট্রাক্টর সরিয়ে দিন, বন্ধ না হওয়া কনস্ট্রাক্টর ব্যবহার করুন যেটিতেchannelDescriptionResourceIdপ্যারামিটার দেওয়ার বিকল্প আছে। - Charset-এর জন্য বাতিল করা স্ট্রিং কনস্ট্যান্ট (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEএবংUTF16LE_NAME) সরিয়ে দিন, এর পরিবর্তেkotlin.textপ্যাকেজ,java.nio.charset.StandardCharsetsবাcom.google.common.base.Charsetsথেকে Kotlin Charset ব্যবহার করুন। - বন্ধ হয়ে যাওয়া
WorkManagerSchedulerকনস্ট্রাক্টর সরিয়ে দিন, এর পরিবর্তে বন্ধ না হওয়া কনস্ট্রাক্টর ব্যবহার করুন যাতেContextপ্যারামিটার দেওয়ার বিকল্প অন্তর্ভুক্ত থাকে। createVideoSampleFormat,createAudioSampleFormat,createContainerFormatএবংcreateSampleFormat-এর মতো বাতিল করা পদ্ধতিগুলি সরিয়ে দিন, যেগুলিFormatক্লাস ইনস্ট্যানশিয়েট করার জন্য ব্যবহার করা হয়েছিল। পরিবর্তেFormat-এর ইনস্ট্যান্স তৈরি করতেFormat.Builderব্যবহার করুন।copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateএবংcopyWithVideoSize-এর মতো বন্ধ হয়ে যাওয়া পদ্ধতিগুলি সরিয়ে দিন, পরিবর্তেFormat.buildUpon()এবং সেটার পদ্ধতিগুলি ব্যবহার করুন।- বন্ধ হয়ে যাওয়া
ExoPlayer.retry()সরিয়ে দিন, পরিবর্তেprepare()ব্যবহার করুন। - বন্ধ হয়ে যাওয়া জিরো-আর্গ
DefaultTrackSelectorকনস্ট্রাক্টর সরিয়ে দিন, পরিবর্তেDefaultTrackSelector(Context)ব্যবহার করুন। - বন্ধ হয়ে যাওয়া
OfflineLicenseHelperকনস্ট্রাক্টর সরিয়ে দিন, এর পরিবর্তেOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)ব্যবহার করুন। - বন্ধ হয়ে যাওয়া
DownloadManagerকনস্ট্রাক্টর সরিয়ে দিন, এর পরিবর্তেExecutorনেয় এমন কনস্ট্রাক্টর ব্যবহার করুন। - বন্ধ হয়ে যাওয়া
Cueকনস্ট্রাক্টর সরিয়ে দিন, এর পরিবর্তেCue.Builderব্যবহার করুন। - বন্ধ হয়ে যাওয়া
OfflineLicenseHelperকনস্ট্রাক্টর সরিয়ে দিন, এর পরিবর্তেOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)ব্যবহার করুন। - চারটি বাতিল করা
AnalyticsListenerপদ্ধতি সরিয়ে দিন:onDecoderEnabled, পরিবর্তেonAudioEnabledএবং/অথবাonVideoEnabledব্যবহার করুন।onDecoderInitialized, পরিবর্তেonAudioDecoderInitializedএবং/অথবাonVideoDecoderInitializedব্যবহার করুন।onDecoderInputFormatChanged, পরিবর্তেonAudioInputFormatChangedএবং/অথবাonVideoInputFormatChangedব্যবহার করুন।onDecoderDisabled, পরিবর্তেonAudioDisabledএবং/অথবাonVideoDisabledব্যবহার করুন।
- বন্ধ হয়ে যাওয়া
Player.Listener.onSeekProcessedএবংAnalyticsListener.onSeekProcessedসরিয়ে দিন, পরিবর্তেDISCONTINUITY_REASON_SEEK-এর সাথেonPositionDiscontinuityব্যবহার করুন। ExoPlayer.setHandleWakeLock(boolean)সরিয়ে, পরিবর্তেsetWakeMode(int)ব্যবহার করুন।- বন্ধ হয়ে যাওয়া
DefaultLoadControl.Builder.createDefaultLoadControl()সরিয়ে দিন, পরিবর্তেbuild()ব্যবহার করুন। - বন্ধ হয়ে যাওয়া
MediaItem.PlaybackPropertiesসরিয়ে দিন, পরিবর্তেMediaItem.LocalConfigurationব্যবহার করুন। বন্ধ হয়ে যাওয়া ফিল্ডMediaItem.playbackPropertiesএখনMediaItem.LocalConfigurationধরনের।
ভার্সন 1.1.0-rc01
২১ জুন, ২০২৩
1.1.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.1.0-beta01
৭ জুন, ২০২৩
1.1.0 স্টেবল ভার্সন ব্যবহার করুন।
Version 1.1.0-alpha01
১০ মে, ২০২৩
1.1.0 স্টেবল ভার্সন ব্যবহার করুন।
ভার্সন 1.0.0
ভার্সন 1.0.2
১৮ মে, ২০২৩
androidx.media3:media3-*:1.0.2 রিলিজ করা হয়েছে। ভার্সন 1.0.2-এ এইসব
কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.7 রিলিজ-এর সাথে সম্পর্কিত।
1.0.1 রিলিজ হওয়ার পর থেকে এই রিলিজে নিম্নলিখিত পরিবর্তনগুলি করা হয়েছে:
- কোর লাইব্রেরি:
Buffer.isLastSample()যোগ করুন যাBuffer-এ ফ্ল্যাগC.BUFFER_FLAG_LAST_SAMPLEআছে কিনা তা বোঝায়।- 'স্ট্রিমের শেষ' স্যাম্পেল না পড়েই ফ্রেম সহ শেষ স্যাম্পেল ডিকিউ করা হলে, শেষ ফ্রেম রেন্ডার না হওয়ার সমস্যা সমাধান করুন। (#11079)।
- এক্সট্র্যাক্টর:
- RTSP এবং MP4 এক্সট্র্যাক্টর দ্বারা আগে থেকেই ব্যবহার করা পার্সিং লজিক আবার ব্যবহার করে MPEG-TS ফাইলে H.265 SPS-এর পার্সিং ঠিক করুন (#৩০৩)।
- টেক্সট:
- SSA: UTF-16 ফাইল বাইট অর্ডার মার্ক দিয়ে শুরু হলে সেটির জন্য সহায়তা যোগ করুন (#319)।
- সেশন:
MediaController-এর উপলভ্য কমান্ড আপডেট না হওয়ার সমস্যা সমাধান করুন যখন এটি কোনও লিগ্যাসিMediaSessionCompat-এর সাথে কানেক্ট করা হয় যা এর অ্যাকশন আপডেট করে।- API 30-এ
params.isRecent == trueসহ System UI থেকেCallback.onGetLibraryRoot-এ কলের জন্যMediaLibraryService-কে নাল রিটার্ন করা থেকে আটকানো বাগটি ঠিক করুন (#355)। MediaSessionServiceবাMediaLibraryService-এর মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন (#346)।MediaSession-এTimelineও পজিশন আপডেট একসাথে করার ফলেMediaController-এIllegalStateExceptionদেখানোর সমস্যা সমাধান করা হয়েছে।
ভার্সন ১.০.১
১৮ এপ্রিল, ২০২৩
androidx.media3:media3-*:1.0.1 রিলিজ করা হয়েছে। ভার্সন 1.0.1-এ এইসব
কমিট আছে।
এই রিলিজ ExoPlayer 2.18.6 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
- ডিফল্ট পজিশনে খোঁজার সময় টার্গেট লাইভ স্ট্রিম ওভাররাইড রিসেট করুন (#11051)।
- মিডিয়াতে খালি স্যাম্পেল স্ট্রিম থাকলে প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
- সেশন:
- Fix bug where multiple identical queue items published by a legacy
MediaSessionCompatresult in an exception inMediaController(#290). MediaSession.broadcastCustomCommand-এর মিসিং ফরওয়ার্ডিং লেগ্যাসিMediaControllerCompat.Callback.onSessionEvent-এ যোগ করুন (#২৯৩)।MediaSession.setPlayerকল করার সময় উপলভ্য কমান্ড আপডেট না হওয়ার সমস্যা সমাধান করা হয়েছে।MediaControllerথেকে পাঠানোTrackSelectionOverrideইনস্ট্যান্সFormat.metadataসহ কোনও গ্রুপকে রেফার করলে সেটি উপেক্ষা করা হয়, এই সমস্যার সমাধান করুন (#২৯৬)।- পুরনো
MediaSessionCompat-এর মাধ্যমে মেটাডেটা অ্যাক্সেস করার জন্যPlayer.COMMAND_GET_CURRENT_MEDIA_ITEMউপলভ্য থাকতে হবে, এই সমস্যার সমাধান করুন। MediaSessionService-এ ব্যবহার করার সময় ব্যাকগ্রাউন্ড থ্রেডেMediaSessionইনস্ট্যান্সের কারণে ক্র্যাশ হওয়ার সমস্যা সমাধান করুন (#৩১৮)।- অ্যাপের উদ্দেশ্য না থাকা সত্ত্বেও লাইব্রেরির মাধ্যমে মিডিয়া বোতাম রিসিভার ঘোষণা করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#314)।
- Fix bug where multiple identical queue items published by a legacy
- DASH:
- খালি সেগমেন্ট টাইমলাইন ম্যানেজ করার সমস্যা সমাধান করা হয়েছে (#11014)।
- RTSP:
- UDP-এর সাথে RTSP সেট-আপ RTSP Error 461 UnsupportedTransport (#11069) সহ ব্যর্থ হলে TCP-এর সাথে আবার চেষ্টা করুন।
ভার্সন 1.0.0
২২ মার্চ, ২০২৩
androidx.media3:media3-*:1.0.0 রিলিজ করা হয়েছে। ভার্সন 1.0.0-এ এইসব
কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.5 রিলিজ-এর সাথে সম্পর্কিত।
1.0.0-rc02-এর পর থেকে কোনও পরিবর্তন করা হয়নি।
ভার্সন 1.0.0-rc02
২ মার্চ, ২০২৩
androidx.media3:media3-*:1.0.0-rc02 রিলিজ করা হয়েছে। ভার্সন 1.0.0-rc02-এ
এইসব কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.4 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
- ডাউনলোড:
- দুটি সেগমেন্টের শুরুর সময়ের মধ্যে সর্বাধিক পার্থক্যকে
SegmentDownloaderএবং সাবক্লাসে কনফিগারযোগ্য হিসেবে মার্জ করতে হবে (#২৪৮)।
- দুটি সেগমেন্টের শুরুর সময়ের মধ্যে সর্বাধিক পার্থক্যকে
- অডিও:
- ভিডিও:
- HEVC HDR10 ফর্ম্যাট
HEVCProfileMain10-এর পরিবর্তেHEVCProfileMain10HDR10-এ ম্যাপ করুন। - Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য বিকল্প সমাধান যোগ করা হয়েছে, যার ফলে 60fps AVC স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয় (#১০৮৯৮)।
- স্ক্রিন রিফ্রেশ রেটের থেকে অনেক বেশি ফ্রেম রেট সহ মিডিয়া চালানোর সময় ফ্রেম রিলিজ পারফর্ম্যান্স সংক্রান্ত সমস্যার সমাধান করুন।
- HEVC HDR10 ফর্ম্যাট
- অভিনয়ে:
- মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় ট্রানজিয়েন্ট
STATE_IDLEসংক্রান্ত সমস্যার সমাধান করা (#২৪৫)।
- মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় ট্রানজিয়েন্ট
- RTSP:
- ভুল RTSP পার্স করার সময় IllegalArgumentException থ্রো করা হয়েছে উত্তরের মেসেজ বর্ণনা করুন (#১০৯৭১)।
- সেশন:
- বিজ্ঞপ্তির প্লে/পজ বোতাম প্লেয়ারের স্ট্যাটাসের সাথে আপডেট না হওয়ার সমস্যার সমাধান করা হয়েছে (#১৯২)।
- IMA এক্সটেনশন:
- একটি সমস্যার সমাধান করা হয়েছে যার ফলে প্রথম (এবং বিজ্ঞাপন ছাড়া একমাত্র)
LOADEDইভেন্ট না পাওয়ার কারণে বিজ্ঞাপন ছাড়া DAI স্ট্রিম শুরু করা যাচ্ছিল না।
- একটি সমস্যার সমাধান করা হয়েছে যার ফলে প্রথম (এবং বিজ্ঞাপন ছাড়া একমাত্র)
ভার্সন 1.0.0-rc01
১৬ ফেব্রুয়ারি, ২০২৩
androidx.media3:media3-*:1.0.0-rc01 রিলিজ করা হয়েছে। ভার্সন 1.0.0-rc01-এ
এইসব কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.3 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
- রেন্ডারারের ডিকোডার অর্ডারিং লজিক টুইক করুন যাতে
MediaCodecSelector-এর পছন্দ বজায় থাকে, এমনকি ডিকোডার যদি রিপোর্ট করে যে এটি মিডিয়া পারফর্ম্যান্সের সাথে চালাতে পারবে না। যেমন, ডিফল্ট সিলেক্টরের সাথে, শুধুমাত্র ফাংশনাল সাপোর্ট সহ হার্ডওয়্যার ডিকোডারকে, ফর্ম্যাটকে সম্পূর্ণভাবে সাপোর্ট করে এমন সফ্টওয়্যার ডিকোডারের চেয়ে বেশি পছন্দ করা হবে (#১০৬০৪)। ExoPlayer.Builder.setPlaybackLooperযোগ করুন যা নতুন ExoPlayer ইনস্ট্যান্সের জন্য আগে থেকে থাকা প্লেব্যাক থ্রেড সেট করে।- ডাউনলোড ম্যানেজার হেল্পারদের মুছে ফেলার অনুমতি দিন (#১০৭৭৬)।
BasePlayer.seekTo-এ প্যারামিটার যোগ করুন যাতে খোঁজার জন্য ব্যবহৃত কমান্ডও দেখানো যায়।- API 21+-এ ড্রয়েবল লোড করার সময় থিম ব্যবহার করুন (#২২০)।
ConcatenatingMediaSource2যোগ করুন যা একাধিক মিডিয়া আইটেমকে একটি উইন্ডোতে একত্রিত করার অনুমতি দেয় (#২৪৭)।
- রেন্ডারারের ডিকোডার অর্ডারিং লজিক টুইক করুন যাতে
- এক্সট্র্যাক্টর:
- trak অ্যাটম পার্স করার সময় স্যাম্পেল টেবিলে (stbl) প্রয়োজনীয় স্যাম্পেল বিবরণ (stsd) না থাকলে,
NullPointerException-এর পরিবর্তেParserExceptionথ্রো করুন। - fMP4-এ সিঙ্ক ফ্রেমে সরাসরি সিক করার সময় স্যাম্পেল সঠিকভাবে এড়িয়ে যাওয়া (#১০৯৪১)।
- trak অ্যাটম পার্স করার সময় স্যাম্পেল টেবিলে (stbl) প্রয়োজনীয় স্যাম্পেল বিবরণ (stsd) না থাকলে,
- অডিও:
- ডাইরেক্ট প্লেব্যাকে (পাসথ্রু)
AudioTrack-এর জন্য ন্যূনতম বাফার সাইজ গণনা করতে কম্প্রেস করা অডিও ফর্ম্যাট বিটরেট ব্যবহার করুন।
- ডাইরেক্ট প্লেব্যাকে (পাসথ্রু)
- টেক্সট:
- সাবটাইটেল ফাইলে কোনও কিউ না থাকলে,
TextRenderer-এর মাধ্যমেSubtitle.getEventTime-এ ভুল (নেগেটিভ) ইনডেক্স পাস করার সমস্যা সমাধান করুন। - SubRip: UTF-16 ফাইল বাইট অর্ডার মার্ক দিয়ে শুরু হলে, সেটির জন্য সহায়তা যোগ করুন।
- সাবটাইটেল ফাইলে কোনও কিউ না থাকলে,
- মেটাডেটা:
- ID3 v2.4-এর অনুমতি অনুযায়ী, ID3 ফ্রেম থেকে একাধিক নাল-সেপারেটেড ভ্যালু পার্স করুন।
- মেটাডেটা দ্বারা বর্ণিত কন্টেন্ট বা ফোল্ডারের ধরন
বোঝাতে
MediaMetadata.mediaTypeযোগ করুন। MediaMetadata.folderType-এর পরিবর্তেMediaMetadata.isBrowsableযোগ করুন। পরবর্তী রিলিজে ফোল্ডারের ধরন বন্ধ করে দেওয়া হবে।
- DASH:
- টাইল কাউন্ট সহ ইমেজ অ্যাডাপ্টেশন সেটের জন্য সম্পূর্ণ পার্সিং যোগ করুন (#3752)।
- UI:
- দৃশ্যমানতা সংক্রান্ত পরিবর্তন রেজিস্টার করা শ্রোতার কাছে পৌঁছেছে কিনা তা নিশ্চিত করতে
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)-এর অবচিত ভার্সন ঠিক করুন (#২২৯)। - ডানদিক থেকে বাঁদিকে (RTL) লেআউট ব্যবহার করার সময়
PlayerView-এ সেন্টার প্লেয়ার কন্ট্রোলের ক্রম ঠিক করুন (#২২৭)।
- দৃশ্যমানতা সংক্রান্ত পরিবর্তন রেজিস্টার করা শ্রোতার কাছে পৌঁছেছে কিনা তা নিশ্চিত করতে
- সেশন:
- কাস্টম প্লেয়ারের জন্য
Playerইন্টারফেস প্রয়োগ করতে অ্যাবস্ট্র্যাক্টSimpleBasePlayerযোগ করুন। - প্ল্যাটফর্ম সেশন টোকেনকে Media3-তে কনভার্ট করার জন্য হেল্পার পদ্ধতি যোগ করুন
SessionToken(#১৭১)। - প্ল্যাটফর্ম মিডিয়া সেশনের আপডেট ট্রিগার করতে
onMediaMetadataChangedব্যবহার করুন (#২১৯)। DefaultMediaNotificationProvider-এরgetMediaButtons()-এর আর্গুমেন্ট হিসেবে মিডিয়া সেশন যোগ করুন এবং স্বচ্ছতার জন্য অপরিবর্তনীয় তালিকা ব্যবহার করুন (#২১৬)।- প্লেয়ারে (#156) সেট করার আগে সেশন অনুযায়ী
MediaItemতালিকা, শুরুর ইন্ডেক্স ও পজিশন পরিবর্তন/সেট করার উপায় প্রদান করতেonSetMediaItemsকলব্যাক লিসেনার যোগ করুন। - ব্লুটুথ নয় এমন মিডিয়া বোতাম ইভেন্টের জন্য ডবল ট্যাপ শনাক্তকরণ এড়িয়ে চলুন (#২৩৩)।
- সেশন স্টেট সংক্রান্ত লিগ্যাসি ডেটা অস্পষ্ট হলে
QueueTimelineআরও শক্তিশালী করুন (#২৪১)।
- কাস্টম প্লেয়ারের জন্য
- মেটাডেটা:
- ID3 v2.4-এর অনুমতি অনুযায়ী, ID3 ফ্রেম থেকে একাধিক নাল-সেপারেটেড ভ্যালু পার্স করুন।
- মেটাডেটা দ্বারা বর্ণিত কন্টেন্ট বা ফোল্ডারের ধরন
বোঝাতে
MediaMetadata.mediaTypeযোগ করুন। MediaMetadata.folderType-এর পরিবর্তেMediaMetadata.isBrowsableযোগ করুন। পরবর্তী রিলিজে ফোল্ডারের ধরন বন্ধ করে দেওয়া হবে।
- কাস্ট এক্সটেনশন:
- Cast SDK ভার্সন 21.2.0-এ আপডেট করা হয়েছে।
- IMA এক্সটেনশন:
- থ্রেডিং সংক্রান্ত সমস্যা এড়াতে অ্যাপ্লিকেশন থ্রেডে
ImaServerSideAdInsertionMediaSource-এর প্লেয়ার লিসেনার সরিয়ে দিন। ImaServerSideAdInsertionMediaSource.AdsLoader.Builder-এfocusSkipButtonWhenAvailableপ্রপার্টি যোগ করুন যাতে টিভি ডিভাইসে 'এড়িয়ে যান' বোতামে ফোকাস করার অনুরোধ করা যায় এবং ডিফল্ট হিসেবে এটি 'সত্য' হিসেবে সেট করুন।- প্রোগ্রাম্যাটিক্যালি স্কিপ বোতামে ফোকাস করার অনুরোধ করতে
ImaServerSideAdInsertionMediaSource.AdsLoader-এ একটি পদ্ধতিfocusSkipButton()যোগ করুন। - IMA SDK ভার্সন 3.29.0-এ আপডেট করুন।
- থ্রেডিং সংক্রান্ত সমস্যা এড়াতে অ্যাপ্লিকেশন থ্রেডে
- ডেমো অ্যাপ:
- রানটাইমে ডাউনলোড সংক্রান্ত বিজ্ঞপ্তি দেখানোর জন্য বিজ্ঞপ্তির অনুমতি চাওয়া (#১০৮৮৪)।
ভার্সন 1.0.0-beta03
২২ নভেম্বর, ২০২২
androidx.media3:media3-*:1.0.0-beta03 রিলিজ করা হয়েছে। ভার্সন 1.0.0-beta03-এ
এইসব কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.2 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
- বর্তমানে বেছে নেওয়া ট্র্যাকের জন্য টানেলিং চালু করা আছে কিনা তা চেক করতে
ExoPlayer.isTunnelingEnabledযোগ করুন (#2518)। - একটি
MediaSource-কে র্যাপ করার প্রসেস সহজ করতেWrappingMediaSourceযোগ করুন (#7279)। - উপলভ্য মেমরি পর্যাপ্ত না থাকার কারণে প্লেব্যাক আটকে যাওয়ার আগে ব্যাক বাফার বাতিল করুন।
- অফলোড চালু করা থাকলে, ট্রেসিং "doSomeWork" ব্লক বন্ধ করুন।
PlaybackStatsListener-এ দ্রুত খোঁজার মাধ্যমে সেশন ট্র্যাকিং সংক্রান্ত সমস্যার সমাধান করা (#১৮০)।seekToNextবাseekToPrevious-কে সিঙ্গেল-আইটেম প্লেলিস্টে কল করার সময় মিসিংonMediaItemTransitionকলব্যাক পাঠান (#১০৬৬৭)।Player.getSurfaceSizeযোগ করুন যা ভিডিওটি যে সারফেসে রেন্ডার করা হয়েছে তার সাইজ রিটার্ন করে।- প্লেয়ার রিলিজ করার সময় লিসনার সরিয়ে দেওয়ার ফলে হওয়া
IllegalStateException(#১০৭৫৮) সমস্যার সমাধান করা হয়েছে।
- বর্তমানে বেছে নেওয়া ট্র্যাকের জন্য টানেলিং চালু করা আছে কিনা তা চেক করতে
- বিল্ড:
- কম্পাইলেশন সংক্রান্ত সমস্যা এড়াতে ন্যূনতম
compileSdkVersionএনফোর্স করুন (#১০৬৮৪)। - অন্য গ্রেডেল বিল্ডে অন্তর্ভুক্ত থাকলে, ব্লক প্রকাশ করা এড়িয়ে চলুন।
- কম্পাইলেশন সংক্রান্ত সমস্যা এড়াতে ন্যূনতম
- ট্র্যাক বেছে নেওয়া:
- ডিসপ্লেতে Dolby Vision কাজ না করলে, অন্য ট্র্যাক বেছে নিন। (#৮৯৪৪)।
- ডাউনলোড:
- একই
PriorityTaskManager-এর মাধ্যমে একই সাথে ডাউনলোড ও প্লেব্যাক করার কারণেProgressiveDownloader-এ সম্ভাব্য ইনফিনিট লুপের সমস্যা সমাধান করুন (#10570)। - ডাউনলোড সংক্রান্ত বিজ্ঞপ্তি যাতে অবিলম্বে দেখা যায় তা নিশ্চিত করুন (#১৮৩)।
- অতিরিক্ত থ্রেড তৈরি করা এড়াতে সমান্তরাল ডাউনলোড সরানোর সীমা ১-এ সীমাবদ্ধ করুন (#১০৪৫৮)।
- একই
- ভিডিও:
- ডিসপ্লেতে Dolby Vision কাজ না করলে, Dolby Vision-এর জন্য বিকল্প ডিকোডার ব্যবহার করে দেখুন। (#৯৭৯৪)।
- অডিও:
- একই সময়ে একাধিক প্লেয়ার রিলিজ করার সময় OutOfMemory সমস্যা এড়াতে
AudioTrackইনস্ট্যান্স রিলিজ করার জন্যSingleThreadExecutorব্যবহার করুন (#১০০৫৭)। - AudioTrack অফলোড স্ট্যাটাসের জন্য
AudioOffloadListener.onExperimentalOffloadedPlaybackযোগ করে। (#১৩৪)। AudioTrackBufferSizeProvider-কে একটি পাবলিক ইন্টারফেস করুন।- পছন্দের অডিও আউটপুট ডিভাইস (#১৩৫) সেট করতে
ExoPlayer.setPreferredAudioDeviceযোগ করুন। androidx.media3.exoplayer.audio.AudioProcessor-এর নাম পরিবর্তন করেandroidx.media3.common.audio.AudioProcessorকরুন।- সব Android ভার্সনে ৮-চ্যানেল ও ১২-চ্যানেল অডিওকে যথাক্রমে ৭.১ ও ৭.১.৪ চ্যানেল মাস্কে ম্যাপ করুন (#১০৭০১)।
- একই সময়ে একাধিক প্লেয়ার রিলিজ করার সময় OutOfMemory সমস্যা এড়াতে
- মেটাডেটা:
MetadataRendererএখন কনফিগার করা যাবে যাতে মেটাডেটা উপলভ্য হওয়ার সাথে সাথেই তা রেন্ডার করা যায়। রেন্ডারার মেটাডেটা আগে আউটপুট করবে নাকি প্লেয়ার পজিশনের সাথে সিঙ্ক করে আউটপুট করবে তা নির্দিষ্ট করতেMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)সহ একটি ইনস্ট্যান্স তৈরি করুন।
- DRM:
- Android 13 ClearKey ইমপ্লিমেন্টেশনে একটি বাগ নিয়ে কাজ করুন যা খালি নয় কিন্তু ভুল লাইসেন্স URL রিটার্ন করে।
- প্লেলিস্টে DRM স্কিমের মধ্যে (যেমন, Widevine থেকে ClearKey)
পরিবর্তন করার সময়
setMediaDrmSession failed: session not openedসমস্যার সমাধান করা।
- টেক্সট:
- CEA-608: ফিল্ড ২-এ সার্ভিস সুইচ কমান্ড সঠিকভাবে ম্যানেজ করা হয়েছে কিনা তা নিশ্চিত করুন (#১০৬৬৬)।
- DASH:
- ম্যানিফেস্ট থেকে
EventStream.presentationTimeOffsetপার্স করুন (#১০৪৬০)।
- ম্যানিফেস্ট থেকে
- UI:
TrackSelectionDialogBuilder(#10429)-এ প্রিসেট হিসেবে প্লেয়ারের বর্তমান ওভাররাইড ব্যবহার করুন।
- সেশন:
- কিছু কমান্ডের জন্য অ্যাসিঙ্ক্রোনাস রেজোলিউশনের প্রয়োজন হলেও, কমান্ডগুলি যাতে সবসময় সঠিক ক্রমে এক্সিকিউট হয় তা নিশ্চিত করুন (#৮৫)।
DefaultMediaNotificationProviderইনস্ট্যান্স তৈরি করতেDefaultMediaNotificationProvider.Builderযোগ করুন। বিল্ডার, বিজ্ঞপ্তি আইডি, বিজ্ঞপ্তি চ্যানেল আইডি এবং বিজ্ঞপ্তি চ্যানেল নাম কনফিগার করতে পারে যা পরিষেবা প্রদানকারী ব্যবহার করে। এছাড়াও, বিজ্ঞপ্তির ছোট আইকন সেট করতেDefaultMediaNotificationProvider.setSmallIcon(int)পদ্ধতি যোগ করুন। (#১০৪)।MediaController.release()-এর আগে পাঠানো কমান্ড যাতে ড্রপ না হয় তা নিশ্চিত করুন (#৯৯)।SimpleBitmapLoader,file://URI থেকে বিটম্যাপ লোড করতে পারে (#১০৮)।- একটি নির্দিষ্ট সময়সীমার মধ্যে (#১২২)
MediaController-কে বিজ্ঞাপনের উপর দিয়ে সিক করা থেকে আটকায় এমন অ্যাসারশন ঠিক করুন। - প্লেব্যাক শেষ হলে, ফোরগ্রাউন্ড থেকে
MediaSessionServiceবন্ধ হয়ে যায় এবং শেষবার চালানো মিডিয়া আইটেমের প্লেব্যাক রিস্টার্ট করার জন্য একটি বিজ্ঞপ্তি দেখানো হয় (#১১২)। - পজ করার জন্য পেন্ডিং ইনটেন্ট সহ ফোরগ্রাউন্ড পরিষেবা শুরু করবেন না (#১৬৭)।
- API 26 ও API 27-এ
DefaultNotificationProvider-এর তৈরি করা বিজ্ঞপ্তির সাথে যুক্ত 'ব্যাজ' ম্যানুয়ালি লুকান (API 28+-এ ব্যাজ অটোমেটিক লুকানো হয়) (#131)। - পুরনো MediaSession থেকে Media3 MediaController-এ দ্বিতীয় বাইন্ডার কানেকশন IllegalStateExceptions-এর কারণ হওয়ার সমস্যা সমাধান করা হয়েছে (#৪৯)।
- RTSP:
- IMA:
- FFmpeg এক্সটেনশন:
- NDK 23.1.7779620 এবং তার পরবর্তী ভার্সনের সাথে FFmpeg লাইব্রেরি লিঙ্ক করতে নতুন প্রয়োজনীয় ফ্ল্যাগ যোগ করুন (#9933)।
- AV1 এক্সটেনশন:
- লেটেস্ট Android Studio রিলিজের সাথে অসঙ্গতি এড়াতে CMake ভার্সন আপডেট করুন (#9933)।
- কাস্ট এক্সটেনশন:
MediaController-এর মাধ্যমে প্লেব্যাক কন্ট্রোল করার সময়CastPlayerশনাক্ত করতেgetDeviceInfo()প্রয়োগ করুন (#১৪২)।
- ট্রান্সফর্মার:
- আউটপুট স্যাম্পেল তৈরি করতে খুব বেশি সময় লাগলে তা শনাক্ত করার জন্য 'মিক্সার ওয়াচডগ টাইমার' যোগ করুন।
- বাতিল করা চিহ্ন সরান:
Transformer.Builder.setOutputMimeType(String)সরান। এই ফিচারটি সরিয়ে দেওয়া হয়েছে। ডিফল্ট মাক্সার ব্যবহার করা হলে, MIME-এর ধরন সবসময় MP4 হবে।
ভার্সন 1.0.0-beta02
২১ জুলাই, ২০২২
androidx.media3:media3-*:1.0.0-beta02 রিলিজ করা হয়েছে। ভার্সন 1.0.0-beta02-এ
এইসব কমিট রয়েছে।
এই রিলিজ ExoPlayer 2.18.1 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
ShuffleOrder-এর পরিবর্তেExoPlayer.setShuffleOrderব্যবহার করলেreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED-এর সাথেPlayer.Listener#onTimelineChanged-এ কল করা হয় কিনা তা নিশ্চিত করুন (#৯৮৮৯)।- প্রোগ্রেসিভ মিডিয়ার জন্য, বাফার করা পজিশনে শুধু বেছে নেওয়া ট্র্যাক অন্তর্ভুক্ত করুন (#১০৩৬১)।
- সব ExoPlayer লগ আউটপুটের জন্য কাস্টম লগারকে অনুমতি দিন (#৯৭৫২)।
DefaultMediaSourceFactory-এsetDataSourceFactory-এর প্রয়োগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যা কিছু ক্ষেত্রে কাজ করছিল না (#১১৬)।
- এক্সট্র্যাক্টর:
- DASH:
- ম্যানিফেস্ট থেকে ClearKey লাইসেন্স URL পার্স করুন (#১০২৪৬)।
- UI:
- প্লেব্যাক কন্ট্রোল মেনুতে বর্তমানে অ্যাক্টিভ স্পিড বিকল্পটি টকব্যাক ঘোষণা করছে কিনা তা নিশ্চিত করুন (#১০২৯৮)।
- RTSP:
- VP8 ফ্র্যাগমেন্টেড প্যাকেট হ্যান্ডলিং যোগ করুন (#১১০)।
- Leanback এক্সটেনশন:
LeanbackAdapter-এplayWhenReadyটি পরিবর্তন শুনুন (10420)।
- অভিনয়ে:
Version 1.0.0-beta01
১৬ জুন, ২০২২
androidx.media3:media3-*:1.0.0-beta01 রিলিজ করা হয়েছে। ভার্সন 1.0.0-beta01-এ
এইসব কমিট রয়েছে।
এটি ExoPlayer 2.18.0 রিলিজ-এর সাথে সম্পর্কিত।
- কোর লাইব্রেরি:
MediaMetricsManager-এর মাধ্যমে Android প্ল্যাটফর্ম ডায়াগনস্টিকসের জন্য সহায়তা চালু করুন। ExoPlayer প্ল্যাটফর্মে প্লেব্যাক ইভেন্ট এবং পারফর্ম্যান্স ডেটা ফরওয়ার্ড করবে, যা ডিভাইসে সিস্টেম পারফর্ম্যান্স এবং ডিবাগিং তথ্য প্রদান করতে সাহায্য করে। ব্যবহার ও ডায়াগনস্টিক ডেটা শেয়ার করার বিকল্প চালু থাকলে, ডিভাইসের ব্যবহারকারীর থেকে Google এই ডেটাও সংগ্রহ করতে পারে।ExoPlayer.Builder.setUsePlatformDiagnostics(false)-এর মাধ্যমে ExoPlayer-এর জন্য প্ল্যাটফর্ম ডায়াগনস্টিক্সে কন্ট্রিবিউট করা থেকে অ্যাপ বেরিয়ে আসতে পারে।MergingMediaSourceব্যবহার করার সময় ট্র্যাক খুব ঘন ঘন রিসেট হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে, যেমন সাবটাইটেল সাইড-লোড করার সময় এবং প্লেব্যাক চলাকালীন বেছে নেওয়া সাবটাইটেল পরিবর্তন করার সময় (#১০২৪৮)।- API 29 ও 30-এ 5G-NSA নেটওয়ার্কের ধরন শনাক্ত করা বন্ধ করুন। এইসব প্লেব্যাক 4G নেটওয়ার্ক ব্যবহার করবে।
null-কেMediaSource.Factory.setDrmSessionManagerProviderএবংMediaSource.Factory.setLoadErrorHandlingPolicy-এ পাস করার অনুমতি দেবেন না। প্রয়োজন হলেDefaultDrmSessionManagerProviderওDefaultLoadErrorHandlingPolicy-এর ইনস্ট্যান্স স্পষ্টভাবে পাস করা যেতে পারে।- সঠিক
LocalConfigurationজানা না থাকলে, মিডিয়া চালানোর জন্য প্রয়োজনীয় মেটাডেটা দেখাতেMediaItem.RequestMetadataযোগ করুন। এছাড়াও,MediaMetadata.mediaUrlসরিয়ে দিন কারণ এটি এখনRequestMetadata-এ অন্তর্ভুক্ত করা হয়েছে। Player.Command.COMMAND_SET_MEDIA_ITEMযোগ করুন যাতে প্লেয়াররা একটি আইটেম সেট করার অনুমতি দিতে পারেন।
- ট্র্যাক বেছে নেওয়া:
TrackSelectionOverridesক্লাসকেTrackSelectionParameters-এ ফ্ল্যাটেন করুন, এবংTrackSelectionOverride-কে টপ লেভেল ক্লাসে প্রোমোট করুন।TracksInfo-এর নাম পরিবর্তন করেTracksএবংTracksInfo.TrackGroupInfo-এর নাম পরিবর্তন করেTracks.Groupকরুন।Player.getCurrentTracksInfoএবংPlayer.Listener.onTracksInfoChanged-এর নাম পরিবর্তন করেPlayer.getCurrentTracksএবংPlayer.Listener.onTracksChangedকরা হয়েছে। এর মধ্যেPlayer.Listener.onTracksChangedমেথডের নাম 'আন-ডেপ্রিকেট' করা অন্তর্ভুক্ত, তবে প্যারামিটারের ধরন আলাদা।DefaultTrackSelector.buildUponParametersএবংDefaultTrackSelector.Parameters.buildUponপরিবর্তন করুন যাতেDefaultTrackSelector.ParametersBuilder-এর পরিবর্তেDefaultTrackSelector.Parameters.Builderরিটার্ন করা যায়।DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesযোগ করুন যা ডিফল্ট হিসেবে চালু করা থাকে। চালু করা থাকলে,DefaultTrackSelectorএমন অডিও ট্র্যাক পছন্দ করবে যার চ্যানেল সংখ্যা ডিভাইসের আউটপুট ক্ষমতার বেশি নয়। হ্যান্ডহেল্ড ডিভাইসে,DefaultTrackSelectorমাল্টিচ্যানেল অডিও ফর্ম্যাটের পরিবর্তে স্টেরিও/মনো ফর্ম্যাটকে অগ্রাধিকার দেবে, যদি না মাল্টিচ্যানেল ফর্ম্যাট স্পেশিয়ালাইজড (Android 12L+) করা যায় অথবা Dolby সারাউন্ড সাউন্ড ফর্ম্যাট হয়। এছাড়াও, অডিও স্পেশিয়ালাইজেশন কাজ করে এমন ডিভাইসে,DefaultTrackSelectorস্পেশিয়ালাইজার প্রপার্টিতে পরিবর্তন মনিটর করবে এবং এর ভিত্তিতে নতুন ট্র্যাক বেছে নেওয়ার ট্রিগার করবে।televisionUI মোড সহ ডিভাইসগুলি এই সীমাবদ্ধতা থেকে বাদ দেওয়া হয়েছে এবং সর্বোচ্চ চ্যানেল সংখ্যা সহ ফর্ম্যাটটি পছন্দ করা হবে। এই ফিচার চালু করতে,DefaultTrackSelectorইনস্ট্যান্স অবশ্যইContextদিয়ে তৈরি করতে হবে।
- ভিডিও:
DummySurface-এর নাম পরিবর্তন করেPlaceholderSurfaceকরুন।MediaCodecVideoRenderer.getCodecMaxInputSize-এ AV1 সাপোর্ট যোগ করুন।
- অডিও:
- LG AC3 অডিও ডিকোডার বিজ্ঞাপন নন-স্ট্যান্ডার্ড MIME টাইপ ব্যবহার করুন।
AudioAttributes.getAudioAttributesV21()-এর রিটার্ন টাইপandroid.media.AudioAttributesথেকে নতুনAudioAttributesV21র্যাপার ক্লাসে পরিবর্তন করুন, যাতে API < 21-এ ART যাচাইকরণ ধীরগতির না হয়।- ফর্ম্যাট অডিও চ্যানেল কাউন্ট সেট না করা থাকলে, অডিও পাসথ্রুয়ের জন্য প্ল্যাটফর্ম (API 29+) কোয়েরি করুন অথবা অডিও এনকোডিং চ্যানেল কাউন্ট অনুমান করুন, যা HLS চাঙ্কলেস প্রিপারেশনের (10204) সাথে ঘটে।
- ডিকোডার ১২ চ্যানেল পিসিএম অডিও আউটপুট করলে,
চ্যানেল মাস্কের সাথে
AudioTrackকনফিগার করুনAudioFormat.CHANNEL_OUT_7POINT1POINT4(#১০৩২২.
- DRM
- ফর্ম্যাট পরিবর্তন করার ঠিক পরেই সিক করার সময় DRM সেশন সবসময় সঠিকভাবে আপডেট করা হয়েছে কিনা তা নিশ্চিত করুন (10274)।
- টেক্সট:
List<Cue>-এর পরিবর্তেCueGroupরিটার্ন করতেPlayer.getCurrentCues()পরিবর্তন করুন।- SSA:
BorderStyle == 3(যেমন,OutlineColourকিউয়ের ব্যাকগ্রাউন্ড সেট করে) হলেOutlineColourস্টাইল সেটিং সাপোর্ট করে (#8435)। - CEA-708: একাধিক পরিষেবা ব্লকে ডেটা পার্স করুন এবং বর্তমানে বেছে নেওয়া পরিষেবা নম্বরের সাথে সম্পর্কিত নয় এমন ব্লক উপেক্ষা করুন।
RawCcExtractorসরান, যা শুধুমাত্র Google-এর ইন্টার্নাল সাবটাইটেল ফর্ম্যাট ম্যানেজ করার জন্য ব্যবহার করা হয়েছিল।
- এক্সট্র্যাক্টর:
- UI:
useController=false-এর ক্ষেত্রেPlayerView-এ সেট করাOnClickListener-এ ইভেন্ট ডেলিভারি সংক্রান্ত সমস্যার সমাধান করুন (#৯৬০৫)। এছাড়াও, সব ভিউ কনফিগারেশনের জন্যOnLongClickListener-এ ইভেন্ট ডেলিভারি সংক্রান্ত সমস্যার সমাধান করুন।ACTION_UP-এর আগেPlayerView-এর সীমা থেকে বেরিয়ে যাওয়া টাচ ইভেন্টের ক্রমকে ভুলভাবে ক্লিক হিসেবে বিবেচনা করার সমস্যার সমাধান করা হয়েছে (#৯৮৬১)।PlayerViewঅ্যাক্সেসিবিলিটি সংক্রান্ত সমস্যা সমাধান করা হয়েছে যেখানে ট্যাপ করলে কন্ট্রোল লুকানোর পরিবর্তে প্লেব্যাক টগল হতে পারে (#৮৬২৭)।ExoPlayer-এর পরিবর্তেPlayerইন্টারফেসের সাথে কাজ করার জন্যTrackSelectionViewএবংTrackSelectionDialogBuilderআবার লেখো। এটি অন্যান্যPlayerইমপ্লিমেন্টেশনের সাথে ভিউ ব্যবহার করার অনুমতি দেয় এবং UI মডিউল থেকে ExoPlayer মডিউলের নির্ভরতা সরিয়ে দেয়। এটি একটি ব্রেকিং পরিবর্তন।PlayerViewট্র্যাক সিলেক্টরে ফোর্সড টেক্সট ট্র্যাক দেখাবেন না এবং "কোনওটিই নয়" বিকল্প বেছে নেওয়া হলে, উপযুক্ত ফোর্সড টেক্সট ট্র্যাক বেছে নিন (#৯৪৩২)।
- DASH:
AudioChannelConfigurationএলিমেন্ট DTS থেকে চ্যানেল সংখ্যা পার্স করুন। এটি DTS স্ট্রিমের জন্য অডিও পাসথ্রু আবার চালু করে (#১০১৫৯)।null-কেDashMediaSource.Factory.setCompositeSequenceableLoaderFactory-এ পাস করার অনুমতি দেবেন না। প্রয়োজন হলেDefaultCompositeSequenceableLoaderFactory-এর ইনস্ট্যান্স স্পষ্টভাবে পাস করা যেতে পারে।
- HLS:
- প্লেলিস্টের CODECS অ্যাট্রিবিউটে অডিও কোডেক না থাকলে, চাঙ্কফুল প্রস্তুতিতে ফিরে যান (#10065)।
null-কেHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryএবংHlsMediaSource.Factory.setPlaylistTrackerFactory-এ পাস করার অনুমতি দেবেন না। প্রয়োজন হলেDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactory-এর ইনস্ট্যান্স অথবাDefaultHlsPlaylistTracker.FACTORY-এর রেফারেন্স স্পষ্টভাবে পাস করা যেতে পারে।
- স্মুথ স্ট্রিমিং:
null-কেSsMediaSource.Factory.setCompositeSequenceableLoaderFactory-এ পাস করার অনুমতি দেবেন না। প্রয়োজন হলেDefaultCompositeSequenceableLoaderFactory-এর ইনস্ট্যান্স স্পষ্টভাবে পাস করা যেতে পারে।
- RTSP:
- H263-এর জন্য RTP রিডার যোগ করুন (#63)।
- MPEG4-এর জন্য RTP রিডার যোগ করুন (#৩৫)।
- HEVC-এর জন্য RTP রিডার যোগ করুন (#৩৬)।
- AMR-এর জন্য RTP রিডার যোগ করুন। বর্তমানে শুধুমাত্র মনো-চ্যানেল, নন-ইন্টারলিভড AMR স্ট্রিম কাজ করে। কম্পাউন্ড AMR RTP পেলোড কাজ করে না। (#৪৬)
- VP8-এর জন্য RTP রিডার যোগ করুন (#৪৭)।
- WAV-এর জন্য RTP রিডার যোগ করুন (#৫৬)।
- RTSP বেসিক অথরাইজেশন হেডার ঠিক করুন। (#9544)।
- ExoPlayer-এর প্রয়োজন নেই বলে বাধ্যতামূলক SDP ফিল্ড চেক করা বন্ধ করুন (#10049)।
- RTSP টাইমিং পার্স করার সময় চেক করা ব্যতিক্রম থ্রো করুন (#১০১৬৫)।
- VP9-এর জন্য RTP রিডার যোগ করুন (#৪৭)।
- OPUS-এর জন্য RTP রিডার যোগ করুন (#৫৩)।
- ডেটা সোর্স:
DummyDataSource-এর নাম পরিবর্তন করেPlaceholderDataSourceকরুন।- OkHttp ইন্টারাপ্ট হ্যান্ডলিংয়ের বিকল্প সমাধান।
- সেশন:
- অনুরোধের অ্যাসিঙ্ক্রোনাস রেজোলিউশনের অনুমতি দিতে
MediaSession.MediaItemFiller-এর পরিবর্তেMediaSession.Callback.onAddMediaItemsব্যবহার করুন। MediaControllerকোনও লিগ্যাসি মিডিয়া সেশনের সাথে কানেক্ট করলেsetMediaItems(s)পদ্ধতি কাজ করে।MediaController.setMediaUriএবংMediaSession.Callback.onSetMediaUriসরিয়ে দিন।MediaController.setMediaItemএবংMediaSession.Callback.onAddMediaItemsব্যবহার করে একই কার্যকারিতা পাওয়া যেতে পারে।onSetMediaUri-এর পরিবর্তেMediaSession.Callback.onAddMediaItems-এ মিডিয়া চালাতে পুরনোMediaControllerকল ফরওয়ার্ড করুন।- বিজ্ঞপ্তি কাস্টমাইজ করার সুবিধা দিতে
MediaNotification.ProviderএবংDefaultMediaNotificationProviderযোগ করুন। - আর্টওয়ার্কের ছবি ডাউনলোড করার জন্য
BitmapLoaderএবংSimpleBitmapLoaderযোগ করুন। - লিগ্যাসি সেশনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি
প্রদান করতে
MediaSession.setCustomLayout()যোগ করুন। - পুরনো সেশনের সাথে ফিচার সমতা প্রদান করতে
MediaSession.setSessionExtras()যোগ করুন। MediaSession.MediaSessionCallback-এর নাম পরিবর্তন করেMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallback-এর নাম পরিবর্তন করেMediaLibrarySession.CallbackএবংMediaSession.Builder.setSessionCallback-এর নাম পরিবর্তন করেsetCallbackকরুন।MediaControllerImplLegacy-এ NPE সংক্রান্ত সমস্যার সমাধান করুন (#59)।- টাইমলাইনে সেশন পজিশন সংক্রান্ত তথ্য আপডেট করুন পরিবর্তন(#51)।
- কন্ট্রোলার রিলিজ করার পরে
MediaControllerImplBase-এ NPE ঠিক করুন (#74)।
- অনুরোধের অ্যাসিঙ্ক্রোনাস রেজোলিউশনের অনুমতি দিতে
- বিজ্ঞাপন প্লেব্যাক / IMA:
- মিডিয়া রেটিং কাউন্সিলের (MRC) সাজেশন অনুযায়ী, বিজ্ঞাপন পোলিং রেট প্রতি ১০০ মিলি সেকেন্ড থেকে কমিয়ে প্রতি ২০০ মিলি সেকেন্ড করুন।
- FFmpeg এক্সটেনশন:
- CMake ভার্সন
3.21.0+-এ আপডেট করুন যাতে CMake বাগের কারণে AndroidStudio-র gradle সিঙ্ক ব্যর্থ না হয় (#৯৯৩৩)।
- CMake ভার্সন
- বাতিল করা চিহ্ন সরান:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)সরান। পরিবর্তেPlayer.Listener.onTracksChanged(Tracks)ব্যবহার করুন।Player.getCurrentTrackGroupsএবংPlayer.getCurrentTrackSelectionsসরিয়ে দিন। পরিবর্তেPlayer.getCurrentTracksব্যবহার করুন। এছাড়াও, আপনিExoPlayer.getCurrentTrackGroupsওExoPlayer.getCurrentTrackSelectionsব্যবহার করা চালিয়ে যেতে পারবেন, যদিও এইসব পদ্ধতি বন্ধ করা হয়েছে।DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTএবংDEFAULT_TRACK_SELECTOR_PARAMETERSধ্রুবক সরান। সম্ভব হলেgetDefaultTrackSelectorParameters(Context)ব্যবহার করুন, অন্যথায়DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTব্যবহার করুন।- কনস্ট্রাক্টর
DefaultTrackSelector(ExoTrackSelection.Factory)সরান। পরিবর্তেDefaultTrackSelector(Context, ExoTrackSelection.Factory)ব্যবহার করুন। Transformer.Builder.setContextসরান। পরিবর্তেContext-কেTransformer.Builderকনস্ট্রাক্টরে পাস করতে হবে।
ভার্সন 1.0.0-alpha03
১৪ মার্চ, ২০২২
androidx.media3:media3-*:1.0.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha03-এ
এইসব কমিট
রয়েছে।
এটি ExoPlayer 2.17.1 রিলিজ-এর সাথে সম্পর্কিত।
- অডিও:
- HLS-এ Dolby Atmos (E-AC3-JOC)-এর জন্য অডিও ক্ষমতা চেক করার সময় হওয়া সমস্যার সমাধান করা হয়েছে।
- এক্সট্র্যাক্টর:
- FMP4: v0 এবং v1 emsg অ্যাটম, দু'টিই আছে এমন স্ট্রিমের ক্ষেত্রে emsg স্যাম্পেল মেটাডেটা ভুল ক্রমে আউটপুট হতে পারে, এই সমস্যার সমাধান করা হয়েছে (#৯৯৯৬)।
- টেক্সট:
SingleSampleMediaSource.Factory.setTrackIdএবংMediaItem.SubtitleConfiguration.Builder.setId-এর ইন্টার্যাকশন ঠিক করুন যাতেSubtitleConfigurationফিল্ডকে অগ্রাধিকার দেওয়া যায় এবং এটি সেট করা না থাকলেFactoryভ্যালুতে ফিরে যাওয়া যায় (#10016)।
- বিজ্ঞাপন প্লেব্যাক:
- লাইভ HLS SSAI স্ট্রিমে বিজ্ঞাপনের সময়সীমার মধ্যে অডিও আন্ডাররান সংক্রান্ত সমস্যার সমাধান করুন।
Version 1.0.0-alpha02
২ মার্চ, ২০২২
androidx.media3:media3-*:1.0.0-alpha02 রিলিজ করা হয়েছে। Version 1.0.0-alpha02
contains these
commits.
এটি ExoPlayer 2.17.0 রিলিজ-এর সাথে সম্পর্কিত।
- Core Library:
- সুরক্ষিত পদ্ধতি
DefaultRenderersFactory.getCodecAdapterFactory()যোগ করুন যাতেDefaultRenderersFactory-এর সাবক্লাস যাbuildVideoRenderers()বাbuildAudioRenderers()ওভাররাইড করে, কোডেক অ্যাডাপ্টার ফ্যাক্টরি অ্যাক্সেস করতে পারে এবং এটি তাদের তৈরি করাMediaCodecRendererইনস্ট্যান্সে পাস করতে পারে। - ICY হেডার ফিল্ড
nameএবংgenreযথাক্রমেMediaMetadata.stationএবংMediaMetadata.genre-এ প্রোপাগেট করুন যাতে সেগুলিPlayer.Listener.onMediaMetadataChanged()-এর মাধ্যমে অ্যাপে পৌঁছায় (#৯৬৭৭)। DefaultHttpDataSource#getResponseHeadersথেকে ফাঁকা কী সরান।MediaCodecইনস্ট্যান্স তৈরি করা না গেলে, স্লিপ মোডে গিয়ে আবার চেষ্টা করুন। এটি কিছু ডিভাইসে সারফেসকে সুরক্ষিত কোডেক থেকে অন্য কোডেকে পরিবর্তন করার সময় যে সমস্যা হয় তার সমাধান করে (#৮৬৯৬)।- ব্যবহারকারীদের
MediaCodecথেকে মেট্রিক ডেটা পাওয়ার অনুমতি দিতেMediaCodecAdapter.getMetrics()যোগ করুন। (#9766)। - Maven ডিপেন্ডেন্সি রেজোলিউশন সংক্রান্ত সমস্যার সমাধান করুন (#৮৩৫৩)।
- লাইভ স্ট্রিমের জন্য অটোমেটিক স্পিড অ্যাডজাস্টমেন্ট বন্ধ করুন, যেটিতে লো-লেটেন্সি ফিচার নেই এবং ব্যবহারকারী স্পিড সেট করার অনুরোধ করেননি (#9329)।
DecoderCounters#inputBufferCount-এর নাম পরিবর্তন করেqueuedInputBufferCountকরুন।SimpleExoPlayer.renderersব্যক্তিগত করুন।ExoPlayer.getRenderer-এর মাধ্যমে রেন্ডারার অ্যাক্সেস করা যাবে।Player.EventFlags-এর ভ্যালুর সাথে ম্যাচ করার জন্য কিছুAnalyticsListener.EventFlagsকনস্ট্যান্ট ভ্যালু আপডেট করা হয়েছে।AnalyticsCollector-কে ইন্টারফেস ও ডিফল্ট ইমপ্লিমেন্টেশনে ভাগ করুন যাতে কোনও অ্যাপের প্রয়োজন না হলে R8-এর মাধ্যমে এটি বাদ দেওয়া যায়।
- সুরক্ষিত পদ্ধতি
- ট্র্যাক বেছে নেওয়া:
- ট্র্যাক বেছে নেওয়ার সময় পছন্দের ভিডিও রোল ফ্ল্যাগকে সাপোর্ট করে (#9402)।
- অ্যাডাপ্টেশনের জন্য একাধিক ভিডিও ট্র্যাক বেছে নেওয়ার সময়, পছন্দের MIME টাইপ ও রোল ফ্ল্যাগ বিবেচনা করার জন্য ভিডিও ট্র্যাক বেছে নেওয়ার লজিক আপডেট করুন (#9519)।
- ভিডিও ও অডিও ট্র্যাক বেছে নেওয়ার লজিক আপডেট করুন যাতে অ্যাডাপ্টিভ বেছে নেওয়ার জন্য শুধুমাত্র সেইসব ফর্ম্যাট বেছে নেওয়া হয় যেগুলির ডিকোডার ও হার্ডওয়্যার সাপোর্ট একই লেভেলের (#9565)।
- প্রাইমারি, হার্ডওয়্যার-অ্যাক্সিলারেটেড ডিকোডার একাধিক কোডেক সাপোর্ট করলে, আরও দক্ষ কোডেককে অগ্রাধিকার দিতে ভিডিও ট্র্যাক বেছে নেওয়ার লজিক আপডেট করুন (#৪৮৩৫)।
- টেকনিক্যাল ট্র্যাক বেছে নেওয়ার সীমাবদ্ধতার (যেমন, পছন্দের MIME-এর ধরন বা চ্যানেলের সর্বাধিক সংখ্যা) পরিবর্তে অডিও কন্টেন্ট সংক্রান্ত পছন্দ (যেমন, "ডিফল্ট" অডিও ট্র্যাক বা সিস্টেমের স্থানীয় ভাষার সাথে ম্যাচ করে এমন ট্র্যাক) বেছে নিন।
- ট্র্যাক বেছে নেওয়ার সমস্যা সমাধান করা হয়েছে যেখানে একটি ট্র্যাক গ্রুপ ওভাররাইড করলে একই ধরনের অন্যান্য ট্র্যাক গ্রুপ বন্ধ হয়ে যেত না (#9675)।
- ট্র্যাক বেছে নেওয়ার সমস্যা সমাধান করা হয়েছে যেখানে খালি নয় এবং খালি ট্র্যাক ওভাররাইডের মিশ্রণ সঠিকভাবে প্রয়োগ করা হয়নি (#৯৬৪৯)।
TrackGroupArray-এ ডুপ্লিকেটTrackGroupনিষিদ্ধ করুন।TrackGroupকনস্ট্রাক্টরেidসেট করেTrackGroup-কে সবসময় আলাদা করে চেনা যায়। অ্যাক্টিভ ট্র্যাক ওভাররাইড সহ অ্যাপ ব্যাকগ্রাউন্ডে পাঠানোর পরে প্লেব্যাক আবার শুরু করার সময় ক্র্যাশ হওয়ার সমস্যা এটি সমাধান করে (#9718)।AdaptiveTrackSelection-এ লজিক সংশোধন করুন যাতে প্লেব্যাক লাইভ এজের খুব কাছাকাছি থাকলেও (#9784) পর্যাপ্ত নেটওয়ার্ক ব্যান্ডউইথের অধীনে কোয়ালিটি বাড়ানোর অনুমতি দেওয়া যায়।
- ভিডিও:
- প্রয়োজন হলে, Dolby Vision-এর জন্য ডিকোডার ফলব্যাক লজিক ঠিক করুন যাতে মানানসই H264/H265 ডিকোডার ব্যবহার করা যায়।
- অডিও:
- প্রয়োজন হলে মানানসই E-AC3 ডিকোডার ব্যবহার করার জন্য Dolby Atmos (E-AC3-JOC)-এর জন্য ডিকোডার ফলব্যাক লজিক ঠিক করুন।
AudioCapabilitiesAPI পরিবর্তন করুন যাতেnull-এর পরিবর্তে স্পষ্টভাবেAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESপাস করার প্রয়োজন হয়।DefaultAudioSink-এAudioTrackBufferSizeProviderইনজেক্ট করেAudioTrackবাফার সাইজ গণনা কাস্টমাইজ করার অনুমতি দিন। (#8891)।- অনুরোধ করা বাফার সাইজ > ১ এমবি হলে,
AudioTrackতৈরি করার জন্য আবার চেষ্টা করুন। (#৯৭১২)।
- এক্সট্র্যাক্টর:
- টেক্সট:
- একটি
MediaItem.SubtitleConfiguration.idফিল্ড যোগ করুন যা কনফিগারেশন থেকে তৈরি সাবটাইটেল ট্র্যাকেরFormat.idফিল্ডে প্রোপাগেট করা হয় (#৯৬৭৩)। - Matroska কন্টেনারে WebVTT সাবটাইটেলের জন্য প্রাথমিক সহায়তা যোগ করা হয়েছে (#৯৮৮৬)।
Cea708Decoderযাতে কোনও সার্ভিস ব্লকের ঘোষিত সাইজের চেয়ে বেশি পড়তে না পারে তা আটকান।
- একটি
- DRM:
DrmSessionManager.(pre)acquireSessionথেকেplaybackLooperসরান। কাস্টমMediaSource-এ কোনও অ্যাপের মাধ্যমেDrmSessionManagerব্যবহার করা হলে, পরিবর্তেplaybackLooper-কেDrmSessionManager.setPlayer-এ পাস করতে হবে।
- বিজ্ঞাপন প্লেব্যাক / IMA:
- IMA ডায়নামিক বিজ্ঞাপন ইনসার্শন (DAI)-এর জন্য সহায়তা যোগ করুন (#8213).
AdPlaybackState-এ একটি পদ্ধতি যোগ করুন যাতে বিজ্ঞাপন গ্রুপ রিসেট করার অনুমতি দেওয়া যায় এবং এটি আবার চালানো যায় (#9615)।- বিজ্ঞাপন প্লেব্যাকের সময় প্লেব্যাক স্পিড ১.০ এনফোর্স করুন (#৯0১৮)।
- বিজ্ঞাপন গ্রুপ লোড না হওয়ার কারণে অবিলম্বে প্লেব্যাক রিসেট হওয়ার সমস্যা সমাধান করা হয়েছে (#৯৯২৯)।
- UI:
- DASH:
Representation-এ পার্স করা প্রয়োজনীয় ও সাপ্লিমেন্টাল প্রপার্টি যোগ করুন (#৯৫৭৯)।forced-subtitleট্র্যাক রোলের জন্য সহায়তা (#৯৭২৭)।mainট্র্যাকের ভূমিকাC.SELECTION_FLAG_DEFAULTহিসেবে ব্যাখ্যা করা বন্ধ করুন।- DVB নেমস্পেস (#৯৮৫৬) ঘোষণা করে না এমন ম্যানিফেস্টের জন্য বেস URL এক্সক্লুশন লজিক সংক্রান্ত সমস্যার সমাধান করুন।
- রিলেটিভ
MPD.LocationURL-এর ক্ষেত্রে কাজ করে (#৯৯৩৯)।
- HLS:
- শুধুমাত্র অডিও HLS স্ট্রিমের জন্য
Format.labelসঠিকভাবে পপুলেট করুন (#9608)। - স্টার্ট আপ টাইম উন্নত করতে ডিফল্ট হিসেবে চাঙ্কলেস প্রস্তুতি ব্যবহার করুন। আপনার
রেন্ডিশনে যদি মাক্সড ক্লোজড-ক্যাপশন ট্র্যাক থাকে যা মাস্টার প্লেলিস্টে
ঘোষণা করা হয়নি, তাহলে প্লেব্যাকের জন্য উপলভ্য করতে আপনাকে সেগুলি মাস্টার প্লেলিস্টে যোগ করতে হবে অথবা
HlsMediaSource.Factory.setAllowChunklessPreparation(false)-এর মাধ্যমে চাঙ্কলেস প্রস্তুতি বন্ধ করতে হবে। - HLS-এ সঠিক কী-ফ্রেম খোঁজার সুবিধা (#২৮৮২)।
- শুধুমাত্র অডিও HLS স্ট্রিমের জন্য
- RTSP:
- ট্রান্সফর্মার:
- প্রয়োজনীয় ন্যূনতম API ভার্সন বাড়িয়ে ২১ করুন।
- ট্রান্সফর্মেশনের সময় হওয়া সমস্যা বর্ণনা করতে এখন
TransformationExceptionব্যবহার করা হয়। - ট্রান্সফর্মেশনের বিকল্প নির্দিষ্ট করতে
TransformationRequestযোগ করুন। - একাধিক শ্রোতাকে রেজিস্টার করার অনুমতি দিন।
- কোডেক আউটপুট আংশিকভাবে পড়া হলে ট্রান্সফরমার আটকে যাওয়ার সমস্যা সমাধান করুন।
- মিক্সার রিলিজ করার সময়
Transformer.getProgress-এ সম্ভাব্য NPE সংক্রান্ত সমস্যার সমাধান করে থ্রো করে। - ট্রান্সফর্মেশন প্রয়োগ করার জন্য একটি ডেমো অ্যাপ যোগ করুন।
- MediaSession এক্সটেনশন:
- ডিফল্ট হিসেবে,
MediaSessionConnectorএখন বন্ধ করার সময় প্লেলিস্ট মুছে দেয়। যেসব অ্যাপ প্লেলিস্ট রেখে দিতে চায়, তারা কানেক্টরেsetClearMediaItemsOnStop(false)কল করতে পারে।
- ডিফল্ট হিসেবে,
- কাস্ট এক্সটেনশন:
- FFmpeg এক্সটেনশন:
build_ffmpeg.sh-কে GNU-এর পরিবর্তে LLVM-এর বিন ইউটিলিটির উপর নির্ভর করতে দিন (#9933)।
- Android 12-এর সাথে মানানসই:
- Cast এক্সটেনশন আপগ্রেড করুন যাতে এটি
com.google.android.gms:play-services-cast-framework:20.1.0-এর উপর নির্ভর করে।play-services-cast-framework-এর আগের ভার্সনগুলি Android 12-কে টার্গেট করা অ্যাপের সাথে মানানসই নয় এবংPendingIntentতৈরি করার সময়IllegalArgumentException-এর সাথে ক্র্যাশ করবে (#9528)।
- Cast এক্সটেনশন আপগ্রেড করুন যাতে এটি
- বাতিল করা চিহ্ন সরান:
Player.EventListenerসরান। পরিবর্তেPlayer.Listenerব্যবহার করুন।MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryএবংMediaSourceFactory#setDrmUserAgentসরান। পরিবর্তেMediaSourceFactory#setDrmSessionManagerProviderব্যবহার করুন।MediaSourceFactory#setStreamKeysসরান। পরিবর্তেMediaItem.Builder#setStreamKeysব্যবহার করুন।MediaSourceFactory#createMediaSource(Uri)সরান। পরিবর্তেMediaSourceFactory#createMediaSource(MediaItem)ব্যবহার করুন।DashMediaSource,HlsMediaSourceওSsMediaSourceথেকেsetTagসরান। পরিবর্তেMediaItem.Builder#setTagব্যবহার করুন।DashMediaSource#setLivePresentationDelayMs(long, boolean)সরান। ম্যানিফেস্ট ওভাররাইড করতেMediaItem.Builder#setLiveConfigurationএবংMediaItem.LiveConfiguration.Builder#setTargetOffsetMsব্যবহার করুন অথবা ফলব্যাক ভ্যালু প্রদান করতেDashMediaSource#setFallbackTargetLiveOffsetMsব্যবহার করুন।(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadসরান। থ্রেড এনফোর্সমেন্ট থেকে বেরিয়ে আসা আর সম্ভব নয়।ActionFileএবংActionFileUpgradeUtilসরান।DefaultDownloadIndex-এ পুরনো অ্যাকশন ফাইল মার্জ করতেActionFileUpgradeUtilব্যবহার করার জন্য ExoPlayer 2.16.1 বা তার আগের ভার্সন ব্যবহার করুন।ProgressiveMediaSource#setExtractorsFactoryসরান। পরিবর্তেProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)কনস্ট্রাক্টর ব্যবহার করুন।ProgressiveMediaSource.Factory#setTagএবং, এবংProgressiveMediaSource.Factory#setCustomCacheKeyসরিয়ে দিন। পরিবর্তেMediaItem.Builder#setTagএবংMediaItem.Builder#setCustomCacheKeyব্যবহার করুন।DefaultRenderersFactory(Context, @ExtensionRendererMode int)এবংDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)কনস্ট্রাক্টর সরান। পরিবর্তেDefaultRenderersFactory(Context)কনস্ট্রাক্টর,DefaultRenderersFactory#setExtensionRendererModeএবংDefaultRenderersFactory#setAllowedVideoJoiningTimeMsব্যবহার করুন।- সব পাবলিক
CronetDataSourceকনস্ট্রাক্টর সরান। পরিবর্তেCronetDataSource.Factoryব্যবহার করুন।
- নিম্নলিখিত
IntDefsপরিবর্তন করে শুধু@Target(TYPE_USE)করুন। এর ফলে Kotlin-এ ব্যবহারের কম্পাইলেশন ভেঙে যেতে পারে, যা টাইপ (Int) অ্যানোটেট করার জন্য অ্যানোটেশন সরিয়ে ঠিক করা যেতে পারে।@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(com.google.android.exoplayer2.ext.flacপ্যাকেজে)@FlacExtractor.Flags(com.google.android.exoplayer2.extractor.flacপ্যাকেজে)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
ভার্সন 1.0.0-alpha01
২৭ অক্টোবর, ২০২১
androidx.media3:media3-*:1.0.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha01-এ
এইসব কমিট
রয়েছে।
নতুন বৈশিষ্ট্য
ExoPlayer সহ মিডিয়া সাপোর্ট লাইব্রেরির নতুন ঠিকানা হল Media3। প্রথম আলফাতে মিডিয়া ব্যবহারের কেস প্রয়োগ করার জন্য লাইব্রেরির প্রাথমিক, ফাংশনাল প্রয়োগ রয়েছে, যার মধ্যে আছে:
- ExoPlayer, Android-এর জন্য অ্যাপ্লিকেশন-লেভেল মিডিয়া প্লেয়ার যা কাস্টমাইজ ও এক্সটেন্ড করা সহজ।
- মিডিয়া সেশন কার্যকারিতা, প্লেব্যাক প্রকাশ ও নিয়ন্ত্রণ করার জন্য। এই
নতুন সেশন মডিউল ExoPlayer-এর মতো একই
Playerইন্টারফেস ব্যবহার করে। - মিডিয়া প্লেব্যাক ইউজার ইন্টারফেস তৈরি করার জন্য UI কম্পোনেন্ট।
- ExoPlayer-এর সাথে ব্যবহার করার জন্য অন্যান্য লাইব্রেরিতে মডিউল র্যাপিং কার্যকারিতা, যেমন, IMA SDK-এর মাধ্যমে বিজ্ঞাপন যোগ করা।
আরও তথ্যের জন্য, Media3 GitHub প্রোজেক্ট দেখুন।
ExoPlayer আগে আলাদা ExoPlayer GitHub
প্রোজেক্টে হোস্ট করা হয়েছিল। Media3-তে এর প্যাকেজের নাম হল
androidx.media3.exoplayer। আমরা ExoPlayer GitHub প্রোজেক্টটি কিছু সময়ের জন্য রক্ষণাবেক্ষণ এবং রিলিজ করা চালিয়ে যাওয়ার পরিকল্পনা করেছি যাতে অ্যাপগুলিকে Media3-এ মাইগ্রেট করার জন্য সময় দেওয়া যায়।
Media3-তে সব ExoPlayer মডিউলের বিকল্প আছে, শুধু পুরনো
media2 এবং mediasession এক্সটেনশন ছাড়া, যেগুলি নতুন
media3-session মডিউল দিয়ে পরিবর্তন করা হয়েছে। এটি প্লেয়ার ও মিডিয়া সেশনের মধ্যে সরাসরি ইন্টিগ্রেশন প্রদান করে,
যার জন্য কোনও অ্যাডাপ্টার/কানেক্টর ক্লাস ব্যবহার করতে হয় না।