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-এর পরিবর্তে JSpecify org.jspecify.annotations.Nullable ব্যবহার করুন।
    • JSpecify nullness অ্যানোটেশনের জন্য androidx.media3.common.util.UnknownNull সরান। RunnableFutureTask-এর Kotlin সাবক্লাস, যার ফলাফলের ধরন নালেবেল (যেমন Void?), সেটিকে অবশ্যই নালেবেল ধরনের আর্গুমেন্ট (যেমন RunnableFutureTask<Void?, Exception>) নির্দিষ্ট করতে হবে।
    • ভিডিও কন্টেনার প্রদান করতে AdViewProvider.getAdVideoView() যোগ করুন View যা বিজ্ঞাপন প্লেব্যাক চলাকালীন ছোট বড় করা যেতে পারে।
    • MimeTypes.getMediaMimeType-এ mlpa RFC 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.removedAdGroupCount AdPlaybackState আপডেট জুড়ে কমে না।
    • বিভিন্ন রেন্ডারার ব্যবহার করে এমন মিডিয়া পিরিয়ডের মধ্যে ট্রানজিশন করার সময় একটি সমস্যার সমাধান করুন আউটগোয়িং রেন্ডারার রেন্ডারিং শেষ করার আগে ইনকামিং রেন্ডারারকে অকালিকভাবে সক্ষম করতে পারে (উদাহরণস্বরূপ, থ্রোয়িং 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) যোগ করুন, যা পরিমাপ করা এনকোডার কোয়ালিটি ডেটা থেকে বর্তমান ডিভাইসের জন্য ভিডিও এনকোডার কনফিগারেশন (কোডেক, এনকোডার সেটিংস ও বিটরেট) সাজেস্ট করে।
  • এক্সট্র্যাক্টর:
    • 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)।
  • ইন্সপেক্টর:
    • 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 পাসথ্রু ব্যর্থ হয়েছে।
  • ভিডিও:
    • ব্যাকওয়ার্ড-কম্প্যাটিবল Dolby Vision প্রোফাইল ৭ স্ট্রিমের জন্য H.265/HEVC ডিকোডারে ফিরে যাওয়ার অনুমতি দিন এবং প্রোফাইল ১০ স্ট্রিমের জন্য AV1 ডিকোডারে আর ফিরে যাবেন না, যার বেস লেয়ার নির্দিষ্ট না করা ট্রান্সফার বৈশিষ্ট্য সহ সম্পূর্ণ রেঞ্জ সিগন্যাল করে (#৩৪৮৬)।
    • MediaCodecUtil-এ ডিকোডার বেছে নেওয়ার সমস্যা সমাধান করুন যাতে প্রাইমারি ডিকোডার বেছে নেওয়া এড়ানো যায় যেগুলি ফাংশনালি ফর্ম্যাটের প্রোফাইল সাপোর্ট করে না (যেমন অন্য প্রোফাইলের জন্য Dolby Vision ডিকোডার) যখন কোনও ডিকোডার সম্পূর্ণভাবে ফর্ম্যাট সাপোর্ট করে না (#3486)।
  • টেক্সট:
    • DvbParser-এ মেমরির ব্যবহার কমানোর জন্য সাবটাইটেল দেখানোর জায়গা সরাসরি সেই সাইজের বিটম্যাপে রেন্ডার করা হয়, ফুল-স্ক্রিন স্ক্র্যাচ বিটম্যাপ রাখা হয় না।
  • প্রভাব:
    • DefaultVideoFrameProcessor-এ NullPointerException সংক্রান্ত সমস্যার সমাধান করুন, যখন ফ্লাশ করা হচ্ছে (যেমন, CompositionPlayer-এ খোঁজা বা স্ক্রাব করার সময়) (#3470)।
    • রিলিজের পরে প্রোভাইডার আবার ব্যবহার করা হলে DefaultGlObjectsProvider.release-এর GlException দেখানোর সমস্যার সমাধান করা (#২০১৬)।
  • Muxers:
    • Mp4Muxer বা FragmentedMp4Muxer-এ ট্র্যাক যোগ করার সময় Format ট্র্যাকটি যাচাই করুন, যাতে পরে স্যাম্পেল লেখার সময় বা মাক্সার বন্ধ করার সময় কোনও সমস্যা না হয়।
    • Muxer.close()-এ বারবার কল করুন, সব লাইব্রেরি Muxer ইমপ্লিমেন্টেশনে কোনও অপারেশন নেই এবং close() থ্রো করলেও মাক্সারকে বন্ধ হিসেবে বিবেচনা করুন। close()-এর পরে অন্য কোনও পদ্ধতি কল করলে এখন IllegalStateException দেখায়।
  • IMA এক্সটেনশন:
    • ইন্টার‍্যাক্টিভ বিজ্ঞাপনকে বিজ্ঞাপন কন্টেনারের মধ্যে ভিডিও প্লেয়ার ভিউয়ের সাইজ ও পজিশন পরিবর্তন করার অনুমতি দিতে, IMA SDK-এর ResizablePlayer ইন্টারফেসকে সাপোর্ট করুন এবং ImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider) (ImaAdsLoader.requestAds(DataSpec, Object, ViewGroup) বন্ধ করা হচ্ছে) যোগ করুন।
  • সেশন:
    • মিডিয়া বোতামের পছন্দ সংক্রান্ত 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 মেটাডেটা আপডেট সারি পরিবর্তন না করেই অ্যাক্টিভ সারি আইটেমের মেটাডেটা বা সময়কাল পরিবর্তন করে।
    • null METADATA_KEY_DISPLAY_ICON (বা আর্টওয়ার্ক URI) সহ একটি সঠিক METADATA_KEY_ALBUM_ART সেট করা লিগ্যাসি সেশনের জন্য অনুপস্থিত আর্টওয়ার্ক সংক্রান্ত সমস্যার সমাধান করুন: লিগ্যাসি মেটাডেটা কনভার্ট করার সময় এখন ফাঁকা আর্টওয়ার্ক ভ্যালু এড়িয়ে যাওয়া হয়।
  • UI:
    • subtitles কম্পোজেবল স্লট ContentFrame ও Player-এ যোগ করুন, বিটম্যাপ ও অনুভূমিক টেক্সট সাবটাইটেল কিউ রেন্ডার করার জন্য media3-ui-compose-material3-এ ডিফল্ট সহায়তা সহ।
    • Add SubtitleView.setTextDirectionHeuristic to 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-এ আগে থেকে নির্ধারিত Cast MediaMetadata ফিল্ডে সহায়তা করে, এর জন্য MediaItem.mediaMetadata প্রপার্টি থেকে এবং MediaItem.mediaMetadata.extras-এ ডেডিকেটেড প্রপার্টি ছাড়াই ফিল্ড ম্যাপ করে এবং MediaInfo.customData-এ কাস্টম অতিরিক্ত তথ্য সংরক্ষণ করে।
    • প্লেব্যাক URI না থাকলে বা কনভার্ট করা না গেলে DefaultMediaItemConverter-এ ব্যতিক্রম দেখানো বন্ধ করুন, প্লেব্যাক URI ছাড়া Cast সারির আইটেমের জন্য CastPlayer টাইমলাইনে মিডিয়া আইডি এবং মেটাডেটা সংরক্ষণ করুন।
    • CastPlayer-এ 'যোগ দেওয়ার ইনটেন্ট' ব্যবহার করে কোনও কাস্ট সেশনে যোগ দেওয়ার সময়, উপলভ্য কাস্ট সেশনটি যোগ দেওয়ার ইনটেন্ট ব্যবহার করে শুরু করা হয়েছে কিনা তা নির্দেশ করতে SessionAvailabilityListener.onCastSessionAvailable(boolean) যোগ করুন এবং লোকাল প্লেয়ার স্ট্যাটাস দিয়ে ওভাররাইট করার পরিবর্তে রিমোট প্লেব্যাক স্ট্যাটাস বজায় রাখুন।
    • DefaultMediaItemConverter এবং RemoteCastPlayer-এ লাইভ নয় এমন আইটেমের জন্য MediaMetadata.durationMs থেকে MediaInfo এবং টাইমলাইনের সময়সীমা পপুলেট করুন এবং রিসিভার-সমাধান করা সময়সীমা এবং সারি খোঁজা জুড়ে লাইভস্ট্রিম স্ট্যাটাস ধরে রাখুন।
  • ডেমো অ্যাপ:
    • সেশন ডেমো অ্যাপে টেনে এনে প্লেলিস্ট আইটেম আবার সাজানোর অনুমতি দিন।
  • বাতিল করা চিহ্ন সরান:
    • 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 অন্তর্ভুক্ত।

Version 1.12.0-alpha01

২১ অক্টোবর, ২০২৬

1.12.0-alpha01 ভার্সনে নিম্নলিখিত কমিট রয়েছে।

  • কমন লাইব্রেরি:
    • C.COLOR_SPACE_DISPLAY_P3 যোগ করুন এবং MediaFormatUtil ও ColorInfo ISO কালার ম্যাপিংয়ে 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-এর পরিবর্তে JSpecify org.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 FragmentedMp4Extractor when a version 1 tfdt box encodes a negative baseMediaDecodeTime (#3412).
    • MPEG-TS: Format.stereoMode পপুলেট করার জন্য H.264 এবং H.265 ফ্রেম প্যাকিং অ্যারেঞ্জমেন্ট SEI মেসেজ পার্স করার সুবিধা (#৩৪১৯)।
    • Dolby Vision প্রোফাইল ২০ কনফিগারেশন ডেটা পার্স করুন এবং ভুল রঙের (#৩৪২৭) সাথে স্ট্যান্ডার্ড HEVC হিসেবে প্লেব্যাক করার পরিবর্তে কাজ করে না এমন Dolby Vision প্রোফাইল বাতিল করুন।
    • MP3: LAME/Xing এনকোডার ডিলে ও প্যাডিং মেটাডেটা অ্যাডজাস্টমেন্ট আগের অবস্থায় ফিরিয়ে আনুন কারণ এটি অনেক MediaCodec MP3 ডিকোডারের সাথে কাজ করে না (#৩৪২৫)।
    • 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 স্ট্রিমে ডিকোড সংক্রান্ত সমস্যা এবং ~১ সেকেন্ড টাইমস্ট্যাম্প জাম্পের সমাধান করুন।
  • ইন্সপেক্টর:
    • 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 প্রয়োগ করুন।
  • 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.TransportControls calls made within the same Looper iteration when controlling a legacy MediaSessionCompat (for example, calling setMediaItem, prepare, and play together now dispatches a single onPlayFrom* 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.metadata null হওয়ার রিগ্রেশন ঠিক করা হয়েছে (#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)।
  • ডিকোডার এক্সটেনশন (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 বাড়িয়ে ২৪ করুন।

ভার্সন 1.11.0

১.১১.১

সেপ্টেম্বর 10, 2026

  • ExoPlayer:
    • প্রোগ্রেসিভ মিডিয়ার জন্য HAGC মেটাডেটা চালু/বন্ধ করতে ফ্ল্যাগটি MediaSource.Factory থেকে ExtractorsFactory-এ সরান। আগের setExperimentalEnableHagcPlayback পদ্ধতি সরিয়ে দিয়ে তার জায়গায় ExtractorsFactory.setParseHagcMetadata পদ্ধতি ব্যবহার করা হচ্ছে। এছাড়াও, এটি এমন একটি সমস্যার সমাধান করে যেখানে Matroska/WebM কন্টেনারের জন্য বন্ধ করার সুবিধা কাজ করেনি।
    • ট্রানজিশন না করা সেকেন্ডারি রেন্ডারার প্রি-ওয়ার্ম করার সময় প্লেব্যাক স্টল হওয়ার সমস্যা সমাধান করে।
    • প্রি-ওয়ার্মিং সংক্রান্ত সমস্যার সমাধান করুন যেখানে সিক রিসেট এবং দুটি রেন্ডারার বন্ধ করার সময় Surface-কে প্রাথমিক রেন্ডারারে ফেরত দিতে হবে।
    • ArrayIndexOutOfBoundsException-এর সমস্যা সমাধান করা হয়েছে, যখন লাইভ টাইমলাইন রিফ্রেশ ডিফল্ট পজিশনকে সার্ভার-সাইডে যোগ করা বিজ্ঞাপনের পরে সরিয়ে দেয়, যা বর্তমানে চালানো হচ্ছে (#3348)।
    • স্ক্রাবিং মোড সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে ScrubbingModeParameters.allowSkippingMediaCodecFlush চালু থাকা অবস্থায় খোঁজার সময় পুরনো ভিডিও ফ্রেম অল্প সময়ের জন্য দেখানো হতে পারে।
  • এক্সট্র্যাক্টর:
    • Matroska: ক্লাস্টারের পরে ট্র্যাক প্লেস করা হলে, খোঁজা যায় এমন টাইমলাইন তৈরি না হওয়ার সমস্যার সমাধান করা হয়েছে (#3377)।
  • অডিও:
    • SilenceSkippingAudioProcessor-এ বাফার সাইজ ক্যালকুলেশন ঠিক করুন যাতে ফ্রেম সাইজ (#3271) দ্বারা ন্যূনতম সাইলেন্স ডিউরেশন ভুলভাবে কমানো না হয়।
    • PcmAudioUtil-এ ৮-বিট PCM হ্যান্ডলিং ঠিক করুন যাতে স্যাম্পেলকে Android-এর সংজ্ঞা অনুযায়ী আনসাইনড হিসেবে বিবেচনা করা যায় (#৩২৭১)।
    • অফলোড সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে সীমিত হার্ডওয়্যার বাফার সাইজের কারণে প্রি-রোল বা গ্যাপলেস ট্রানজিশনের সময় প্লেব্যাক বন্ধ হয়ে যেতে পারে।
    • DefaultAudioSink-এ বাগ ঠিক করুন যেখানে প্লেব্যাক থ্রেড আর লাইভ না থাকলে রিলিজ কাউন্ট কমে না (#3338)।
  • সেশন:
    • প্রসেস চলাকালীন MediaController, Player.Listener কলব্যাক থেকে রিলিজ করা হলে NullPointerException ফিক্স করুন (#3375).
    • কোনও লিগ্যাসি MediaBrowser, onGetLibraryRoot() বা onConnectAsync() থেকে অ্যাসিঙ্ক্রোনাস ফলাফল রিটার্ন করা কোনও পরিষেবার সাথে কানেক্ট করলে, প্রধান থ্রেডে ডেডলক সংক্রান্ত সমস্যার সমাধান করুন (#3393)।
  • HLS এক্সটেনশন:
    • স্ন্যাপ করার জন্য টার্গেট সেগমেন্ট এখনও প্লেলিস্টে না থাকলে, কন্টেন্ট আবার চালু করার অফসেটের গণনা সংক্রান্ত সমস্যার সমাধান করুন (#3322)।
    • এক্সট্র্যাক্টর থেকে EOFException পাওয়ার পরে সম্পূর্ণভাবে ব্যবহৃত HlsMediaChunk আবার লোড করার চেষ্টা করার সমস্যা সমাধান করা হয়েছে (#3350)।
  • DASH এক্সটেনশন:
    • presentationTimeOffset (#3334)-এর সাথে ইমেজ ট্র্যাকের জন্য ভুল স্যাম্পেল টাইমস্ট্যাম্প গণনা সংক্রান্ত সমস্যার সমাধান করুন।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
    • Opus: একাধিক OpusDecoder ইনস্ট্যান্স একসাথে শুরু করার সময় মেমরি করাপশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
    • MPEG-H: মেমরি লিক, নন-ASCII অক্ষর ট্রাঙ্কেট করা এবং MpeghUiManager-এ কমান্ড পাঠানোর সময় কম-মেমরি পরিস্থিতিতে সম্ভাব্য নেটিভ ক্র্যাশ (#3365) সংক্রান্ত সমস্যার সমাধান করা হয়েছে।

ভার্সন 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)।
    • স্ক্রাবিং মোডের সম্ভাব্য সমস্যা সমাধান করা হয়েছে, যেখানে 'স্ট্রিমের শেষ' পর্যন্ত খোঁজার সময় স্ক্রাবিং বন্ধ হয়ে যেতে পারে।
  • CompositionPlayer:
    • TrackSelectorটি ইনস্ট্যান্স রিলিজ না হওয়ার সমস্যা সমাধান করা হয়েছে।
  • ট্রান্সফর্মার:
    • ExportResult.fileSizeBytes-এর ক্ষেত্রে অতিরিক্ত রিপোর্ট করা হতে পারে এমন সমস্যার সমাধান করা।
  • ট্র্যাক বেছে নেওয়া:
    • বিটরেট-ভিত্তিক ক্রমের বাইরে কাস্টম ফর্ম্যাট ক্রম এবং ABR বেছে নেওয়ার অগ্রাধিকারের অনুমতি দিতে BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR এক্সপোজ করুন এবং AdaptiveTrackSelection.Factory.setTrackFormatComparator যোগ করুন।
    • সময়ের উপর নির্ভর করে এমন কনকারেন্সি সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে ট্র্যাক সিলেকশন প্যারামিটারে দ্রুত সিকোয়েন্সিয়াল আপডেট করার ফলে কিছু আপডেট হারিয়ে যেতে বা ওভাররাইট হতে পারে।
  • এক্সট্র্যাক্টর:
    • 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)।
  • অডিও:
    • ExoPlayer-এর অডিও রেন্ডারারে ১০০ মিলিসেকেন্ডের অতিরিক্ত সময়কাল যোগ করুন যখন রেডি থেকে নট-রেডি স্ট্যাটাসে ট্রানজিশন করা হচ্ছে, যাতে ট্রানজিয়েন্ট আন্ডাররান ডিবাউন্স করা যায় এবং অ্যাক্টিভ প্লেআউটের সময় অপ্রত্যাশিত বাফারিং স্ট্যাটাস এড়ানো যায় (#৩২১০)।
    • DefaultAudioTrackBufferSizeProvider-এ ডিফল্ট PCM বাফার সাইজ লজিক পরিবর্তন করে একটি নির্দিষ্ট ৫০০ মিলি সেকেন্ড বাফার ব্যবহার করুন যাতে এটি ডিভাইসের উপর কম নির্ভরশীল হয়।
    • প্ল্যাটফর্ম ডিকোডার থেকে স্পেশিয়াল channelMask এক্সট্র্যাক্ট করতে MediaCodecAudioRenderer আপডেট করুন, যাতে DefaultAudioSink চ্যানেল কাউন্ট থেকে অনুমান করার পরিবর্তে এই এক্সপ্লিসিট মাস্ক ব্যবহার করতে পারে।
    • AudioSink.configure-এর প্যারামিটার ডেটা ক্লাসে কনভার্ট করুন। ForwardingAudioSink.configure-এর কাস্টম ওভাররাইড নতুন পদ্ধতি স্বাক্ষরে মাইগ্রেট করতে হবে।
    • EditedMediaItem.Builder#setSpeed(SpeedParameters)-এর মাধ্যমে অডিও স্ট্রিম টাইম-স্ট্রেচ করার সময় পিচ বজায় রাখার জন্য সহায়তা যোগ করুন।
    • ৮-বিট PCM, ১৬-বিট বিগ-এন্ডিয়ান PCM এবং ৬৪-বিট ফ্লোটিং পয়েন্ট PCM-কে ৩২-বিট ফ্লোটিং পয়েন্ট PCM-এ কনভার্ট করার জন্য ToFloatPcmAudioProcessor উন্নত করুন (#৩০৯০)।
    • DecoderAudioRenderer.getChannelMapping-এর রিটার্ন ভ্যালু পরিবর্তন করে ImmutableIntArray করুন।
    • কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
    • অডিও প্রসেসরকে প্লেলিস্টের প্রসঙ্গ প্রদান করতে Timeline এবং পিরিয়ড UID AudioSink.configure এবং AudioProcessor.StreamMetadata-এ ফরওয়ার্ড করুন (#418)।
    • সময়-ভিত্তিক অডিও প্রসেসিং (#৪১৮) অনুমতি দিতে সঠিক AudioProcessor.StreamMetadata.positionOffsetUs সেট করুন।
    • বিগ এন্ডিয়ান ৩২-বিট এবং ৬৪-বিট ফ্লোটিং পয়েন্ট PCM-এর জন্য সহায়তা যোগ করুন।
    • Google Pixel ডিভাইসে প্লেব্যাকের জন্য EAC3-JOC থেকে EAC3-তে ফলব্যাক পাথ সরিয়ে দিন, কারণ তাদের স্ট্যান্ডার্ড EAC3 ডিকোডার EAC3-JOC স্ট্রিম ডিকোড করতে পারে না (#3257)।
  • ভিডিও:
    • ভিডিওতে যোগ দেওয়ার লজিক ঠিক করুন যাতে যোগ দেওয়ার সময় ড্রপ করা বাফারকে ড্রপ করার পরিবর্তে স্কিপ করা হিসেবে গণনা করা যায়।
    • প্লেসহোল্ডার সারফেস কাজ করে না এমন ডিভাইসে ফ্রেম ড্রপ এড়াতে নতুন সারফেস সেট করার সময় অবিলম্বে রেন্ডারিং সিদ্ধান্ত ঠিক করুন।
    • ড্রপ বা স্কিপ করা ফ্রেমের জন্য MediaCodecVideoRenderer-এ ফ্রেম রেট অনুমান আরও সঠিক করতে এটি ঠিক করুন।
    • ফ্রেম আগে শিডিউল করার জন্য ব্যবহৃত থ্রেশহোল্ডের কনফিগারেশনের অনুমতি দিন। ডিফল্ট হিসেবে ৫০ মিলি সেকেন্ড সেট করা থাকে, তবে কেউ চাইলে MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()-এর মাধ্যমে ভ্যালু কাস্টমাইজ করতে পারেন।
    • VideoFrameReleaseHelper-এ সেই সমস্যার সমাধান করুন যেখানে ডিসপ্লে পরিবর্তন করলে প্রধান থ্রেডে অপ্রয়োজনীয় Choreographer কলব্যাক এবং অতিরিক্ত CPU ওয়েকআপ ট্রিগার হতে পারে।
  • টেক্সট:
    • TTML: অঞ্চলের জন্য style থেকে displayAlign-এ ফলব্যাক (#2559).
    • TTML: <p> এলিমেন্টের পেরেন্ট থেকে কিউ শুরুর সময় ইনহেরিট করুন (#3246)।
  • মেটাডেটা:
    • MediaMetadata.discSubtitle ফিল্ড যোগ করুন এবং ID3v2.4 TSST এবং Vorbis DISCSUBTITLE ডেটা থেকে এটি পার্স করুন।
    • ID3 TPOS ফ্রেম থেকে ডিস্ক নম্বর ও গণনা পার্স করুন।
  • প্রভাব:
    • ভিডিওর কোনও অংশে যাওয়ার সময় প্লেয়ার যাতে ফ্রিজ না হয়ে যায়, তার জন্য FinalShaderProgramWrapper-এ রিড্র স্টেট ফ্ল্যাশ করার সময় তা মুছে দিন।
  • Muxers:
    • নতুন addTrackReference API-এর মাধ্যমে 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 অবজেক্টের আসল Timeline UID পাওয়া যাচ্ছিল না। এখন সেশন নির্ভরযোগ্যভাবে এই UID-গুলি অনুবাদ করে এবং স্ট্যাটাস আপডেট করার সময় প্রোপাগেট করে।
    • MediaSessionService.stopSelfSafely()-এ ForegroundServiceStartNotAllowedException ক্যাচ করে ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন (#3310)।
    • একই মিডিয়া আইটেমের মধ্যে খোঁজার সময় MediaController-এ অপ্রত্যাশিত onMediaItemTransition() কলব্যাক সংক্রান্ত সমস্যার সমাধান করা (#3248)।
  • UI:
    • মিড-প্লেব্যাক ContentFrame রিকম্পোজ করা হলে ভুল সাইজে প্রথম ফ্রেম রেন্ডারিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#৩২৩৮)।
    • CurrentMediaItemState ক্লাস এবং সংশ্লিষ্ট rememberCurrentMediaItemState কম্পোজেবল media3-ui-compose মডিউলে যোগ করুন। এই স্টেট হোল্ডার demo-compose-এ ব্যবহার করা হয় যাতে বর্তমানে চলা MediaItem-এর বিভিন্ন মেটাডেটা তথ্য দেখানো যায়।
    • media3-ui-compose মডিউলে PlaylistState ক্লাস এবং সংশ্লিষ্ট rememberPlaylistState Composable যোগ করুন। এই স্টেট হোল্ডার demo-compose-এ ব্যবহার করা হয় যাতে প্লেয়ারে সেট করা MediaItems সম্পর্কে বিভিন্ন মেটাডেটা তথ্য দেখানো যায়।
    • PlaybackSpeedState-এ ফাস্টফরওয়ার্ডিং/স্লো মোশন API যোগ করুন। বেশিক্ষণ প্রেস করে ফাস্ট ফরওয়ার্ড করার সুবিধা দেখাতে demo-compose-এ এই ফাংশনালিটি ব্যবহার করুন।
    • media3-ui-compose-material3 মডিউলে MiniController কম্পোজেবল যোগ করুন। এটি Player নিয়ন্ত্রণ করার জন্য একটি কম্প্যাক্ট অ্যাফর্ডেন্স প্রদান করে, একই সাথে বর্তমান মিডিয়া আইটেমের শীর্ষক, আর্টিস্ট, আর্টওয়ার্ক এবং প্রগ্রেস দেখায়।
    • media3-ui-compose মডিউলে ErrorState ক্লাস এবং সংশ্লিষ্ট rememberErrorState Composable যোগ করুন। 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 এবং Compose PresentationState-এ শাটার সাপ্রেশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার ফলে টাইমলাইনে ক্র্যাশ হচ্ছিল, কারণ এটি পিরিয়ড UID লুকআপ (#3264) কাজ করে না।
  • ডাউনলোড:
    • ডাউনলোডের জন্য ফেচ করার সময় মিডিয়া প্লেলিস্টে HLS ভেরিয়েবল সংক্রান্ত সমস্যার সমাধান করা (#3258)।
  • Ktor এক্সটেনশন:
    • নতুন media3-datasource-ktor এক্সটেনশন মডিউল যোগ করুন যা KtorDataSource প্রদান করে এবং Ktor HTTP স্ট্যাক দ্বারা সমর্থিত।
    • কানেকশন খোলার সময় মেমরিতে সম্পূর্ণ HTTP রেসপন্স বডি লোড করার KtorDataSource সংক্রান্ত সমস্যার সমাধান করুন (#3305)।
  • 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)।
  • 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 প্রপার্টি আর ব্যবহার করা হয় না।

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)।
  • এক্সট্র্যাক্টর:
    • 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) ট্র্যাকের জন্য সহায়তা যোগ করা।
  • ইন্সপেক্টর:
    • ব্রেকিং পরিবর্তন: 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-এ নতুন ফিল্ড এবং লজিক দ্বারা সমর্থিত।
    • কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
  • টেক্সট:
    • VobSub: সবসময় ডিফল্ট হিসেবে ৫ সেকেন্ডের পরিবর্তে কিউয়ের সময়সীমা নির্ধারণ করতে START এবং STOP SPU কন্ট্রোল কমান্ড ব্যবহার করুন (#২৯৩৫)।
  • মেটাডেটা:
    • 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 তৈরি করার বিকল্প উপায় অফার করে। এতে setPreferredLinearOrientation API আছে। এটি আলফা টেস্টিংয়ে থাকা একটি API যা আপনাকে লিনিয়ার বিজ্ঞাপনের জন্য পছন্দের ওরিয়েন্টেশন সেট করতে দেবে। আপনি আলফা টেস্টিং গ্রুপে যোগ দিতে চাইলে, আপনার অ্যাকাউন্ট পার্টনারের সাথে যোগাযোগ করুন।
  • সেশন:
    • MediaMetadata.artworkData-এ বড় অ্যারে অ্যাপ ক্র্যাশ করতে পারে এমন সমস্যার সমাধান করুন।
    • ActionFactory ইন্টারফেসে @Player.Command আর্গুমেন্টের জন্য int টাইপ ব্যবহার করুন (#২৯৩৩)।
    • MediaSessionService এবং MediaLibraryService-কে একটি LifecycleService করুন, যা পরিষেবার লাইফসাইকেলে লাইফসাইকেল-সচেতন অপারেশন অ্যাটাচ করার অনুমতি দেয় (#১৮৭)।
    • MediaController এবং MediaBrowser থেকে লোকাল প্লেব্যাকের জন্য ডিভাইসের ভলিউম পরিবর্তন করার কমান্ডের জন্য সহায়তা বন্ধ করুন। অ্যাপের মাধ্যমে স্থানীয় ডিভাইসের ভলিউম পরিবর্তন করা উচিত নয় এবং প্রয়োজন হলে, এই উদ্দেশ্যে AudioManager API ব্যবহার করা যেতে পারে।
    • 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-এ PlaybackSpeedToggleButton Composable যোগ করুন।
    • প্লেয়ারের প্রোগ্রেস দেখাতে এবং টেনে এনে ও ট্যাপ করে (#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 এক্সটেনশন:
    • এমন সমস্যার সমাধান করা হয়েছে যেখানে ট্র্যাকের সেগমেন্টের শুরুর সময় সারিবদ্ধ না থাকার কারণে প্লেব্যাক শুরু হতে দেরি হয় বা শুরুতে স্যাম্পেল মিস হয়ে যায় (#3057)।
    • ইনব্যান্ড EMSG v0 মেটাডেটার টাইমস্ট্যাম্প সঠিকভাবে সেট না হওয়ার সমস্যা সমাধান করা হয়েছে (#3024)।
  • 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 প্রতিরোধ করুন (#২৯৭৯)।
  • এক্সট্র্যাক্টর:
    • MP3: LAME ReplayGain ডেটা পার্স করুন (#২৮৪০)।
  • অডিও:
    • অটোমোটিভ পরিস্থিতিতে AC-4 ডিকোডার সাপোর্ট মূল্যায়ন করার সময় AC4Profile22 এবং অন্যান্য লিগ্যাসি প্রোফাইলের জন্য সাপোর্ট সঠিকভাবে সরান (#২৬০৯)।
  • ভিডিও:
    • API 30-এর নিচের ডিভাইসে ভিডিও কোডেক বাতিল করুন যখন কন্টেন্ট ফ্রেম রেট পরিবর্তন হয় যাতে প্লেব্যাক আটকে না যায় (#২৯৪১)।
  • টেক্সট:
    • VobSub: SPU সঠিকভাবে ম্যানেজ করার মাধ্যমে বাদ পড়ে যাওয়া কিছু সাবটাইটেল ঠিক করুন, যেগুলিতে হয় শুধুমাত্র একটি কন্ট্রোল সিকোয়েন্স থাকে অথবা একাধিক কন্ট্রোল সিকোয়েন্স জুড়ে গুরুত্বপূর্ণ তথ্য বিভক্ত থাকে (#২৯৩৫)।
  • IMA এক্সটেনশন:
    • ত্রুটি সমাধান: বিজ্ঞাপনের MIME-এর প্রকার IMA LOADED ইভেন্টে দেওয়া MIME-এর প্রকারের সাথে ম্যাচ না করার সমস্যা সমাধান করা হয়েছে। এখন বিজ্ঞাপন পড ইন্ডেক্স ও বিজ্ঞাপনের পজিশন ব্যবহার করে বিজ্ঞাপনের MIME টাইপ ম্যাপ করা হয়।
    • getAdsManager() এবং AdEvent.getAd()-এর ফলাফল অ্যাক্সেস করার আগে একটি নাল চেক যোগ করুন।
  • সেশন:
    • বিজ্ঞাপন প্লেব্যাক চলাকালীন MediaController-এর সাথে কানেক্ট করা প্ল্যাটফর্ম সেশন বন্ধ করার সময় অ্যাপ ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে (#২৯৪৮)।
    • অন্যান্য প্রসেস থেকে পাঠানো বিকৃত Bundle ইনস্ট্যান্স থেকে রক্ষা করতে বিভিন্ন ক্লাসে extras Bundle ইনস্ট্যান্সে অতিরিক্ত যাচাইকরণ যোগ করুন।
    • 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 ট্র্যাক টাইপের অটোমেটিক শনাক্তকরণ ঠিক করুন (#২৮৬০)।
  • 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-L2 MIME প্রকারের মধ্যে পার্থক্য করুন (#২৬৮৩)।
    • 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 কল ম্যানেজ করতে না পারলে, এটি ব্রেকিং পরিবর্তন হতে পারে।
    • স্প্যান-স্টাইল করা স্ট্রিংয়ের মতো নন-String CharSequence মেটাডেটা ভ্যালুর প্রোপাগেশন ঠিক করুন (#২৮৫৩)।
    • 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 SurfaceView inside a Compose AndroidView and hence affecting ContentFrame and PlayerSurface Composables with SURFACE_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 ফাইল চালানোয় বাধা দেয় এমন সমস্যার সমাধান করা হয়েছে (#২৮৮৭)।
  • কাস্ট এক্সটেনশন:
    • 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 ফ্ল্যাগ অন্তর্ভুক্ত করতে এক্সপেরিমেন্টাল ExoPlayer API যোগ করুন। এই ফ্ল্যাগ ডিকোডারকে ডিকোড-অনলি বাফার এড়িয়ে যাওয়ার সিগন্যাল দেবে যার ফলে আরও দ্রুত খোঁজা যাবে। 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-এ ফিরিয়ে আনার জন্য সহায়তা যোগ করা হয়েছে এবং এটিকে ইনস্ট্যান্স-ভিত্তিক, AutoCloseable API-এ মাইগ্রেট করা হয়েছে। 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 এক্সটেনশন:
    • RFC 7798#4.4.2 (#2413) অনুযায়ী H265-এর জন্য RTP অ্যাগ্রিগেশন প্যাকেটের জন্য সহায়তা যোগ করুন।
    • HTTP 302 রেসপন্স প্রসেস করার সময় প্রদান করা লোকেশন uri ব্যবহার করতে RtspClient ঠিক করুন (#২৩৯৮)।
    • SessionDescriptions-এর জন্য পার্সিং সাপোর্ট যোগ করুন যাতে ট্রেলিং হোয়াইটস্পেস অক্ষর সহ লাইন থাকে (#2357)।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
    • যেখানে DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange অডিও ডিকোডার এক্সটেনশনের জন্য কোনও প্রভাব নেই, সেই সমস্যার সমাধান করা হয়েছে (#2258)।
  • কাস্ট এক্সটেনশন:
    • setVolume() ও getVolume()-এর জন্য সহায়তা যোগ করুন (#২২৭৯)।
    • টাইমলাইন খালি থাকলে CastPlayer-কে STATE_BUFFERING-এ প্রবেশ করা থেকে আটকান।
    • getDeviceVolume(), setDeviceVolume(), getDeviceMuted(), এবং setDeviceMuted()-এর জন্য সহায়তা যোগ করুন (#২০৮৯)।
  • টেস্ট ইউটিলিটি:
    • নির্দিষ্ট পজিশনে না পৌঁছানো পর্যন্ত প্লেয়ারকে এগিয়ে নিয়ে যেতে 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 এন্ট্রি হিসেবে এটি দেখান (#২২৪২)।
  • অডিও:
    • অফলোড সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ছোট কন্টেন্টের প্লেলিস্ট চালানোর সময় পজিশন আটকে যেতে পারে (#১৯২০)।
  • সেশন:
    • প্ল্যাটফর্ম MediaSession কলব্যাকের জন্য অ্যাগ্রিগেশন টাইমআউট ৫০০ থেকে কমিয়ে ১০০ মিলিসেকেন্ড করুন এবং অ্যাপকে এই ভ্যালু কনফিগার করার অনুমতি দিতে একটি এক্সপেরিমেন্টাল সেটার যোগ করুন।
    • ব্যবহারকারী বিজ্ঞপ্তি বাতিল করার পরেও সেটি আবার দেখা যাওয়ার সমস্যা সমাধান করা (#২৩০২)।
    • র‌্যাপ করা প্লেয়ার খালি থাকলে সেশন যাতে সিঙ্গল-আইটেম টাইমলাইন দেখায় সেই সমস্যার সমাধান করুন। এটি তখন ঘটে যখন র‍্যাপ করা প্লেয়ারে COMMAND_GET_TIMELINE উপলভ্য থাকে না, কিন্তু COMMAND_GET_CURRENT_MEDIA_ITEM উপলভ্য থাকে এবং র‍্যাপ করা প্লেয়ার খালি থাকে (#২৩২০)।
    • এমন একটি সমস্যার সমাধান করা হয়েছে যেখানে MediaSessionService.setMediaNotificationProvider কল করা পরিষেবার সাথে অন্যান্য ইন্টার‍্যাকশনের পরে setForegroundServiceTimeoutMs (#২৩০৫) নীরবে উপেক্ষা করা হয়।
  • UI:
    • PlayerSurface-কে ExoPlayer.setVideoEffects ও CompositionPlayer-এর সাথে কাজ করার অনুমতি দিন।
    • PlayerSurface-কে নতুন Player-এর সাথে রিকম্পোজ করা যাচ্ছে না, এই সমস্যার সমাধান করুন।
  • HLS এক্সটেনশন:
    • HLS মিডিয়ার জন্য CmcdData-এ চাঙ্ক ডিউরেশন সেট না হওয়ার সমস্যা সমাধান করা হয়েছে, যার ফলে এনক্রিপ্ট করা মিডিয়া সেগমেন্ট প্রসেস করার সময় অ্যাসারশন সংক্রান্ত সমস্যা হচ্ছিল (#২৩১২)।
  • 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-এ বাগ ঠিক করুন যেখানে null MediaMetadata-এর সাথে 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.Listener onDeviceInfoChanged এবং 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-কে সুরক্ষিত হিসেবে পরিবর্তন করুন যাতে অ্যাপ্লিকেশনগুলি ওভাররাইড করে প্লেসহোল্ডার সারফেসের ব্যবহার ব্লক করতে পারে (#১৯০৫)।
    • স্পিড বাড়াতে এক্সপেরিমেন্টাল ExoPlayer AV1 স্যাম্পেল ডিপেনডেন্সি পার্সিং যোগ করুন। নতুন DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API-এর মাধ্যমে এটি চালু করুন।
    • নির্ভরশীল নয় এমন MediaCodecVideoRenderer ডিকোডার ইনপুট বাফার ড্রপ করতে পরীক্ষামূলক ExoPlayer API যোগ করুন। 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)।
  • প্রভাব:
    • 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)।
  • ডেমো অ্যাপ:
    • অতিরিক্ত বোতামের সাহায্যে 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 ডেটা কভার না করলে, প্লেব্যাক তাড়াতাড়ি বন্ধ করবেন না (#১৯০৪)।
  • ভিডিও:
    • onOutputFormatChanged প্রসেস করার সময় MediaCodecAdapter-এর দেওয়া পিক্সেল অ্যাস্পেক্ট রেশিও ভ্যালু ব্যবহার করার সুবিধা ফিরিয়ে আনা হয়েছে (#১৩৭১)।
  • টেক্সট:
    • ReplacingCuesResolver.discardCuesBeforeTimeUs-এ সেই সমস্যার সমাধান করা হয়েছে যেখানে timeUs-এ অ্যাক্টিভ কিউ (আগে শুরু হয়েছে কিন্তু এখনও শেষ হয়নি) ভুলভাবে বাতিল করা হয়েছে (#১৯৩৯)।
  • মেটাডেটা:
    • Vorbis কমেন্ট থেকে ডিস্ক/ট্র্যাকের নম্বর এবং জনরা এক্সট্র্যাক্ট করে MediaMetadata (#1958)-এ যোগ করুন।

ভার্সন ১.৫.০

২৭ নভেম্বর, ২০২৪

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 কলব্যাকের মাধ্যমে দেখানো হয়, যেখানে পার্স সমস্যা নীরবে উপেক্ষা করা হয় (এটি আগে থেকেই আছে)।
    • প্লেলিস্ট আইটেম বা মাল্টি-পিরিয়ড DASH স্ট্রিমে পিরিয়ডের সময়সীমা আসল কন্টেন্টের সাথে না মিললে আইটেমের শেষে ফ্রেম ফ্রিজ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#১৬৯৮)।
    • SntpClient-এ একটি সেটার যোগ করুন যাতে শেষ আপডেটের পর থেকে অতিবাহিত হওয়া সর্বোচ্চ সময় সেট করা যায়, যার পরে ক্লায়েন্ট আবার শুরু করা হয় (#১৭৯৪)।
  • ট্রান্সফর্মার:
    • SurfaceAssetLoader যোগ করুন, যা Surface-এর মাধ্যমে ট্রান্সফর্মারে ভিডিও ডেটা কিউতে রাখার সুবিধা দেয়।
    • ImageAssetLoader AssetLoader.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 that DataSource.getUri() returns the resolved URI (as documented). অনুরোধ করা URI-এর থেকে এটি আলাদা হলে, নতুন DataSourceContractTest.TestResource.Builder.setResolvedUri() পদ্ধতি ব্যবহার করে টেস্ট এটি দেখাতে পারে।
    • DataSourceContractTest: DataSource.getUri() এবং getResponseHeaders()-এর 'open' ভ্যালু রিটার্ন করে, open()-এ কল করার চেষ্টা ব্যর্থ হওয়ার পরে ('রিসোর্স খুঁজে পাওয়া যায়নি' বলে) এবং পরবর্তী close() কলের আগে।
      • DataSourceContractTest.getNotFoundResources() ওভাররাইড করলে টেস্ট সাব-ক্লাস একাধিক 'খুঁজে পাওয়া যায়নি' রিসোর্স প্রদান করতে পারে এবং প্রত্যাশিত যেকোনও হেডারও প্রদান করতে পারে। এটি HTTP 404 (হেডার সহ) এবং "সার্ভার খুঁজে পাওয়া যায়নি" (হেডার ছাড়া) স্ট্যাটাসের মধ্যে পার্থক্য করতে সাহায্য করে।
  • অডিও:
    • মিডিয়াতে CTA-2075 লাউডনেস মেটাডেটা থাকলে, কোডেকে তা অটোমেটিক কনফিগার করুন।
    • সিক করার সময় ভলিউম যেন মসৃণভাবে কমে যায় তা নিশ্চিত করুন।
    • সিক করার সময় পপ সাউন্ডের সমস্যা সমাধান করুন।
    • Sonic-এর টাইম-স্ট্রেচিং/পিচ-শিফ্টিং অ্যালগরিদমের জন্য ট্রাঙ্কেশন সংক্রান্ত সমস্যার অ্যাকুমুলেশন ঠিক করুন।
    • SpeedChangingAudioProcessor-এ থাকা বাগ সংক্রান্ত সমস্যার সমাধান করুন যার কারণে আউটপুট ফ্রেম ড্রপ হয়।
  • ভিডিও:
    • MediaCodecVideoRenderer এমন স্যাম্পেল ডিকোড করা এড়িয়ে যায় যেগুলি অন্যান্য স্যাম্পেল দ্বারা রেন্ডার করা বা রেফারেন্স হিসেবে ব্যবহার করা হয় না।
    • API 35 ও তার পরবর্তী ভার্সনে, MediaCodecAdapter এখন null Surface configure-এ পেতে পারে এবং নতুন পদ্ধতি detachOutputSurface-এ কল করতে পারে যাতে আগে সেট করা Surface সরানো যায়, যদি কোডেক এটি সাপোর্ট করে (MediaCodecInfo.detachedSurfaceSupported)।
    • onOutputFormatChanged প্রসেস করার সময় MediaCodecAdapter-এর দেওয়া পিক্সেল অ্যাস্পেক্ট রেশিও ভ্যালু ব্যবহার করুন (#১৩৭১)।
    • Galaxy Tab S7 FE-তে ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন যার ফলে 60fps নিরাপদ H264 স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয় (#১৬১৯)।
    • এন্ড-অফ-স্ট্রিম সিগন্যাল না ফিরিয়ে শেষ স্যাম্পেলের পরে আটকে যাওয়া কোডেকগুলির জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন।
  • টেক্সট:
    • একটি কাস্টম VoiceSpan যোগ করুন এবং WebVTT ভয়েস স্প্যান-এর জন্য এটি পপুলেট করুন (#১৬৩২)।
    • HLS-এ WebVTT-তে খুব বড় সাবটাইটেল টাইমস্ট্যাম্প (যা মাইক্রোসেকেন্ড হিসেবে দেখানো হলে এবং 90,000 MPEG টাইমবেস দিয়ে গুণ করা হলে ৬৪-বিট long-এর সীমা অতিক্রম করে) দেখানো হচ্ছে কিনা তা নিশ্চিত করুন (#১৭৬৩)।
    • Dolby Vision কন্টেন্টে CEA-608 সাবটাইটেল কাজ করে (#১৮২০)।
    • CEA-608 সাবটাইটেল চালু থাকলে DASH মাল্টি-পিরিয়ড স্ট্রিমে প্লেব্যাক হ্যাং হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#১৮৬৩)।
  • মেটাডেটা:
    • icy বা vnd.dvb.ait কন্টেন্ট আছে এমন ট্র্যাকে C.TRACK_TYPE_METADATA ধরন অ্যাসাইন করুন।
  • ছবি:
    • Glide বা Coil-এর মতো এক্সটার্নাল ইমেজ লোডিং লাইব্রেরির সাথে সহজ ইন্টিগ্রেশনের জন্য ExternallyLoadedImageDecoder যোগ করুন।
  • 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-এ যোগ করুন, অর্থাৎ আউট-অফ-ব্যান্ড এবং ক্লিক ইন্টারঅ্যাকশনে প্রতিক্রিয়াশীল নয় (#১৫৯০, #১৮৪)।
    • অ্যাপ-নির্ধারিত টেক্সট ট্র্যাক বেছে নেওয়ার পছন্দ থাকলে, টেক্সট বেছে নেওয়ার ক্ষেত্রে "কোনওটিই নয়" বিকল্প কাজ না করার সমস্যা সমাধান করুন।
  • DASH এক্সটেনশন:
    • সেগমেন্টের মাঝখানে শুরু হওয়া পিরিয়ডের জন্য সহায়তা যোগ করুন (#1440)।
  • স্মুথ স্ট্রিমিং এক্সটেনশন:
    • টেক্সট ট্র্যাক সহ SmoothStreaming স্ট্রিম চালানোর সময় Bad magic number for Bundle সংক্রান্ত সমস্যার সমাধান করা (#১৭৭৯)।
  • RTSP এক্সটেনশন:
    • এনকোড করা @ অক্ষর সহ URL-এর জন্য ব্যবহারকারীর তথ্য সরানোর সমস্যা সমাধান করুন (#1138)।
    • হেডার এক্সটেনশন সহ RTP প্যাকেট পার্স করার সময় ক্র্যাশ হওয়া সংক্রান্ত সমস্যার সমাধান করা (#১২২৫)।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, ইত্যাদি):
    • IAMF ডিকোডার মডিউল যোগ করুন, যা অডিও সিন্থেসাইজ করার জন্য libiamf নেটিভ লাইব্রেরি ব্যবহার করে IAMF ট্র্যাক সহ MP4 ফাইল প্লেব্যাকের জন্য সহায়তা প্রদান করে।
      • স্টেরিও লেআউটের পাশাপাশি ৫.১ স্পেশিয়ালাইজেশন ও ঐচ্ছিক হেড ট্র্যাকিং চালু থাকলে প্লেব্যাক কাজ করে, তবে বাইনরাল প্লেব্যাক বর্তমানে কাজ করে না।
    • Android 15-এ ডিকোডার এক্সটেনশনের জন্য ১৬ কেবি পৃষ্ঠা সংক্রান্ত সহায়তা যোগ করা হয়েছে (#১৬৮৫)।
  • 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:
    • PreloadMediaSource-এ অ্যাসিঙ্ক্রোনাসভাবে প্রিলোড কলব্যাক ম্যানেজ করুন (#১৫৬৮)।
    • লোড করা না গেলে বাফার করা সময়সীমা নির্বিশেষে প্লেব্যাক করার অনুমতি দিন (#১৫৭১)।
  • এক্সট্র্যাক্টর:
    • MP3: Info ফ্রেমের (#1480) দৈর্ঘ্য ফিল্ডের উপর ভিত্তি করে ট্রেলিং নন-MP3 ডেটা সঠিকভাবে উপেক্ষা করে Searched too many bytes সমস্যার সমাধান করুন।
  • টেক্সট:
    • TTML: শতাংশ tts:fontSize ভ্যালু ম্যানেজ করার বিষয়টি ঠিক করুন যাতে সেগুলি শতাংশ tts:fontSize ভ্যালু সহ পেরেন্ট নোড থেকে সঠিকভাবে উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
    • LegacySubtitleUtil-এ IndexOutOfBoundsException ঠিক করুন, কারণ অনুরোধ করা আউটপুট শুরুর সময় Subtitle-এ চূড়ান্ত ইভেন্টের সময়ের থেকে বেশি বা সমান হওয়ার কেস ভুলভাবে ম্যানেজ করা হয়েছে (#১৫১৬)।
  • DRM:
    • L1 Widevine কন্টেন্ট চালানোর সময় API 31+ ডিভাইসে android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE সংক্রান্ত সমস্যার সমাধান করা। ফ্রেমওয়ার্ক MediaDrm.requiresSecureDecoder পদ্ধতি (#১৬০৩) অসম্পূর্ণভাবে প্রয়োগ করার কারণে এই সমস্যা হয়।
  • প্রভাব:
    • 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-image MediaItem (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 এবং TSOP ID3 ট্যাগের সাথে ম্যাপ করা হয়েছিল (#1302)।
    • ভ্যালু এক বাইটের বেশি হলে MP4 (/iTunes) নিউমেরিক gnre (জনরা) এবং tmpo (টেম্পো) ট্যাগ রিডিং সংক্রান্ত সমস্যার সমাধান করুন।
    • ID3 TCON ফ্রেম MediaMetadata.genre-এ প্রোপাগেট করুন (#1305).
  • ছবি:
    • বর্গাকার নয় এমন 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) সহ মিডিয়া বিজ্ঞপ্তি কন্ট্রোলারে পাঠানো SessionError PlaybackStateCompat-এ মারাত্মক নয় এমন সমস্যার সাথে ম্যাপ করা হয়, যার অর্থ হল সমস্যার কোড ও মেসেজ সেট করা আছে কিন্তু প্ল্যাটফর্ম সেশনের স্ট্যাটাস 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 (#১৩৯৫)।
  • DASH এক্সটেনশন:
    • মাল্টি-পিরিয়ড লাইভ স্ট্রিম আবার প্রস্তুত করার সময় IndexOutOfBoundsException (#১৩২৯) থ্রো করতে পারে এমন সমস্যার সমাধান করা হয়েছে।
    • dashif:Laurl লাইসেন্স URL-এর জন্য সহায়তা যোগ করুন (#১৩৪৫)।
  • Cast এক্সটেনশন:
    • Media3 মিডিয়া আইটেমে MediaQueueItem-এর অ্যালবাম টাইটেলকে আর্টিস্টে কনভার্ট করে দেওয়ার বাগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১২৫৫)।
  • টেস্ট ইউটিলিটি:
    • 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.FormatSupport IntDef এবং 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 সাপোর্ট না করার কারণে ব্যতিক্রমের জন্য সমাধান যোগ করুন।
  • ট্র্যাক বেছে নেওয়া:
    • 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 ইনস্ট্যান্স তৈরি হওয়া আটকান (#১১৭৭)।
  • DRM:
    • NoSuchMethodError-এর জন্য বিকল্প সমাধান যা ResourceBusyException বা NotProvisionedException-এর পরিবর্তে MediaDrm ফ্রেমওয়ার্কের মাধ্যমে কিছু Android 14 ডিভাইসে থ্রো করা যেতে পারে (#1145)।
  • প্রভাব:
    • কালার স্পেস কনভার্ট করার মাধ্যমে উন্নত PQ থেকে SDR টোন-ম্যাপিং।
  • সেশন:
    • কন্ট্রোলার বর্তমান আইটেমটি প্রতিস্থাপন করলে বর্তমান পজিশনটি আবার ফিরে আসার সমস্যাটি সমাধান করুন (#951)।
    • মিডিয়া কন্ট্রোলার ও সেশনের মধ্যে শুধু নন-নাল extras সহ MediaMetadata ট্রান্সমিট না হওয়ার সমস্যা সমাধান করা হয়েছে (#১১৭৬)।
  • 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-কে আলাদা থাম্বনেল দেওয়া হয় যা তাদের প্রেজেন্টেশন সময়ের কাছাকাছি।
  • DRM:
    • ডিফল্ট হিসেবে, DRM কন্টেন্টে 'ক্লিয়ার লিড' আনএনক্রিপ্টেড স্যাম্পেল অবিলম্বে চালান, এমনকি পরবর্তী এনক্রিপ্টেড স্যাম্পেলের 'কী' এখনও রেডি না থাকলেও। এর ফলে প্লেব্যাক পজিশন এনক্রিপ্ট করা স্যাম্পেলে পৌঁছানোর পরেও যদি'কী' প্রস্তুত না থাকে, তাহলে প্লেব্যাক মাঝপথে বন্ধ হয়ে যেতে পারে (তবে আগে এই পয়েন্টে প্লেব্যাক শুরুই হতো না)। এই আচরণ MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey বা DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys-এর মাধ্যমে বন্ধ করা যেতে পারে।
      • IMA এক্সটেনশন:
    • উপযুক্ত ফাইল এক্সটেনশন ছাড়া DASH এবং HLS বিজ্ঞাপন চালানো যাবে না, এই সমস্যার সমাধান করুন।
  • সেশন:
    • 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 স্ট্রিমের আনুমানিক সময়সীমা ঠিক করুন যা ৪৭৭২১ সেকেন্ডের চেয়ে বেশি (#৮৫৫)।
  • অডিও:
    • SilenceSkippingAudioProcessor-এর জন্য EOS হ্যান্ডেল করার সমস্যা সমাধান করা হয়েছে, যখন একাধিকবার কল করা হয় (#712)।
  • ভিডিও:
    • Galaxy Tab S7 FE, Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন, যার ফলে 60fps AVC স্ট্রিমকে 'কাজ করে না' হিসেবে চিহ্নিত করা হয় (#693)।
  • মেটাডেটা:
    • Vorbis কমেন্ট থেকে বড় হাতের কী সহ MediaMetadata শুধুমাত্র পপুলেট হওয়ার সমস্যা সমাধান করা হয়েছে (#876)।
    • খুব বড় ID3 ফ্রেম পার্স করার সময় OutOfMemoryError ক্যাচ করুন, যার অর্থ প্লেব্যাক সম্পূর্ণভাবে ব্যর্থ হওয়ার পরিবর্তে ট্যাগ তথ্য ছাড়াই প্লেব্যাক চালিয়ে যাওয়া যেতে পারে।
  • DRM:
    • API 33+ (আগে ওয়ার্কঅ্যারাউন্ড শুধু API 33-এর ক্ষেত্রে প্রযোজ্য ছিল) (#837)-এ জাল ClearKey https://default.url লাইসেন্স URL-এর জন্য ওয়ার্কঅ্যারাউন্ড বাড়ানো হয়েছে।
    • প্লেয়ারের সাথে সারফেস অ্যাটাচ না করে এনক্রিপ্ট করা থেকে ক্লিয়ার কন্টেন্টে পরিবর্তন করার সময় ERROR_DRM_SESSION_NOT_OPENED সংক্রান্ত সমস্যার সমাধান করুন। ক্লিয়ার কন্টেন্ট চালানোর জন্য সুরক্ষিত ডিকোডার ভুলভাবে ব্যবহার করার কারণে এই সমস্যা হয়েছে।
  • সেশন:
    • MediaMetadataCompat থেকে MediaMetadata.extras এবং MediaMetadata.extras থেকে MediaMetadataCompat-এ কাস্টম কী ও ভ্যালু লিখুন (#756, #802)।
    • লিগ্যাসি কন্ট্রোলারের জন্য ব্রডকাস্টিং notifyChildrenChanged সংক্রান্ত সমস্যার সমাধান করা (#৬৪৪)।
    • বিজ্ঞপ্তির বন্ধ থাকা setWhen টাইমারের জন্য নেগেটিভ সময় সেট করার ফলে কিছু ডিভাইসে ক্র্যাশ হওয়ার সমস্যা সমাধান করা হয়েছে (#903)।
    • প্রথম বিজ্ঞপ্তি আপডেট করার অনুরোধ করা হলে, মিডিয়া বিজ্ঞপ্তি কন্ট্রোলার কানেক্ট করার প্রসেস সম্পূর্ণ না করলে, IllegalStateException সংক্রান্ত সমস্যার সমাধান করুন (#917)।
  • UI:
    • BottomSheetDialogFragment-এ মেটেরিয়াল ডিজাইনের সাথে ব্যবহার করার সময় ফরোয়ার্ড ও রিওয়াইন্ড বোতাম দেখা না যাওয়ার সমস্যা সমাধান করা হয়েছে (#৫১১)।
    • PlayerControlView-এর ফাস্ট ফরওয়ার্ড বোতামে নম্বরগুলি মিসঅ্যালাইন হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#547)।
  • DASH এক্সটেনশন:
    • DASH ম্যানিফেস্টে Dolby-র জন্য চ্যানেল সংখ্যা ৫ হিসেবে "f800" পার্স করুন (#৬৮৮)।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
    • MIDI: ফরওয়ার্ড করার সময় প্রোগ্রাম পরিবর্তন সংক্রান্ত ইভেন্ট স্কিপ হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#704)।
    • FFmpeg 6.0-এ মাইগ্রেট করুন এবং কাজ করে এমন NDK আপডেট করে r26b করুন (#707, #867).
  • 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) থ্রো করার সমস্যা সমাধান করা হয়েছে।
  • ভিডিও:
    • 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-এর কারণে প্লেব্যাক সাপ্রেশন ম্যানেজ করে। এটি করার জন্য সিস্টেম ডায়ালগ লঞ্চ করে যাতে ব্যবহারকারী উপযুক্ত অডিও আউটপুট (যেমন, ব্লুটুথ হেডফোন) কানেক্ট করতে পারেন। কনফিগার করা যায় এমন টাইমআউটের (ডিফল্ট হল ৫ মিনিট) মধ্যে উপযুক্ত ডিভাইস কানেক্ট করা হলে, লিসেনার অটোমেটিক প্লেব্যাক আবার চালু করবে।
  • ডাউনলোড:
    • Android 14-এর সাথে মানানসই হওয়ার জন্য DownloadService-এর জন্য "ডেটা সিঙ্ক" ফোরগ্রাউন্ড পরিষেবার ধরন ঘোষণা করুন। এই পরিষেবা ব্যবহার করার সময়, অ্যাপকে ম্যানিফেস্টে foregroundServiceType হিসেবে dataSync যোগ করতে হবে এবং FOREGROUND_SERVICE_DATA_SYNC অনুমতি যোগ করতে হবে (#১১২৩৯)।
  • HLS এক্সটেনশন:
    • শেষবার লোড সম্পূর্ণ হওয়ার সময়ের পরিবর্তে শেষবার লোড শুরু হওয়ার সময় থেকে হিসেব করা বিরতিতে HLS লাইভ প্লেলিস্ট রিফ্রেশ করুন (#৬৬৩)।
  • DASH এক্সটেনশন:
    • সেগমেন্ট টেমপ্লেট URL-এ একই DASH শনাক্তকারী একাধিকবার ব্যবহার করার অনুমতি দিন।
    • এক্সট্র্যাক্ট করার সময় সাবটাইটেল পার্স করার জন্য এক্সপেরিমেন্টাল সহায়তা যোগ করুন। এতে ওভারল্যাপ করা সাবটাইটেল মার্জ করার জন্য আরও ভালো সহায়তা রয়েছে, যার মধ্যে সাবটাইটেল সেগমেন্টের মধ্যে ট্রানজিশন করার সময় ফ্লিকারিং সংক্রান্ত সমস্যার সমাধান করাও অন্তর্ভুক্ত। আপনি DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#২৮৮) ব্যবহার করে এটি চালু করতে পারবেন।
  • RTSP এক্সটেনশন:
    • রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে TCP-তে ফিরে যাওয়ার সময় IndexOutOfBoundsException হতে পারে অথবা কিছু পরিস্থিতিতে প্লেব্যাক হ্যাং হয়ে যেতে পারে।
    • RTSP সেট-আপে স্টেট চেক করুন যখন RtspMediaPeriod-এর লোডিং স্টেট রিটার্ন করা হচ্ছে (#৫৭৭)।
    • বিকল্পের উত্তর সংক্রান্ত পাবলিক হেডারে কাস্টম Rtsp অনুরোধের পদ্ধতি উপেক্ষা করুন (#৬১৩)।
    • কিপ-অ্যালাইভ RTSP বিকল্পের অনুরোধ পাঠানোর সময়সীমার মধ্যে RTSP সেট-আপ রেসপন্স টাইম-আউট ভ্যালু ব্যবহার করুন (#৬৬২)।
  • ডিকোডার এক্সটেনশন (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 হতে পারে, এই সমস্যার সমাধান করা হয়েছে।
  • টেস্ট ইউটিলিটি:
    • Espresso UI টেস্ট ও Compose UI টেস্টের সাথে TestExoPlayerBuilder ও FakeClock-কে মানানসই করে তুলুন। Espresso বা Compose ভিউ ইন্টার‍্যাকশনের সময় প্লেব্যাক অনির্ধারিতভাবে এগিয়ে যাওয়ার সমস্যা এটি সমাধান করে।
  • বাতিল করা চিহ্ন সরান:
    • 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_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_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() ওভাররাইড করুন।
    • কাস্টম *.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)-এর মধ্যে অসামঞ্জস্যপূর্ণ আচরণ ঠিক করুন।
  • ট্রান্সফর্মার:
    • 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 একটি নতুন ট্র্যাক নির্বাচন ট্রিগার করবে।
  • এক্সট্র্যাক্টর:
    • Ogg: দীর্ঘ সময়সীমার ফাইলে খোঁজার সময় বাগ ঠিক করা (#৩৯১)।
    • TimestampAdjuster emsg অ্যাটম থেকে মেটাডেটা স্যাম্পেল টাইম সহ ভুল টাইমস্ট্যাম্প অফসেট ইনিশিয়ালাইজ করার সমস্যা সমাধান করুন (#356)।
  • অডিও:
    • টানেলিং চালু থাকলে এবং AudioProcessors অ্যাক্টিভ থাকলে কিছু প্লেব্যাক ব্যর্থ হওয়ার সমস্যা সমাধান করা হয়েছে, যেমন গ্যাপলেস ট্রিমিংয়ের জন্য (#১০৮৪৭)।
    • সরাসরি প্লেব্যাকের (অফলোড) ক্ষেত্রে Ogg প্যাকেটে Opus ফ্রেম এনক্যাপসুলেট করুন।
    • অফলোড শিডিউলিংয়ের মাধ্যমে স্লিপ মোডে বর্তমান পজিশন এক্সট্রাপোলেট করুন।
    • প্লেয়ারের লাইফসাইকেলের শেষে রিসোর্স রিলিজ করার জন্য Renderer.release() এবং AudioSink.release() যোগ করুন।
    • DefaultAudioSink-এ অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন শুনুন। DefaultAudioSink-এর কনস্ট্রাক্টরে একটি প্রয়োজনীয় প্যারামিটার context যোগ করুন, যার মাধ্যমে DefaultAudioSink, AudioCapabilitiesReceiver-এর লিসেনার হিসেবে রেজিস্টার করবে এবং ক্ষমতা পরিবর্তন সম্পর্কে জানানো হলে তার audioCapabilities প্রপার্টি আপডেট করবে।
    • নতুন ইভেন্টের মাধ্যমে অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন প্রচার করুন onAudioCapabilitiesChanged AudioSink.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 যোগ করুন।
  • RTSP এক্সটেনশন:
    • MPEG4-LATM-এর জন্য, Describe Response SDP মেসেজে (#৩০২) profile-level-id ভ্যালু না থাকলে, ডিফল্ট ভ্যালু ব্যবহার করুন।
    • DESCRIBE রেসপন্স হেডারে উপস্থিত থাকলে, RTSP সেশন থেকে রিলেটিভ পাথ রেজোলিউশনের জন্য বেস Uri ব্যবহার করুন (#১১১৬০)।
  • DASH এক্সটেনশন:
    • মাল্টি পিরিয়ড DASH স্ট্রিমের জন্য MediaLoadData.startTimeMs এবং MediaLoadData.endTimeMs থেকে মিডিয়া টাইম অফসেট সরিয়ে দিন।
    • মাল্টি-পিরিয়ড লাইভ ড্যাশ মিডিয়া সোর্স আবার প্রস্তুত করার সময় IndexOutOfBoundsException (#10838) তৈরি হওয়ার সমস্যা সমাধান করা হয়েছে।
  • HLS এক্সটেনশন:
    • TimestampAdjuster ইনিশিয়ালাইজ করার জন্য লোডিং থ্রেডকে অপেক্ষা করানোর জন্য টাইমআউট সেট করতে HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) যোগ করুন। টাইমআউটের আগে ইনিশিয়ালাইজেশন সম্পূর্ণ না হলে, প্লেব্যাক যাতে অনির্দিষ্টকালের জন্য বন্ধ না হয়ে যায়, তার জন্য PlaybackException থ্রো করা হয়। টাইমআউট সাধারণত শূন্যতে সেট করা থাকে (#323)।
  • টেস্ট ইউটিলিটি:
    • DataSourceContractTest-এ URI স্কিমের ক্ষেত্রে ছোট ও বড় হাতের অক্ষরের মধ্যে পার্থক্য করা হয় কিনা তা চেক করুন।
  • বাতিল করা চিহ্ন সরান:
    • DefaultAudioSink কনস্ট্রাক্টর সরিয়ে দিন, পরিবর্তে DefaultAudioSink.Builder ব্যবহার করুন।
    • HlsMasterPlaylist সরিয়ে, পরিবর্তে HlsMultivariantPlaylist ব্যবহার করুন।
    • Player.stop(boolean) সরান। পরিবর্তে Player.stop() এবং Player.clearMediaItems() (যদি reset true হয়) ব্যবহার করুন।
    • দুটি বন্ধ হয়ে যাওয়া 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 MediaSessionCompat result in an exception in MediaController (#290).
    • MediaSession.broadcastCustomCommand-এর মিসিং ফরওয়ার্ডিং লেগ্যাসি MediaControllerCompat.Callback.onSessionEvent-এ যোগ করুন (#২৯৩)।
    • MediaSession.setPlayer কল করার সময় উপলভ্য কমান্ড আপডেট না হওয়ার সমস্যা সমাধান করা হয়েছে।
    • MediaController থেকে পাঠানো TrackSelectionOverride ইনস্ট্যান্স Format.metadata সহ কোনও গ্রুপকে রেফার করলে সেটি উপেক্ষা করা হয়, এই সমস্যার সমাধান করুন (#২৯৬)।
    • পুরনো MediaSessionCompat-এর মাধ্যমে মেটাডেটা অ্যাক্সেস করার জন্য Player.COMMAND_GET_CURRENT_MEDIA_ITEM উপলভ্য থাকতে হবে, এই সমস্যার সমাধান করুন।
    • MediaSessionService-এ ব্যবহার করার সময় ব্যাকগ্রাউন্ড থ্রেডে MediaSession ইনস্ট্যান্সের কারণে ক্র্যাশ হওয়ার সমস্যা সমাধান করুন (#৩১৮)।
    • অ্যাপের উদ্দেশ্য না থাকা সত্ত্বেও লাইব্রেরির মাধ্যমে মিডিয়া বোতাম রিসিভার ঘোষণা করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#314)।
  • 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 রিলিজ-এর সাথে সম্পর্কিত।

  • কোর লাইব্রেরি:
    • API 33-এ নেটওয়ার্কের ধরন শনাক্তকরণ সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১০৯৭০)।
    • ExoPlayer.isTunnelingEnabled-এ কল করার সময় NullPointerException সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১০৯৭৭)।
  • ডাউনলোড:
    • দুটি সেগমেন্টের শুরুর সময়ের মধ্যে সর্বাধিক পার্থক্যকে SegmentDownloader এবং সাবক্লাসে কনফিগারযোগ্য হিসেবে মার্জ করতে হবে (#২৪৮)।
  • অডিও:
    • Samsung ডিভাইসে গ্যাপলেস MP3 প্লেব্যাক কাজ না করার সমস্যা সমাধান করা হয়েছে (#8594)।
    • অডিও বন্ধ করার ঠিক পরেই প্লেব্যাক স্পিড সেট করার সময় যে সমস্যা হচ্ছিল তা সমাধান করা হয়েছে। আগের স্পিড পরিবর্তনের কারণে এটি ওভাররাইড হয়ে যেতে পারে (#10882)।
  • ভিডিও:
    • HEVC HDR10 ফর্ম্যাট HEVCProfileMain10-এর পরিবর্তে HEVCProfileMain10HDR10-এ ম্যাপ করুন।
    • Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য বিকল্প সমাধান যোগ করা হয়েছে, যার ফলে 60fps AVC স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয় (#১০৮৯৮)।
    • স্ক্রিন রিফ্রেশ রেটের থেকে অনেক বেশি ফ্রেম রেট সহ মিডিয়া চালানোর সময় ফ্রেম রিলিজ পারফর্ম্যান্স সংক্রান্ত সমস্যার সমাধান করুন।
  • অভিনয়ে:
    • মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় ট্রানজিয়েন্ট 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-এ সিঙ্ক ফ্রেমে সরাসরি সিক করার সময় স্যাম্পেল সঠিকভাবে এড়িয়ে যাওয়া (#১০৯৪১)।
  • অডিও:
    • ডাইরেক্ট প্লেব্যাকে (পাসথ্রু) 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 ভার্সনে ৮-চ্যানেল ও ১২-চ্যানেল অডিওকে যথাক্রমে ৭.১ ও ৭.১.৪ চ্যানেল মাস্কে ম্যাপ করুন (#১০৭০১)।
  • মেটাডেটা:
    • 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:
    • H263 ফ্র্যাগমেন্টেড প্যাকেট হ্যান্ডলিং যোগ করুন (#১১৯)।
    • MP4A-LATM-এর জন্য সহায়তা যোগ করুন (#১৬২)।
  • IMA:
    • বিজ্ঞাপন লোড করার সময় IMA SDK আটকে গেলে, বিজ্ঞাপনের তথ্য লোড করার জন্য টাইমআউট যোগ করুন (#10510)।
    • কন্টেন্টের শেষ পর্যন্ত সিক করার সময় মিড-রোল বিজ্ঞাপন এড়িয়ে যাওয়া আটকান (#১০৬৮৫)।
    • সার্ভার-সাইড ইনসার্ট করা বিজ্ঞাপন সহ লাইভ স্ট্রিমের জন্য উইন্ডোর সময়সীমা সঠিকভাবে গণনা করুন, যেমন IMA DAI (#১০৭৬৪)।
  • 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-এর প্রয়োগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যা কিছু ক্ষেত্রে কাজ করছিল না (#১১৬)।
  • এক্সট্র্যাক্টর:
    • H265 শর্ট টার্ম রেফারেন্স পিকচার সেটের পার্সিং সংক্রান্ত সমস্যার সমাধান করা (#১০৩১৬)।
    • esds বক্স থেকে বিটরেট পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১০৩৮১)।
  • DASH:
    • ম্যানিফেস্ট থেকে ClearKey লাইসেন্স URL পার্স করুন (#১০২৪৬)।
  • UI:
    • প্লেব্যাক কন্ট্রোল মেনুতে বর্তমানে অ্যাক্টিভ স্পিড বিকল্পটি টকব্যাক ঘোষণা করছে কিনা তা নিশ্চিত করুন (#১০২৯৮)।
  • RTSP:
    • VP8 ফ্র্যাগমেন্টেড প্যাকেট হ্যান্ডলিং যোগ করুন (#১১০)।
  • Leanback এক্সটেনশন:
    • LeanbackAdapter-এ playWhenReadyটি পরিবর্তন শুনুন (10420)।
  • অভিনয়ে:
    • MediaItem ব্যবহার করুন যা প্লেলিস্ট পদ্ধতিতে Window.mediaItem হিসেবে CastTimeline-এ পাস করা হয়েছে (#২৫, #৮২১২)।
    • CastPlayer (#২৫) দিয়ে Player.getMetadata() এবং Listener.onMediaMetadataChanged()-কে সাহায্য করুন।

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 স্পেশিয়ালাইজার প্রপার্টিতে পরিবর্তন মনিটর করবে এবং এর ভিত্তিতে নতুন ট্র্যাক বেছে নেওয়ার ট্রিগার করবে। television UI মোড সহ ডিভাইসগুলি এই সীমাবদ্ধতা থেকে বাদ দেওয়া হয়েছে এবং সর্বোচ্চ চ্যানেল সংখ্যা সহ ফর্ম্যাটটি পছন্দ করা হবে। এই ফিচার চালু করতে, 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-এর ইন্টার্নাল সাবটাইটেল ফর্ম্যাট ম্যানেজ করার জন্য ব্যবহার করা হয়েছিল।
  • এক্সট্র্যাক্টর:
    • AVI-এর জন্য সহায়তা যোগ করা (#২০৯২)।
    • Matroska: Opus ট্র্যাকের জন্য DiscardPadding পার্স করুন।
    • MP4: esds বক্স থেকে বিটরেট পার্স করুন।
    • Ogg: ডুপ্লিকেট Opus আইডি ও কমেন্ট হেডার অনুমোদন করুন (#10038)।
  • 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 সিঙ্ক ব্যর্থ না হয় (#৯৯৩৩)।
  • বাতিল করা চিহ্ন সরান:
    • Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray) সরান। পরিবর্তে Player.Listener.onTracksChanged(Tracks) ব্যবহার করুন।
    • Player.getCurrentTrackGroups এবং Player.getCurrentTrackSelections সরিয়ে দিন। পরিবর্তে Player.getCurrentTracks ব্যবহার করুন। এছাড়াও, আপনি ExoPlayer.getCurrentTrackGroups ও ExoPlayer.getCurrentTrackSelections ব্যবহার করা চালিয়ে যেতে পারবেন, যদিও এইসব পদ্ধতি বন্ধ করা হয়েছে।
    • DownloadHelper DEFAULT_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)-এর জন্য ডিকোডার ফলব্যাক লজিক ঠিক করুন।
    • AudioCapabilities API পরিবর্তন করুন যাতে null-এর পরিবর্তে স্পষ্টভাবে AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES পাস করার প্রয়োজন হয়।
    • DefaultAudioSink-এ AudioTrackBufferSizeProvider ইনজেক্ট করে AudioTrack বাফার সাইজ গণনা কাস্টমাইজ করার অনুমতি দিন। (#8891)।
    • অনুরোধ করা বাফার সাইজ > ১ এমবি হলে, AudioTrack তৈরি করার জন্য আবার চেষ্টা করুন। (#৯৭১২)।
  • এক্সট্র্যাক্টর:
    • WAV: RF64 স্ট্রিমের জন্য সহায়তা যোগ করা হয়েছে (#9543)।
    • H.265 SPS NAL ইউনিটের ভুল পার্সিং ঠিক করা হয়েছে (#9719)।
    • Ogg Opus এবং Ogg Vorbis ফাইলে Vorbis কমেন্ট (METADATA_BLOCK_PICTURE সহ) পার্স করুন।
  • টেক্সট:
    • একটি 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:
    • নির্দিষ্ট কিছু থিম ব্যবহার করার সময় StyledPlayerView রিওয়াইন্ড ও ফাস্টফরওয়ার্ড বোতামে সংখ্যার রঙ ঠিক করুন (#9765)।
    • প্লেব্যাক স্পিড স্ট্রিং সঠিকভাবে অনুবাদ করুন (#9811)।
  • DASH:
    • Representation-এ পার্স করা প্রয়োজনীয় ও সাপ্লিমেন্টাল প্রপার্টি যোগ করুন (#৯৫৭৯)।
    • forced-subtitle ট্র্যাক রোলের জন্য সহায়তা (#৯৭২৭)।
    • main ট্র্যাকের ভূমিকা C.SELECTION_FLAG_DEFAULT হিসেবে ব্যাখ্যা করা বন্ধ করুন।
    • DVB নেমস্পেস (#৯৮৫৬) ঘোষণা করে না এমন ম্যানিফেস্টের জন্য বেস URL এক্সক্লুশন লজিক সংক্রান্ত সমস্যার সমাধান করুন।
    • রিলেটিভ MPD.Location URL-এর ক্ষেত্রে কাজ করে (#৯৯৩৯)।
  • HLS:
    • শুধুমাত্র অডিও HLS স্ট্রিমের জন্য Format.label সঠিকভাবে পপুলেট করুন (#9608)।
    • স্টার্ট আপ টাইম উন্নত করতে ডিফল্ট হিসেবে চাঙ্কলেস প্রস্তুতি ব্যবহার করুন। আপনার রেন্ডিশনে যদি মাক্সড ক্লোজড-ক্যাপশন ট্র্যাক থাকে যা মাস্টার প্লেলিস্টে ঘোষণা করা হয়নি, তাহলে প্লেব্যাকের জন্য উপলভ্য করতে আপনাকে সেগুলি মাস্টার প্লেলিস্টে যোগ করতে হবে অথবা HlsMediaSource.Factory.setAllowChunklessPreparation(false)-এর মাধ্যমে চাঙ্কলেস প্রস্তুতি বন্ধ করতে হবে।
    • HLS-এ সঠিক কী-ফ্রেম খোঁজার সুবিধা (#২৮৮২)।
  • RTSP:
    • যেকোনও সার্ভার কানেকশনের জন্য ব্যবহৃত SocketFactory ওভাররাইড করতে ক্লায়েন্ট API প্রদান করুন (#৯৬০৬)।
    • BASIC-এর থেকে DIGEST যাচাইকরণ পদ্ধতিকে বেশি পছন্দ করুন যদি দুটিই উপস্থিত থাকে (#9800)।
    • RTSP ট্র্যাক টাইমিং উপলভ্য না থাকলে হ্যান্ডেল করুন (#9775)।
    • ভুল RTP-Info হেডার ভ্যালু উপেক্ষা করুন (#৯৬১৯)।
  • ট্রান্সফর্মার:
    • প্রয়োজনীয় ন্যূনতম API ভার্সন বাড়িয়ে ২১ করুন।
    • ট্রান্সফর্মেশনের সময় হওয়া সমস্যা বর্ণনা করতে এখন TransformationException ব্যবহার করা হয়।
    • ট্রান্সফর্মেশনের বিকল্প নির্দিষ্ট করতে TransformationRequest যোগ করুন।
    • একাধিক শ্রোতাকে রেজিস্টার করার অনুমতি দিন।
    • কোডেক আউটপুট আংশিকভাবে পড়া হলে ট্রান্সফরমার আটকে যাওয়ার সমস্যা সমাধান করুন।
    • মিক্সার রিলিজ করার সময় Transformer.getProgress-এ সম্ভাব্য NPE সংক্রান্ত সমস্যার সমাধান করে থ্রো করে।
    • ট্রান্সফর্মেশন প্রয়োগ করার জন্য একটি ডেমো অ্যাপ যোগ করুন।
  • MediaSession এক্সটেনশন:
    • ডিফল্ট হিসেবে, MediaSessionConnector এখন বন্ধ করার সময় প্লেলিস্ট মুছে দেয়। যেসব অ্যাপ প্লেলিস্ট রেখে দিতে চায়, তারা কানেক্টরে setClearMediaItemsOnStop(false) কল করতে পারে।
  • কাস্ট এক্সটেনশন:
    • CastPlayer থেকে onIsPlayingChanged-এ কল করার সময় যে সমস্যা হচ্ছিল, সেটি সমাধান করা হয়েছে (#9792)।
    • DefaultMediaItemConverter (#৯৬৬৩)-এর সাথে আর্টওয়ার্ক সহ অডিও মেটাডেটা সাপোর্ট করে।
  • 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)।
  • বাতিল করা চিহ্ন সরান:
    • 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 মডিউল দিয়ে পরিবর্তন করা হয়েছে। এটি প্লেয়ার ও মিডিয়া সেশনের মধ্যে সরাসরি ইন্টিগ্রেশন প্রদান করে, যার জন্য কোনও অ্যাডাপ্টার/কানেক্টর ক্লাস ব্যবহার করতে হয় না।