Media3

মিডিয়া ব্যবহারের ক্ষেত্রে লাইব্রেরি সাপোর্ট করে।
লেটেস্ট আপডেট স্টেবল রিলিজ রিলিজ ক্যান্ডিডেট বিটা রিলিজ আলফা রিলিজ
২৬ অক্টোবর, ২০২৬ ১.১১.১ - - 1.12.0-alpha02

ডিপেন্ডেন্সি ঘোষণা করা

Media3-তে ডিপেন্ডেন্সি যোগ করতে, আপনার প্রোজেক্টে Google Maven রিপোজিটরি যোগ করতে হবে। আরও তথ্যের জন্য Google-এর Maven রিপোজিটরি পড়ুন।

আপনার অ্যাপ বা মডিউলের জন্য build.gradle ফাইলে আপনার প্রয়োজনীয় আর্টিফ্যাক্টের জন্য ডিপেন্ডেন্সি যোগ করুন:

Groovy

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-alpha02

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

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

  • Play পরিষেবার উপর প্রভাব:
    • নতুন media3-effect-play-services মডিউল নিয়ে আসা হয়েছে যা Google Play পরিষেবার মিডিয়া এফেক্ট প্রদান করে, এর মধ্যে ভিডিও এনহ্যান্সমেন্টের জন্য 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 সংক্রান্ত সমস্যার সমাধান করুন (#৩৪২৩)।
    • preload() কখনও কল না করা হলেও, PreloadMediaSource অপ্রত্যাশিতভাবে প্রিলোড ইভেন্ট পোস্ট করতে পারে, এমন সমস্যার সমাধান করা হয়েছে (#3408)।
    • মেটাডেটা ট্র্যাকের জন্য Format.subsampleOffsetUs উপেক্ষা করার ফলে ডিকোড করা SCTE-35 স্প্লাইস কমান্ডে (#৩৪১৩) ভুল প্লেব্যাক টাইমস্ট্যাম্পের সমস্যা সমাধান করা হয়েছে।
    • PreloadMediaSource এবং DefaultPreloadManager-এ মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা হয়েছে যখন একই সোর্সে preload() একাধিকবার কল করা হয় (#3445)।
    • কন্টেন্ট টাইমলাইন রিফ্রেশ করা বাকি থাকাকালীন AdsMediaSource রিলিজ করার সময় NullPointerException সংক্রান্ত সমস্যার সমাধান করা (#3442)।
    • প্রোগ্রেসিভ মিডিয়ার প্লেব্যাক ভুল পজিশনে জাম্প করার সমস্যা সমাধান করা হয়েছে। এটি তখন হয় যখন খোঁজার পরে লোড (বা শূন্য নয় এমন পজিশনে প্লেব্যাক শুরু করা) ব্যর্থ হয় এবং আবার চেষ্টা করা হয় (#3440)।
    • Xiaomi TV Stick 4K (MiTV-AYFR0) H.264 ডিকোডারের জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন রেজোলিউশন পরিবর্তন করার সময় ফ্রিজ হয়ে যায় (#3457).
    • SteeringManifestTracker-এ NullPointerException সংক্রান্ত সমস্যার সমাধান করুন, যখন পোস্ট করা লোড সম্পূর্ণ হওয়ার আগে ট্র্যাকার বন্ধ হয়ে যায় অথবা ত্রুটি সংক্রান্ত কলব্যাক সম্পন্ন হয় (#3443)।
    • 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 বিগ-এন্ডিয়ান থেকে লিটল-এন্ডিয়ানে কনভার্ট করা হয়নি, যার ফলে কোনও এডিট লিস্ট না থাকলে অডিওর প্রথম ~২৯৯ মিলি সেকেন্ড ড্রপ হয়ে যায় (#৩৪৩১)।
    • 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 ডিকোডারের সাথে কাজ করে না (#3425)।
    • Matroska: নেস্টেড ChapterAtom এলিমেন্ট (#3438) পার্স করার সময় NullPointerException সংক্রান্ত সমস্যার সমাধান করুন।
    • Ogg: এমন একটি প্যাকেটের ক্ষেত্রে সমস্যা সমাধান করা হয়েছে যার সাইজ ২৫৫ বাইটের গুণিতক এবং পৃষ্ঠার সীমানায় শেষ হয়, সেটি পরবর্তী প্যাকেটের সাথে মার্জ করা হয়।
    • MP4: Mp4Extractor ও FragmentedMp4Extractor-এ mebx বক্স করা টাইমড মেটাডেটা ট্র্যাক পার্স করুন। it35 কী সহ ট্র্যাকগুলি MimeTypes.APPLICATION_ITUT_T35 (HAGC প্লেব্যাক চালু করা) হিসাবে প্রকাশ করা হয়। FLAG_EMIT_RAW_MEBX_DATA সেট না করা থাকলে, অন্যান্য mebx ট্র্যাক উপেক্ষা করা হয়, যেক্ষেত্রে সব mebx ট্র্যাক র MimeTypes.APPLICATION_MEBX হিসেবে এমিট করা হয়।
    • Ogg: গ্যাপলেস প্লেব্যাকের জন্য Opus এন্ড-প্যাডিং এক্সট্র্যাক্ট করার সুবিধা (#2576) এবং কন্টিনিউড প্যাকেট দিয়ে শুরু হওয়া পৃষ্ঠায় খোঁজার পরে স্যাম্পেল টাইমস্ট্যাম্প সংক্রান্ত সমস্যার সমাধান।
    • 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 ফর্ম্যাট সাপোর্ট যোগ করুন।
    • FragmentedMp4Extractor-এ FLAG_READ_MFRA_FOR_SEEK_MAP ব্যবহার করে খোঁজার অনুমতি দিতে, ফ্র্যাগমেন্ট করা MP4 ফাইলের শেষে mfra (মুভি ফ্র্যাগমেন্ট র‍্যান্ডম অ্যাক্সেস) বক্স লিখুন।
    • অন্য কোনও স্যাম্পেল লেখার আগে EOS স্যাম্পেল লেখার সময় Mp4Writer এবং FragmentedMp4Writer-এ ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন।
    • কন্টেনার হেডারে (#৩৩৬৯) dby1 মানানসই ব্র্যান্ডের বিজ্ঞাপন দিয়ে Dolby কন্টেন্ট MP4 বা ফ্র্যাগমেন্টেড MP4 ফাইলে মাক্স করার সময় কন্টেনার সংক্রান্ত সমস্যার সমাধান করুন।
    • Mp4Muxer এবং FragmentedMp4Muxer-এ ৩২-বিট ফ্লোট PCM অডিও ট্র্যাকের জন্য সহায়তা (#3389)।
    • ট্র্যাক যোগ করার সময় Mp4Muxer এবং FragmentedMp4Muxer-এ কাজ করে না এমন Dolby Vision প্রোফাইল বাতিল করুন।
    • Mp4Muxer এবং FragmentedMp4Muxer-এ ২৪-বিট ও ৩২-বিট ইন্টিজার PCM অডিও ট্র্যাক কাজ করে।
  • 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-এ MediaController.setMediaItem বা setMediaItems-এর পরে play() কল করার সময়, onPlayFrom*-এর পরিবর্তে কাজ করে না এমন onPrepareFrom* কলব্যাক ডিসপ্যাচ করা বা অনুরোধ করা মিডিয়া আইটেম আবার শুরু না করেই onPlay() ডিসপ্যাচ করার সমস্যা সমাধান করুন।
    • কাস্টম কমান্ড রেসপন্স (#3432) পাওয়ার সময় পুরনো MediaBrowser-এ NullPointerException সংক্রান্ত সমস্যার সমাধান করুন।
    • IllegalArgumentException ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন, যখন অন্তর্নিহিত Bundle-এ ডুপ্লিকেট 'কী' সহ পুরনো মেটাডেটা পাওয়া যায়।
    • পুরনো MediaSessionCompat কন্ট্রোল করার সময় একই Looper ইটারেশনের মধ্যে করা আউটগোয়িং MediaControllerCompat.TransportControls কল একত্রিত করুন (যেমন, এখন setMediaItem, prepare ও play-কে একসাথে কল করলে একটিই onPlayFrom* কলব্যাক পাঠানো হয়)।
  • UI:
    • ডান থেকে বাঁদিকে লেখা সাবটাইটেলে বিরামচিহ্নের অবস্থান এবং স্প্যান রেঞ্জ সংরক্ষণ সংক্রান্ত সমস্যার সমাধান করা হয়েছে যখন দ্বিমুখী টেক্সট র‍্যাপিং চালু থাকে (#3454, #3455).
    • media3-ui-compose মডিউলে TrackSelectionState এবং TrackSelectionParametersState ক্লাস এবং তাদের সংশ্লিষ্ট কম্পোজেবল স্টেট রিমেম্বার ফাংশন যোগ করুন।
    • PresentationState.videoAspectRatio চালু করুন এবং Modifier.resizeWithContentScale-কে sourceSizeDp: Size?-এর পরিবর্তে aspectRatio: Float? নিতে বলুন।
    • প্লেয়ারের বর্তমান কিউ শোনার জন্য CuesState ক্লাস এবং rememberCuesState কম্পোজেবল media3-ui-compose মডিউলে যোগ করুন।
    • ProgressSlider-এ স্ক্রাবিং মোড সাপোর্ট যোগ করুন যদি এটি ExoPlayer বা CompositionPlayer-এর উপর ভিত্তি করে হয়।
    • PresentationState-এ showArtwork-এর জন্য সহায়তা যোগ করুন এবং ContentFrame ও Player-এ প্রদত্ত ঐচ্ছিক artwork কম্পোজেবলের রেন্ডারিংয়ের সময় নির্ধারণ করতে এটি ব্যবহার করুন। artwork স্লটের ডিফল্ট ভ্যালু হিসেবে ব্যবহার করার জন্য Artwork Composable যোগ করুন।
    • 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-এর সাথে স্কেল করা ভিডিও আর এর বাইরে না যায়।
    • isLive এবং liveOffsetMs এক্সপোজ করে ProgressSlider, ProgressStateWithTickCount এবং ProgressStateWithTickInterval-এ লাইভস্ট্রিম UI সাপোর্ট যোগ করুন। 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 মিডিয়া স্যাম্পেল সহ ইনিশিয়ালাইজেশন সেগমেন্ট (#3456).
    • এক্সপোজড 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-এ পার্স করুন (#3426)।
    • ট্রিক মোডে @id ভ্যালুর হোয়াইটস্পেস-সেপারেটেড তালিকা (http://dashif.org/guidelines/trickmode) ডেসক্রিপ্টর @value অ্যাট্রিবিউট (#3315) কাজ করে।
    • DashManifestParser-এ <ProducerReferenceTime> পার্স করার জন্য সহায়তা, AdaptationSet.producerReferenceTimes-এ এটি এক্সপোজ করা এবং VOD স্ট্রিমের জন্য Timeline.Window.presentationStartTimeMs ও Timeline.Window.windowStartTimeMs পপুলেট করতে এটি ব্যবহার করা।
    • DASH কন্টেন্ট স্টিয়ারিংয়ের জন্য সহায়তা যোগ করুন (#১৬৮৯)।
    • <UTCTiming> এলিমেন্টে অ্যাট্রিবিউট না থাকা DASH ম্যানিফেস্ট পার্স করার সময় হতে পারে এমন NullPointerException সংক্রান্ত সমস্যার সমাধান করা (#৩৪৩৬)।
  • 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 রিসিভারে মিডিয়া আইটেম লোড না হওয়ার সমস্যা সমাধান করা হয়েছে (#২৪০২)।
    • 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

1.11.1

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

  • ExoPlayer:
    • প্রোগ্রেসিভ মিডিয়ার জন্য HAGC মেটাডেটা চালু/বন্ধ করতে ফ্ল্যাগটি MediaSource.Factory থেকে ExtractorsFactory-এ সরান। আগের setExperimentalEnableHagcPlayback পদ্ধতি সরিয়ে দিয়ে তার জায়গায় ExtractorsFactory.setParseHagcMetadata পদ্ধতি ব্যবহার করা হচ্ছে। এছাড়াও, এটি এমন একটি সমস্যার সমাধান করে যেখানে Matroska/WebM কন্টেনারের জন্য বন্ধ করার সুবিধা কাজ করেনি।
    • ট্রানজিশন না করা সেকেন্ডারি রেন্ডারার প্রি-ওয়ার্ম করার সময় প্লেব্যাক স্টল সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
    • প্রি-ওয়ার্মিং সংক্রান্ত সমস্যার সমাধান করুন যেখানে একটি সিক রিসেট এবং উভয় রেন্ডারারকে অক্ষম করার সময় Surface প্রাথমিক রেন্ডারারে ফেরত দেওয়া উচিত।
    • ArrayIndexOutOfBoundsException-এর সমস্যা সমাধান করুন, যখন লাইভ টাইমলাইন রিফ্রেশ ডিফল্ট পজিশনকে সার্ভার-সাইডে যোগ করা বিজ্ঞাপনের পরে সরিয়ে দেয়, যা বর্তমানে চালানো হচ্ছে (#3348)।
    • স্ক্রাবিং মোড সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে ScrubbingModeParameters.allowSkippingMediaCodecFlush চালু থাকা অবস্থায় খোঁজার সময় পুরনো ভিডিও ফ্রেম অল্প সময়ের জন্য দেখা যেতে পারে।
  • এক্সট্র্যাক্টর:
    • Matroska: ক্লাস্টারের পরে ট্র্যাক রাখলে, খোঁজা যায় এমন টাইমলাইন তৈরি না হওয়ার সমস্যার সমাধান করা হয়েছে (#3377).
  • অডিও:
    • SilenceSkippingAudioProcessor-এ বাফার সাইজ গণনা করার সমস্যা সমাধান করুন যাতে ন্যূনতম নীরবতার সময়কাল ফ্রেম সাইজ (#3271) দ্বারা ভুলভাবে কমানো না হয়।
    • Android-এর সংজ্ঞা অনুযায়ী স্যাম্পেলকে আনসাইনড হিসেবে বিবেচনা করতে PcmAudioUtil-এ ৮-বিট PCM হ্যান্ডলিং সংক্রান্ত সমস্যার সমাধান করা (#৩২৭১)।
    • অফলোড সংক্রান্ত সমস্যার সমাধান করুন, যার ফলে সীমিত হার্ডওয়্যার বাফার সাইজের কারণে প্রি-রোল বা গ্যাপলেস ট্রানজিশনের সময় প্লেব্যাক বন্ধ হয়ে যেতে পারে।
    • DefaultAudioSink-এ বাগ ঠিক করুন যেখানে প্লেব্যাক থ্রেড আর লাইভ না থাকলে রিলিজ কাউন্ট কমে না (#৩৩৩৮)।
  • সেশন:
    • Player.Listener কলব্যাক থেকে প্রসেসে থাকা MediaController রিলিজ করা হলে NullPointerException সংক্রান্ত সমস্যার সমাধান করুন (#৩৩৭৫)।
    • MediaBrowser যখন onGetLibraryRoot() বা onConnectAsync() থেকে অ্যাসিঙ্ক্রোনাস ফলাফল প্রদানকারী কোনও পরিষেবার সাথে কানেক্ট করে, তখন প্রধান থ্রেডে ডেডলক সংক্রান্ত সমস্যার সমাধান করুন (#3393)।
  • HLS এক্সটেনশন:
    • স্ন্যাপ করার জন্য টার্গেট সেগমেন্ট এখনও প্লেলিস্টে না থাকলে, কন্টেন্ট আবার চালু করার অফসেটের গণনা ঠিক করুন (#৩৩২২)।
    • এক্সট্র্যাক্টর থেকে EOFException পাওয়ার পরে সম্পূর্ণভাবে ব্যবহৃত HlsMediaChunk আবার লোড করার চেষ্টা করে, এই সমস্যার সমাধান করা হয়েছে (#৩৩৫০)।
  • 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)।
    • অডিও সেশন আইডি ব্যবহার সম্পর্কিত রেস কন্ডিশন ঠিক করুন যেখানে ExoPlayer-এর মাধ্যমে অটোমেটিক জেনারেট করা প্রাথমিক অডিও সেশন আইডি setAudioSessionId-এর মাধ্যমে সেট করা ভ্যালুর পরিবর্তে ব্যবহার করা হবে (#3241)।
    • প্রোগ্রেসিভ মিডিয়ার (যেমন, MP4, Matroska) জন্য পরীক্ষামূলক HAGC (ST 2094-50) টাইমড মেটাডেটা প্লেব্যাক সাপোর্ট যোগ করুন। প্লেয়ার অটোমেটিক HAGC মেটাডেটা ট্র্যাককে সংশ্লিষ্ট ভিডিও ট্র্যাকের সাথে মার্জ করে এবং API 37+ ডিভাইসে ডিকোডারে আউট-অফ-ব্যান্ড মেটাডেটা ডেলিভার করে। এই আচরণ DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)-এর মাধ্যমে বন্ধ করা যেতে পারে।
    • ট্র্যাক বেছে নেওয়ার ক্ষেত্রে Format-এর আপেক্ষিক পছন্দ দেখাতে Format.selectionPriority যোগ করুন (#3236)।
    • স্ক্রাবিং মোড সংক্রান্ত সম্ভাব্য সমস্যার সমাধান করা হয়েছে, যেখানে 'স্ট্রিমের শেষ' পর্যন্ত খোঁজার সময় স্ক্রাবিং বন্ধ হয়ে যেতে পারে।
  • CompositionPlayer:
    • TrackSelector ইনস্ট্যান্স রিলিজ না হওয়ার সমস্যা সমাধান করা হয়েছে।
  • ট্রান্সফর্মার:
    • ExportResult.fileSizeBytes-এর অতিরিক্ত রিপোর্ট করা সংক্রান্ত সমস্যার সমাধান করা।
  • ট্র্যাক বেছে নেওয়া:
    • BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR এক্সপোজ করুন এবং AdaptiveTrackSelection.Factory.setTrackFormatComparator যোগ করুন যাতে কাস্টম ফর্ম্যাট অর্ডারিং এবং শুধুমাত্র বিটরেট অর্ডারিংয়ের বাইরে ABR বেছে নেওয়ার অগ্রাধিকারের অনুমতি দেওয়া যায়।
    • সময়ের উপর নির্ভর করে এমন কনকারেন্সি সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ট্র্যাক সিলেকশন প্যারামিটারে দ্রুত সিকোয়েন্সিয়াল আপডেট করার ফলে কিছু আপডেট হারিয়ে যেতে বা ওভাররাইট হতে পারে।
  • এক্সট্র্যাক্টর:
    • MP4, MP3, এবং FLAC: রানটাইম মেমরি খরচ কমাতে কন্টেইনার পার্সিংয়ের সময় অ্যাটাচ করা ছবি এবং কভার আর্ট মেটাডেটা বাতিল করার অনুমতি দিতে FLAG_DISABLE_ARTWORK_METADATA যোগ করুন (#২০৭৭)। এছাড়াও, এটি DefaultExtractorsFactory.setDisableArtworkMetadata-এর মাধ্যমে সেন্ট্রালি চালু করা যেতে পারে।
    • MP4: ITU-T T.35 (it35) টাইমড মেটাডেটা ট্র্যাক এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন।
    • MP4: চ্যাপ্টার মেটাডেটা (Nero এবং QuickTime ফর্ম্যাট) এক্সট্র্যাক্ট করার জন্য সহায়তা যোগ করুন। দুটিই থাকলে QuickTime চ্যাপ্টারকে অগ্রাধিকার দেওয়া হয়। এক্সট্র্যাক্ট করা চ্যাপ্টারের তথ্য ট্র্যাকের Metadata-এর মধ্যে Chapter এন্ট্রি হিসেবে দেখানো হয়, যা MP4, M4A এবং M4B ফাইলে (যেমন অডিওবুক এবং পডকাস্ট) নেটিভ চ্যাপ্টার নেভিগেশনের অনুমতি দেয় (#২৮০৩)।
    • WAV, Matroska এবং MP4: ৬৪-বিট ফ্লোটিং পয়েন্ট PCM অডিওর জন্য সহায়তা যোগ করা হয়েছে (#৩০৯০)।
    • Matroska: সঠিক ColorInfo পপুলেট করতে কোডেক বিটস্ট্রিম মেটাডেটা ব্যবহার করুন।
    • MP4: sidx বক্স না থাকলে mfra বক্স ব্যবহার করে ফ্র্যাগমেন্টেড MP4 ফাইলে খোঁজার জন্য সহায়তা যোগ করুন। এটি চালু করতে, FragmentedMp4Extractor-কে FLAG_READ_MFRA_FOR_SEEK_MAP প্রদান করুন, যা এখন DefaultExtractorsFactory-এ ডিফল্ট হিসেবে করা হয় (#3088)।
    • কাজ করে না এমন ভার্সন সহ av1C ডেটা উপেক্ষা করুন।
    • MP4: fpcm বক্সে বিগ-এন্ডিয়ান ফ্লোটিং পয়েন্ট PCM-এর জন্য সহায়তা যোগ করুন।
    • Matroska: ট্র্যাকের Metadata-এ Chapterটি এন্ট্রিতে চ্যাপ্টারের তথ্য পার্স করুন।
    • MPEG-TS: কোর ও এক্সটেনশন সাবস্ট্রিমকে একটি স্যাম্পেলে একত্রিত করে 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-এ ফরওয়ার্ড করুন।
    • সময়-ভিত্তিক অডিও প্রসেসিং (#৪১৮) অনুমতি দিতে সঠিক AudioProcessor.StreamMetadata.positionOffsetUs সেট করুন।
    • বিগ এন্ডিয়ান ৩২-বিট এবং ৬৪-বিট ফ্লোটিং পয়েন্ট PCM-এর জন্য সহায়তা যোগ করুন।
    • Google Pixel ডিভাইসে প্লেব্যাকের জন্য EAC3-JOC থেকে EAC3-তে ফলব্যাক পাথ সরিয়ে দিন কারণ তাদের স্ট্যান্ডার্ড EAC3 ডিকোডার EAC3-JOC স্ট্রিম ডিকোড করতে পারে না (#3257)।
  • ভিডিও:
    • ভিডিও যোগ করার লজিক ঠিক করুন যাতে যোগ করার সময় ড্রপ করা বাফারগুলিকে ড্রপ করার পরিবর্তে স্কিপ করা হিসাবে গণনা করা যায়।
    • প্লেসহোল্ডার সারফেস কাজ করে না এমন ডিভাইসে ফ্রেম ড্রপ এড়াতে নতুন সারফেস সেট করার সময় অবিলম্বে রেন্ডারিং সিদ্ধান্ত ঠিক করুন।
    • ড্রপ বা স্কিপ করা ফ্রেমের জন্য MediaCodecVideoRenderer-এ ফ্রেম রেট অনুমান আরও সঠিক করতে এটি ঠিক করুন।
    • ফ্রেম আগে শিডিউল করার জন্য ব্যবহৃত থ্রেশহোল্ডের কনফিগারেশনের অনুমতি দিন। ডিফল্ট ভ্যালু হল ৫০ মিলি সেকেন্ড, তবে MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()-এর মাধ্যমে এই ভ্যালু কাস্টমাইজ করা যায়।
    • VideoFrameReleaseHelper-এ সেই সমস্যার সমাধান করুন যেখানে ডিসপ্লে পরিবর্তন করলে প্রধান থ্রেডে অপ্রয়োজনীয় Choreographer কলব্যাক এবং অতিরিক্ত CPU ওয়েকআপ ট্রিগার হতে পারে।
  • টেক্সট:
    • TTML: অঞ্চলের জন্য style থেকে displayAlign-এ ফলব্যাক (#২৫৫৯)।
    • TTML: <p> এলিমেন্টের পেরেন্ট থেকে কিউ শুরুর সময় ইনহেরিট করুন (#৩২৪৬)।
  • মেটাডেটা:
    • MediaMetadata.discSubtitle ফিল্ড যোগ করুন এবং ID3v2.4 TSST এবং Vorbis DISCSUBTITLE ডেটা থেকে এটি পার্স করুন।
    • ID3 TPOS ফ্রেম থেকে ডিস্ক নম্বর ও গণনা পার্স করুন।
  • প্রভাব:
    • সিক করার সময় প্লেয়ার যাতে ফ্রিজ না হয়ে যায়, তার জন্য ফ্লাশ করার সময় FinalShaderProgramWrapper-এ রিড্র স্টেট মুছে দিন।
  • Muxers:
    • নতুন addTrackReference API-এর মাধ্যমে Mp4Muxer-এ ট্র্যাক রেফারেন্স (tref বক্স) যোগ করার সুবিধা যোগ করুন। এটি ট্র্যাকগুলির মধ্যে সম্পর্ক স্থাপন করতে দেয়, যেমন একটি মেটাডেটা ট্র্যাককে ভিডিও ট্র্যাকের সাথে লিঙ্ক করা যা এটি বর্ণনা করে।
    • OggMuxer যোগ করুন যাতে OPUS বা VORBIS মিডিয়া স্ট্রিম ogg ফাইল ফরম্যাটে মিক্স করা যায়।
    • WAV ফাইল জেনারেশনের জন্য WavMuxer যোগ করুন (ইন্টিজার এবং ফ্লোটিং-পয়েন্ট PCM-এর সাথে কাজ করে)।
    • রিজার্ভ করা স্পেস ছাড়াই ছোট নন-স্ট্রিমেবল ফাইল লেখার অনুমতি দিতে setAttemptStreamableOutputEnabled থেকে InAppMp4Muxer.Factory যোগ করুন।
    • Mp4Muxer এবং FragmentedMp4Muxer-এ IAMF অডিওর জন্য সহায়তা যোগ করুন।
  • IMA এক্সটেনশন:
    • পজ বিজ্ঞাপনের জন্য ব্যবহার করতে, বিজ্ঞাপন স্লট প্রদান করার অনুমতি দিতে ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot যোগ করুন।
    • একের পর এক স্কিপ করা যায় এমন VAST বিজ্ঞাপনের ক্ষেত্রে দ্বিতীয় বিজ্ঞাপনে অবিলম্বে স্কিপ বোতাম দেখানোর সমস্যাটি সমাধান করুন (#3165)।
  • সেশন:
    • ব্যাকগ্রাউন্ড থ্রেড প্লেয়ার লুপার সহ সেশন ব্যবহার করার সময় IllegalStateException-এর মধ্যে সম্ভাব্য ডেডলক ও MediaNotificationManager ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করুন।
    • 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 মডিউলে যোগ করুন। বর্তমানে চলা MediaItem সম্পর্কে বিভিন্ন মেটাডেটা তথ্য দেখানোর জন্য demo-compose-এ এই স্টেট হোল্ডার ব্যবহার করা হয়।
    • 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) প্রকাশ করুন। demo-compose-এ এই কার্যকারিতাটি একটি নতুন ShortFormPlayerScreen-এর সাথে প্রদর্শন করুন।
    • PlayerView এবং Compose PresentationState-এ শাটার সাপ্রেশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে যার ফলে টাইমলাইনে ক্র্যাশ হচ্ছিল, কারণ এটি পিরিয়ড UID লুকআপ (#3264) সাপোর্ট করে না।
  • ডাউনলোড:
    • ডাউনলোডের জন্য ফেচ করার সময় মিডিয়া প্লেলিস্টে HLS ভেরিয়েবল সংক্রান্ত সমস্যার সমাধান করুন (#3258)।
  • Ktor এক্সটেনশন:
    • নতুন media3-datasource-ktor এক্সটেনশন মডিউল যোগ করুন যা Ktor HTTP স্ট্যাক দ্বারা সমর্থিত KtorDataSource প্রদান করে।
    • কানেকশন খোলার সময় মেমরিতে সম্পূর্ণ HTTP রেসপন্স বডি লোড করার KtorDataSource সংক্রান্ত সমস্যার সমাধান করুন (#3305)।
  • HLS এক্সটেনশন:
    • HLS কন্টেন্ট স্টিয়ারিং ও পাথওয়ে ক্লোনিংয়ের জন্য সহায়তা যোগ করুন (#১৬৮৯)।
    • অ্যাপকে সম্পূর্ণভাবে প্রসেস করা অ্যাসেট তালিকার ইন্টারস্টিশিয়ালকে অন-ডিমান্ড রি-রেজোলিউশনের জন্য আবার অনুপলভ্য অবস্থায় রিসেট করার অনুমতি দিতে, HlsInterstitialsAdsLoader-এ setWithAssetListReset যোগ করুন।
    • EXT-X-STREAM-INF এবং EXT-X-I-FRAME-STREAM-INF-এর SCORE অ্যাট্রিবিউট পার্স করুন এবং এটি Format.selectionPriority-এ পপুলেট করুন (#3236)।
    • প্লেলিস্ট আর প্রাইমারি বা অ্যাক্টিভ না থাকলেও শিডিউল করা HLS প্লেলিস্ট রিফ্রেশ হতে থাকে, এই সমস্যার সমাধান করা হয়েছে (#3254)।
    • ইন্টারস্টিশিয়াল অ্যাসেট তালিকা (#৩৩২২) সমাধান করার সময় কন্টেন্ট রিজুম অফসেটের গণনা সংক্রান্ত সমস্যার সমাধান করা।
    • প্লেলিস্টের অনুরোধ ব্যর্থ হওয়ার পরে কম লেটেন্সি লাইভ প্লেব্যাক আবার শুরু করার সময় অপ্রত্যাশিত অডিও ট্র্যাক টাইমস্ট্যাম্পের বিচ্ছিন্নতা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#3311)।
    • HlsMediaPeriod.getStreamKeys()-এ বাগ ঠিক করা হয়েছে যেখানে অডিও রেন্ডিশনে ID3 ট্র্যাককে সাবটাইটেল হিসেবে বিবেচনা করা হয় (#3333)।
  • DASH এক্সটেনশন:
    • ভাষার (#3113) উপর ভিত্তি করে 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-এ NullPointerException দেখানোর সমস্যা সমাধান করা হয়েছে। নন-Media3 প্রেরকের থেকে শুরু করা কাস্ট সেশনে যোগ দেওয়ার সময় এই সমস্যা দেখা যায়।
    • অ্যাক্টিভ প্লেয়ার পরিবর্তন করার সময় 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন ১.১০.০

১.১০.১

১২ মে, ২০২৬

  • কমন লাইব্রেরি:
    • 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 প্লেয়ারে পুরনো টাইমলাইন তথ্য প্রচার করে এবং সারিবদ্ধ পিরিয়ড অপ্রত্যাশিতভাবে মুছে যায় (#৩০১৬)।
    • ফোন কল চলাকালীন প্লেব্যাকের অনুরোধ করা হলে ExoPlayer যাতে বিলম্বিত অডিও ফোকাসের অনুরোধ না করে সেই সমস্যার সমাধান করুন।
    • অন-ডিমান্ড থেকে লাইভ কন্টেন্টে ট্রানজিশন করার সময় অন-ডিমান্ড কন্টেন্টের শেষে রি-বাফারিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#৩০৫২)।
    • Dolby Vision Profile 10-এর জন্য সহায়তা যোগ করুন (#২৮৩০)।
    • Fix bug where an uninitialized pre roll ad produced an ArrayIndexOutOfBoundsException (#3125).
  • CompositionPlayer:
    • EditedMediaItem.removeVideo-এর জন্য সহায়তা যোগ করুন।
  • ট্রান্সফর্মার:
    • EditedMediaItem.Builder.setFrameRate() এখন ভিডিওর জন্য সর্বাধিক আউটপুট ফ্রেম রেট সেট করতে পারে, যা setSpeed()-এর মাধ্যমে মিডিয়া স্পিড বাড়ানোর সময় বিশেষভাবে সহায়ক হয়।
  • ট্র্যাক বেছে নেওয়া:
    • ট্র্যাক ওভাররাইড সহ অটো-ফিল করা প্যারামিটার হিসেবে আউটপুট অ্যারে অন্তর্ভুক্ত করতে DefaultTrackSelector.selectAllTracks-এর সিগনেচার পরিবর্তন করুন।
    • সংশ্লিষ্ট প্রাথমিক ট্র্যাক বেছে নেওয়া হয়েছে কিনা তা নির্বিশেষে এম্বেড করা মেটাডেটা ট্র্যাক বেছে নেওয়া হলে, সেই সমস্যা সমাধান করুন (#২৯৪)।
    • preferredVideoLanguages, preferredVideoLabels, preferredAudioLabels, preferredTextLabels এবং selectTextByDefault-এর জন্য TrackSelectionParameters বিকল্প স্টেবিলাইজ করুন।
  • এক্সট্র্যাক্টর:
    • MP4: moov (#৩০৪৬)-এর মতো অন্যান্য বক্সের আগে বড় uuid বক্স সহ ফাইল কাজ করে।
    • MP4: MP4 কন্টেনারে ভার্সেটাইল ভিডিও কোডিং (VVC) ট্র্যাকের জন্য সহায়তা যোগ করা হয়েছে।
  • ইন্সপেক্টর:
    • ব্রেকিং পরিবর্তন: FrameExtractor সরিয়ে দিন। ব্যবহারকারীদের এখন নতুন :media3-inspector-frame মডিউলের উপর নির্ভর করতে হবে এবং androidx.media3.inspector.frame.FrameExtractor-এ ইমপোর্ট আপডেট করতে হবে।
    • ডিকোড করা ভিডিও ফ্রেম এক্সট্র্যাক্ট ও প্রসেস করার জন্য নতুন মডিউল নিয়ে আসা।
  • অডিও:
    • IAMF ডিকোডার এক্সটেনশনের জন্য অন্তর্নিহিত ডিকোডিং লাইব্রেরি libiamf থেকে iamf_tools-এ পরিবর্তন করুন।
    • IAMF ডিকোডিং ডিকোডারের মাধ্যমে (IAMF ডিকোডার এক্সটেনশন ব্যবহার করার সময়) অথবা Android স্পেশিয়ালাইজারের মাধ্যমে বাইনরাল আউটপুট সাপোর্ট করে।
    • অটোমোটিভ পরিস্থিতিতে 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' (#2997) ডিসকন্টিনিউটি কারণে, একটি নির্দিষ্ট মিডিয়া আইটেম ইনডেক্স থেকে একই মিডিয়া আইটেমের অন্য ইনডেক্সে প্লেব্যাক ট্রানজিশন করার সময় এই সমস্যা দেখা যেত।
    • সিস্টেম UI বোতাম প্লেসমেন্ট সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে Android Auto-এর মতো অন্যান্য UI সারফেস বা প্রস্তুতকারকদের জন্য এই সমাধান প্রয়োজন নেই (#3041)।
    • সাবস্ক্রিপশনের অ্যাক্সেস সিঙ্ক না হওয়ার সমস্যার সমাধান করা হয়েছে (#3056)।
    • API 29-এ SysUI সংক্রান্ত সমস্যার সমাধান, যেখানে নির্দিষ্ট সাইজের মিডিয়া সেশন আর্টওয়ার্ক SysUI ক্র্যাশ করতে পারে এবং ডিভাইস রিবুট করতে বাধ্য করতে পারে (#3118)।
    • Android Q-তে বিজ্ঞপ্তি আর্টওয়ার্ক আইকন স্কেলিং সংক্রান্ত সমস্যার সমাধান করা (#৩০৮৪)।
  • UI:
    • প্লেব্যাক স্পিড দেখাতে ও পরিবর্তন করতে media3-ui-compose-এ PlaybackSpeedControl কম্পোজেবল যোগ করুন।
    • প্লেব্যাক স্পিড কন্ট্রোল করার জন্য media3-ui-compose-material3-এ PlaybackSpeedToggleButton কম্পোজেবল যোগ করুন।
    • প্লেয়ারের প্রোগ্রেস দেখাতে এবং টেনে এনে ও ট্যাপ করে (#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 এক্সটেনশন:
    • এমন সমস্যার সমাধান করা হয়েছে যেখানে ট্র্যাকের সেগমেন্টের শুরুর সময় সারিবদ্ধ না থাকার কারণে প্লেব্যাক শুরু হওয়ার সময় দেরি হয় বা স্যাম্পেল মিস হয়ে যায় (#৩০৫৭)।
    • ইনব্যান্ড EMSG v0 মেটাডেটার টাইমস্ট্যাম্প সঠিকভাবে সেট না হওয়ার সমস্যা সমাধান করা হয়েছে (#৩০২৪)।
  • 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-এ নিম্নলিখিত কমিট রয়েছে।

  • প্রভাব:
    • সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময় GL_DRAW_BUFFER এবং GL_READ_BUFFER স্পষ্টভাবে সেট করুন।

১.৯.৩

১৬ মার্চ, ২০২৬

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

  • অডিও:
    • কম্প্রেসড অফলোড মোডে গ্যাপলেস অডিওর প্লেলিস্ট চালানোর সময় প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।

১.৯.২

৬ ফেব্রুয়ারি, ২০২৬

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

  • ExoPlayer:
    • ProgressiveMediaSource প্লেয়ারে পুরনো টাইমলাইন তথ্য প্রচার করে এবং সারিবদ্ধ সময়কাল অপ্রত্যাশিতভাবে মুছে যায় (#3016) এই সমস্যার সমাধান করুন।
  • সেশন:
    • সিস্টেম UI বোতাম প্লেসমেন্ট সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যেখানে Android Auto-এর মতো অন্যান্য UI সারফেস বা প্রস্তুতকারকদের জন্য এই সমাধান প্রয়োজন নেই (#3041)।
  • কাস্ট এক্সটেনশন:
    • Cast থেকে লোকাল প্লেব্যাকে ট্রান্সফার করার সময় যে সমস্যা হচ্ছিল তা সমাধান করা হয়েছে।

১.৯.১

২৬ জানুয়ারি, ২০২৬

ভার্সন 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 এর একটি অতিরিক্ত আর্গুমেন্ট যোগ করুন (#2950).
  • RTSP এক্সটেনশন:
    • টাইমস্ট্যাম্প সহ RTP প্যাকেট সঠিকভাবে ম্যানেজ করুন যা র‍্যাপ করা থাকে (#২৯৩০)।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1 ইত্যাদি):
    • প্রথম ভিডিও ফ্রেম প্রসেস করার আগে খোঁজার সময় সম্ভাব্য NullPointerException সংক্রান্ত সমস্যার সমাধান করুন (#২৯৬৫)।
  • কাস্ট এক্সটেনশন:
    • প্লেলিস্ট পরিবর্তন করার সময় RemoteCastPlayer টাইমলাইন সঠিকভাবে আপডেট হতে না দেওয়ার সমস্যা সমাধান করুন।

১.৯.০

১৭ ডিসেম্বর, ২০২৫

  • কমন লাইব্রেরি:
    • অন্যান্য AndroidX লাইব্রেরির সাথে সামঞ্জস্য রেখে minSdk থেকে 23-এ আপডেট করুন।
    • PlayerTransferState যোগ করুন, যা Player ইনস্ট্যান্স জুড়ে প্লেব্যাক স্টেট ট্রান্সফার করার সুবিধা প্রদান করে।
    • প্লেয়ারে void mute() এবং void unmute() পদ্ধতি যোগ করুন যা প্লেয়ারের ভলিউম শূন্যে সেট করার আগে এবং পরে সংরক্ষণ করে এবং ফলস্বরূপ রিস্টোর করে।
    • অন্যান্য প্লেয়ারের জন্য আবার ব্যবহার করার অনুমতি দিতে ExoPlayer-এর দ্বারা আগে ইন্টার্নালি ব্যবহার করা ইউটিলিটি ক্লাস WakeLockManager, WifiLockManager, AudioFocusManager, AudioBecomingNoisyManager এবং StuckPlayerDetector প্রকাশ করুন (#১৮৯৩)।
    • অন্তর্নিহিত ডেলিগেট প্লেয়ার লিসনার ইনস্ট্যান্স তুলনা করার জন্য রেফারেন্স ইকুয়ালিটি ব্যবহার করলে, 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-এ প্রি-ক্যাশিং কার্যকারিতা যোগ করুন। অ্যাপ এখন TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)-এর মাধ্যমে DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) বা DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) ফেরত দিতে পারে যাতে বোঝা যায় যে মিডিয়া আইটেম প্রি-ক্যাশে করতে হবে।
    • শর্টফর্ম ডেমো অ্যাপে 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-এ সোর্সের জন্য মোট বাফার বাইট কন্ট্রোল করার জন্য সহায়তা যোগ করুন যাতে প্রিলোডিংয়ের জন্য মোট বাফার বাইট যথেচ্ছভাবে বৃদ্ধি না পায়। ডিফল্ট কন্ট্রোল লজিক ব্যবহার করতে, অ্যাপ DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)-এর মাধ্যমে PlayerId.Preload.name ("প্রিলোড")-এর playerName-এর জন্য প্রিলোড করার টার্গেট বাফার বাইট সেট করতে পারে এবং 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 টাইপে পরিবর্তন করুন, যাতে অতিরিক্ত ঐচ্ছিক তথ্য রিটার্ন করা যায়। এটি একটি সোর্স ব্রেকিং পরিবর্তন, তবে রিটার্ন করার আগে new Response-এর সাথে আগের byte[] রিটার্ন ভ্যালু র‍্যাপ করে সহজেই ব্রেকিং পরিবর্তন সমাধান করা যেতে পারে।
    • URL ও লেটেন্সির মতো মূল অনুরোধের তথ্য AnalyticsListener.onDrmKeysLoaded (#১০০১)-এ যোগ করুন।
    • URL প্যারামিটার থেকে POST বডিতে প্রভিশনিং অনুরোধের ডেটা সরান।
  • প্রভাব:
    • Presentation-কে একটি সাইডের দৈর্ঘ্য দিয়ে তৈরি করা হলে, সেট না করা আউটপুট সাইডকে রাউন্ড করতে Presentation.copyWithUnsetSideRoundedTo যোগ করুন।
  • Muxers:
    • MediaMuxerCompat যোগ করুন, ফ্রেমওয়ার্ক MediaMuxer-এর জন্য ড্রপ-ইন রিপ্লেসমেন্ট।
    • মোশন ফটো তৈরি করার অনুমতি দিতে MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo() যোগ করুন।
    • OPUS, VORBIS, VP8 এবং VP9 মিডিয়া স্ট্রিমকে webm ফাইল ফর্ম্যাটে মিক্স করার অনুমতি দিতে WebmMuxer যোগ করুন।
  • IMA এক্সটেনশন:
    • কাস্টম proguard নিয়ম সরিয়ে দেওয়া, যাতে অ্যাপ 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 আপডেট করুন (#২৫৪২)।
    • বিজ্ঞপ্তি আপডেট ম্যানুয়ালি ট্রিগার করতে 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 Composable, media3-ui-compose মডিউলে যোগ করুন। এই স্টেট হোল্ডার demo-compose-এ প্রোগ্রেস দেখানোর জন্য ব্যবহার করা হয় যা একটি অনুভূমিক কেবল পঠনযোগ্য প্রোগ্রেস বার হিসেবে দেখানো হয়।
    • media3-ui-compose-এ ContentFrame কম্পোজেবল যোগ করুন যা অ্যাস্পেক্ট রেশিও রিসাইজ করা এবং শাটার দিয়ে কভার করার সাথে PlayerSurface ম্যানেজমেন্টকে একত্রিত করে।
    • AndroidView কম্পোজের মধ্যে SurfaceView ব্যবহার করার সময় ভিডিও স্ট্রেচ/ক্রপ হয়ে যাওয়ার মতো API 34 প্ল্যাটফর্মের পরিচিত সমস্যার সমাধান করা হয়েছে। এর ফলে SURFACE_TYPE_SURFACE_VIEW সহ ContentFrame এবং PlayerSurface কম্পোজেবল প্রভাবিত হচ্ছিল (#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 ম্যানিফেস্টের মাধ্যমে DASH স্ট্রিম চালানোর সময় UnsupportedOperationException সমস্যার সমাধান করা হয়েছে (#2688)।
    • LiveConfiguration-কে MediaItem-এর মাধ্যমে প্রদান করা ভ্যালুতে রিসেট করুন DashMediaSource-এর যখন রিলিজ করা হয় এবং যখন মিডিয়া আইটেম ব্যবহারকারীর মাধ্যমে আপডেট করা হয় (#২৬০৬)।
    • প্লেয়ারের সমস্যা হিসেবে রিপোর্ট করা হয়নি এমন ভুল ম্যানিফেস্ট আপডেট করার কারণে ক্র্যাশ হওয়া এড়িয়ে চলুন (#২৮০৫)।
  • 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-এর ধরন এনফোর্স করা বন্ধ করুন।
    • DefaultCastOptionsProvider#toMediaQueueItem-এ ব্যবহার করার জন্য Cast MEDIA_TYPE অনুমান করতে MediaItem.mediaMetadata.mediaType ব্যবহার করুন, যখন উপলভ্য থাকে।
    • DefaultCastOptionsProvider-এ রিমোট থেকে লোকাল ট্রান্সফার চালু করুন।
    • সেশন ডেমোতে Cast-এর জন্য সহায়তা যোগ করুন।
    • Composable 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন ১.৮.০

১.৮.১

২১ মে, ২০২৬

ভার্সন ১.৮.১-এ নিম্নলিখিত কমিট রয়েছে।

  • প্রভাব:
    • সারফেসলেস কনটেক্সট থেকে ট্রানজিশন করার সময় GL_DRAW_BUFFER এবং GL_READ_BUFFER স্পষ্টভাবে সেট করুন।

ভার্সন ১.৮.০

৩০ জুলাই, ২০২৫

ভার্সন 1.8.0-এ এইসব কমিট আছে।

  • কমন লাইব্রেরি:
    • ForwardingSimpleBasePlayer-এ প্লেয়ার পরিবর্তন করার জন্য সহায়তা যোগ করুন।
  • ExoPlayer:
    • ExoPlayer ইন্টারফেসে শাফেল মোডের জন্য গেটার যোগ করুন (#২৫২২)।
    • একাধিক থ্রেড থেকে DefaultAudioSink অ্যাক্সেস করা হলে আরও স্পষ্টভাবে একটি ব্যতিক্রম থ্রো করুন। প্লেয়ারের বাইরে RendererCapabilities.getFormatSupport-এ কল করার কারণে এটি হলে, ExoPlayer-এর প্লেব্যাক থ্রেডের মতো একই থ্রেডে এই মেথড কল করতে ভুলবেন না অথবা প্লেব্যাকের জন্য ব্যবহৃত ইনস্ট্যান্সের থেকে আলাদা ইনস্ট্যান্স ব্যবহার করুন (#১১৯১)।
    • টিভিতে নন-স্টিরিও অডিও ফর্ম্যাট DefaultTrackSelector-এর দ্বারা কাজ করে না হিসেবে চিহ্নিত হতে পারে, এই সমস্যার সমাধান করা হয়েছে।
    • MediaCodec-এর DECODE_ONLY ফ্ল্যাগ (যা স্ক্রাবিং মোডে ডিফল্ট হিসেবে চালু থাকে) ব্যবহার করার সময় শেষ ফ্রেমটি সঠিকভাবে রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করুন।
    • Context থেকে ExoPlayer.Builder-এ পাস করা ভার্চুয়াল ডিভাইস আইডি ব্যবহার করার জন্য সহায়তা যোগ করুন।
    • স্ক্রাবিং মোডে ডিফল্ট হিসেবে ডায়নামিক শিডিউলিং চালু করুন।
    • কোনও আইটেমের শেষ পর্যন্ত সিক করার সময় সোর্স অপ্রয়োজনীয়ভাবে রিলোড করা এড়িয়ে চলুন।
    • স্ক্রাবিং মোডে ডিফল্ট হিসেবে MediaCodec.BUFFER_FLAG_DECODE_ONLY ব্যবহার করুন।
    • PreloadMediaSource যখন ExoPlayer দ্বারা প্লেব্যাক থ্রেডের সাথে চালানো হয়, তখন IllegalStateException থ্রো করুন, যা প্রিলোড থ্রেডের থেকে আলাদা (#২৪৯৫)।
    • ডিফল্ট প্রয়োগের সাথে 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 Ultra HDR ইমেজের (#২৪১৭) জন্য যথেষ্ট।
    • PreCacheHelper যোগ করুন যা অ্যাপকে নির্দিষ্ট শুরুর অবস্থান এবং সময়কাল সহ একটি মিডিয়া প্রি-ক্যাশে করার অনুমতি দেয়।
    • DefaultPreloadManager-এ নির্দিষ্ট পজিশন থেকে প্রিলোড করার সুবিধা যোগ করুন।
  • ট্রান্সফর্মার:
    • CodecDbLite যোগ করুন যা ভিডিও এনকোডিং সেটিংসের চিপসেট নির্দিষ্ট অপ্টিমাইজেশন চালু করে।
    • CodecDB Lite সেটিংস অপ্টিমাইজেশন চালু করতে DefaultEncoderFactory-এ setEnableCodecDbLite ফ্ল্যাগ যোগ করুন। ডিফল্ট হিসেবে, এই ফ্ল্যাগ false-এ সেট করা থাকে।
    • প্রাথমিক গ্যাপ (addGap()-এর মাধ্যমে যোগ করা হয়েছে) সাইলেন্ট অডিও দিয়ে পূরণ করতে এখন EditedMediaItemSequence.Builder-এ experimentalSetForceAudioTrack(true) স্পষ্টভাবে সেট করতে হবে। ক্রমের মাঝখানে ফাঁক থাকলে, এই ফ্ল্যাগ প্রয়োজন নেই।
    • Muxer ইন্টারফেস media3-transformer থেকে media3-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 ফাইলে খালি সিক টেবিল (শুধুমাত্র প্লেসহোল্ডার সিক পয়েন্ট সহ) উপেক্ষা করুন এবং ফাইলের সময়সীমা জানা থাকলে বাইনারি সার্চ সিকিংয়ে ফিরে যান (#২৩২৭)।
    • অচেনা SEI টাইপ সম্পূর্ণভাবে এড়িয়ে যেতে H.265 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 সর্বজনীন করুন (#2339)।
    • AudioTrackPositionTracker-এ AudioTrack#getUnderrunCount() ব্যবহার করুন যাতে সেরা-প্রচেষ্টা অনুমানের পরিবর্তে DefaultAudioSink-এ আন্ডাররান শনাক্ত করা যায়।
    • অডিও আউটপুট ডিভাইস থেকে অপ্রত্যাশিত পজিশন ড্রিফ্টের জন্য অডিও টাইমস্ট্যাম্প স্মুদিং উন্নত করুন।
    • ব্লুটুথ ডিভাইসের সাথে কানেক্ট করার সময় পজ থেকে আবার চালু করার পরে প্রথম ১০ সেকেন্ডের জন্য A/V সিঙ্ক ভেঙে যাওয়ার সমস্যা সমাধান করুন।
    • AnalyticsListener.onAudioPositionAdvancing-এ অডিও অ্যাডভান্সিং শুরু হওয়ার সময় রিপোর্ট না করে প্রথম পরিমাপের সময় রিপোর্ট করার সমস্যা সমাধান করা হয়েছে।
    • কিছু ডিভাইসে স্টেরিও অডিওতে ফলব্যাক করার পরে মাল্টিচ্যানেল অডিওতে রিকভারি ঠিক করা হয়েছে (#২২৫৮)।
  • ভিডিও:
    • "lenovo" এবং "motorola" ডিভাইসে ডিটাচ করা সারফেস ওয়ার্কঅ্যারাউন্ড এক্সটেন্ড করুন (#২০৫৯)।
    • অডিও স্যাম্পেল ঠিক অনুরোধ করা পজিশনে শুরু না হলে, স্টার্টআপে স্মুথ ভিডিও ফ্রেম রিলিজ উন্নত করুন।
    • "realme" ডিভাইসে ডিটাচ করা সারফেস ওয়ার্কঅ্যারাউন্ড এক্সটেন্ড করুন (#২০৫৯)।
    • ডিকোড-অনলি ইনপুট বাফার কিউতে রাখার সময় MediaCodec.BUFFER_FLAG_DECODE_ONLY ফ্ল্যাগ অন্তর্ভুক্ত করতে এক্সপেরিমেন্টাল ExoPlayer API যোগ করুন। এই ফ্ল্যাগ ডিকোডারকে ডিকোড-অনলি বাফার এড়িয়ে যাওয়ার সিগন্যাল দেবে যার ফলে আরও দ্রুত খোঁজা যাবে। DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag-এর মাধ্যমে এটি চালু করুন। * সফ্টওয়্যার ভিডিও কোডেকগুলির জন্য কোডেক পারফরম্যান্স চেক উন্নত করুন। এর ফলে আরও কিছু ট্র্যাক EXCEEDS_CAPABILITIES হিসেবে চিহ্নিত হতে পারে।
    • কিছু ডিভাইসে VP9 Widevine প্লেব্যাক সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২৪০৮)।
  • টেক্সট:
    • MP4 ফাইলে VobSub ট্র্যাকের জন্য সহায়তা যোগ করা (#২৫১০)।
    • সাবটাইটেল সেগমেন্ট প্রথমে লোড না হয়ে পরে লোড হলে এবং তারপরে একাধিক খালি সাবটাইটেল সেগমেন্ট থাকলে, প্লেব্যাক স্টল সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#২৫১৭)।
    • সাবটাইটেল চালু করার সময় প্রোগ্রেস-ইন কিউ দেখানোর জন্য 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 হচ্ছিল (#2265)।
    • মিডিয়া আইটেম প্রস্তুত বা প্লে না করেই প্লেয়ার সেট-আপ করা হলে অটোমেটিক বিজ্ঞপ্তি দেখাবেন না (#২৪২৩https://github.com/androidx/media/issues/2423)। এই আচরণ MediaSessionService.setShowNotificationForIdlePlayer-এর মাধ্যমে কনফিগার করা যায়।
    • সব বা বেছে নেওয়া কন্ট্রোলারের জন্য কাস্টম PlaybackException যোগ করুন।
    • MediaController-এ লাইভ স্ট্রিম খোঁজার সময় IllegalArgumentException-এর কারণে হওয়া সমস্যার সমাধান করুন।
    • লাইভ স্ট্রিমের জন্য, প্লেব্যাক পজিশন প্রকাশ করা বন্ধ করুন এবং প্ল্যাটফর্ম মিডিয়া কন্ট্রোলারের জন্য বর্তমান আইটেমে খোঁজার ক্ষমতা, যাতে Android Auto UI-তে পজিশন আর্টিফ্যাক্ট এড়ানো যায় (এবং অন্যান্য কন্ট্রোলার প্ল্যাটফর্ম মিডিয়া সেশন থেকে এই তথ্য ব্যবহার করে) (#১৭৫৮)।
    • একটি সমস্যা সমাধান করুন যেখানে একটি MediaBrowser-এর getLibraryRoot-এ নাল পাস করা একটি লিগ্যাসি MediaBrowserServiceCompat-এর সাথে কানেক্ট করা একটি NullPointerException তৈরি করেছে।
    • কাস্টম অ্যাকশন, সার্চ ফলাফল বা getItem অনুরোধ পাঠানোর সময় ClassNotFoundException-এর সাথে লিগ্যাসি সেশন অ্যাপ ক্র্যাশ করার সমস্যা সমাধান করা হয়েছে।
    • প্ল্যাটফর্ম সেশনের MediaMetadata-এ MediaItem.LocalConfiguration.uri শেয়ার করার সময় হওয়া সমস্যার সমাধান করুন। কন্ট্রোলারকে মিডিয়ার জন্য আবার অনুরোধ করার অনুমতি দিতে, ইচ্ছাকৃতভাবে 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 (ফর্ম ফিড) গ্রহণ করার জন্য প্লেলিস্ট পার্সিং ঠিক করুন (#২৪২০)।
    • একই আইডি দিয়ে ইন্টারস্টিশিয়াল আপডেট করার সুবিধা (#২৪২৭)।
    • প্লেলিস্ট লোড করার সময় হওয়া সমস্যা কখনও কখনও লাইভ স্ট্রিম লোড করার জন্য সেগমেন্ট শেষ হয়ে যাওয়ার পরে আর দেখা যায় না, এই সমস্যার সমাধান করা হয়েছে (#২৪০১https://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 স্টেবল ভার্সন ব্যবহার করুন।

Version 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

ভার্সন ১.৭.১

১৬ মে, ২০২৫

This release has the same code as 1.6.1 and is being released to ensure it appears as a 'newer' release than 1.7.0, which was an alpha release accidentally tagged as stable (see below).

ভার্সন ১.৭.০

১৬ মে, ২০২৫

এই রিলিজটি 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:
    • পরবর্তী মিডিয়া আইটেম শুরু করার সময় রিকভার করা যায় এমন রেন্ডারার সমস্যার কারণে মিডিয়া আইটেম ট্রানজিশন না হওয়ার সমস্যার সমাধান করা হয়েছে (#2229)।
    • 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 (#2305) নীরবে উপেক্ষা করা হয়।
  • UI:
    • ExoPlayer.setVideoEffects এবং CompositionPlayer-এর সাথে কাজ করার জন্য PlayerSurface চালু করুন।
    • PlayerSurface-কে নতুন Player-এর সাথে রিকম্পোজ করা যাচ্ছে না, এই সমস্যার সমাধান করুন।
  • HLS এক্সটেনশন:
    • HLS মিডিয়ার জন্য CmcdData-এ চাঙ্ক ডিউরেশন সেট না হওয়ার সমস্যা সমাধান করা হয়েছে, যার ফলে এনক্রিপ্ট করা মিডিয়া সেগমেন্ট প্রসেস করার সময় অ্যাসারশন ফেল করে (#2312)।
  • RTSP এক্সটেনশন:
    • TCP ব্যবহার করার জন্য RTSP সেশন কনফিগার করার উপায় হিসেবে RTSPT স্কিম সহ URI-এর জন্য সহায়তা যোগ করুন (#১৪৮৪)।
  • কাস্ট এক্সটেনশন:
    • প্লেলিস্ট মেটাডেটার জন্য সহায়তা যোগ করুন (#২২৩৫)।

1.6.0

২৬ মার্চ, ২০২৫

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-এ বাগ ঠিক করুন যেখানে setPlaylist-এর পরে State-এ নতুন currentMediaItemIndex সেট করা হলে null MediaMetadata-এর সাথে মেটাডেটা আবার মূল্যায়ন করে না (#১৯৪০)।
    • অন্যান্য ক্লাসে আপডেট ম্যানেজ করা আরও সহজ করতে SimpleBasePlayer.State অ্যাক্সেস সুরক্ষিত থেকে সর্বজনীন করুন (#2128)।
  • ExoPlayer:
    • MediaExtractorCompat যোগ করুন, এটি একটি নতুন ক্লাস যা প্ল্যাটফর্ম MediaExtractor-এর সমতুল্য ফিচার প্রদান করে।
    • MediaCodecVideoRenderer ব্যবহার করে প্লেব্যাকের জন্য এক্সপেরিমেন্টাল 'ExoPlayer' প্রি-ওয়ার্মিং সাপোর্ট যোগ করুন। ExoPlayer-এ সেকেন্ডারি MediaCodecVideoRenderer প্রদান করতে আপনি experimentalSetEnableMediaCodecVideoRendererPrewarming-এর মাধ্যমে DefaultRenderersFactory কনফিগার করতে পারবেন। চালু করা থাকলে, মিডিয়া আইটেম ট্রানজিশন লেটেন্সি কমাতে প্লেব্যাক চলাকালীন 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)-এর সাথে Transformer-এর জন্য প্ল্যাটফর্ম ডায়াগনস্টিকসে কন্ট্রিবিউট করা থেকে অ্যাপ অপ্ট-আউট করতে পারে।
    • InAppMuxer-কে InAppMp4Muxer ও InAppFragmentedMp4Muxer-এ ভাগ করুন। আপনি InAppMp4Muxer ব্যবহার করে ফ্র্যাগমেন্টেড নয় এমন MP4 ফাইল তৈরি করেন, যেখানে InAppFragmentedMp4Muxer ব্যবহার করে ফ্র্যাগমেন্টেড MP4 ফাইল তৈরি করা হয়।
    • Muxer ইন্টারফেস media3-muxer থেকে media3-transformer-এ সরান।
    • 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-এর সাথে কনফিগার করা সব সাবটাইটেল ফাইল আগ্রহের সাথে লোড করা বন্ধ করুন এবং পরিবর্তে ট্র্যাক বেছে নেওয়ার মাধ্যমে বেছে নেওয়া হলে শুধুমাত্র একটি লোড করুন (#১৭২১)।
    • 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 থ্রো করে (#9760)।
  • 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(), Transformer.start()-এ পাস করা EditedMediaItem-কে ফ্ল্যাটেন করতে EditedMediaItem.Builder.setFlattenForSlowMotion() ব্যবহার করুন।
      • 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 স্টেবল ভার্সন ব্যবহার করুন।

Version 1.6.0-alpha01

২০ ডিসেম্বর, ২০২৪

1.6.0 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন ১.৫

ভার্সন ১.৫.১

১৯ ডিসেম্বর, ২০২৪

androidx.media3:media3-*: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)-এ ব্লকিং কল স্থগিত করুন। This ensures the blocking call isn't done if audio focus handling is not enabled (#১৬১৬).
    • লোড করা না গেলে বাফার করা সময়সীমা নির্বিশেষে প্লেব্যাক করার অনুমতি দিন (#1571)।
    • 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-এ একটি সেটার যোগ করুন যাতে শেষ আপডেটের পর থেকে অতিবাহিত হওয়া সর্বোচ্চ সময় সেট করা যায়, যার পরে ক্লায়েন্ট আবার শুরু করা হয় (#1794)।
  • ট্রান্সফর্মার:
    • SurfaceAssetLoader যোগ করুন, যা Surface-এর মাধ্যমে Transformer-এ ভিডিও ডেটা কিউতে যোগ করার সুবিধা দেয়।
    • 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} (#১৫৬৩) সহ ব্যর্থ হওয়ার পরিবর্তে MP3 ডেটার শেষে প্লেব্যাক বন্ধ করুন।
    • MP4 ফাইলে এডিট লিস্ট প্রসেস করার সময় নন-কীফ্রেম মিডিয়া শুরুর পজিশনের জন্য প্রিরোল স্যাম্পেল হ্যান্ডলিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১৬৫৯)।
    • Mp4Extractor ও FragmentedMp4Extractor-এ mdhd বক্স থেকে মিডিয়ার সময়সীমা ব্যবহার করে ফ্রেম রেট গণনা উন্নত করা হয়েছে (#১৫৩১)।
    • MP4 এডিট লিস্টে media_time-এর ভুল স্কেলিং ঠিক করা হয়েছে। মুভি টাইমস্কেল ব্যবহার করে segment_duration আগে থেকেই সঠিকভাবে স্কেল করা থাকলেও, media_time এখন ট্র্যাক টাইমস্কেল ব্যবহার করে সঠিকভাবে স্কেল করা হয়েছে, যেমনটি MP4 ফর্ম্যাট স্ট্যান্ডার্ড (#1792) দ্বারা নির্দিষ্ট করা হয়েছে।
    • এডিট লিস্ট (#১৭৯৭) সহ MP4-এর জন্য endIndices গণনায় আউট-অফ-অর্ডার ফ্রেম ম্যানেজ করুন।
    • -1 ভ্যালু (#১৮১৯) ম্যানেজ করতে MP4 ফাইলের mdhd বক্সে মিডিয়া ডিউরেশন পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
    • H.263 ভিডিওর জন্য MP4 ফাইলে h263 বক্স শনাক্ত করার জন্য সহায়তা যোগ করুন (#১৮২১)।
    • AC-4 লেভেল-৪ ISO বেস মিডিয়া ফাইল ফর্ম্যাট সাপোর্ট যোগ করা হয়েছে (#১২৬৫)।
  • DataSource:
    • API লেভেল ৩৪-এর পরিবর্তে ভার্সন S এক্সটেনশন ৭ থেকে শুরু করে ব্যবহার করার অনুমতি দিতে HttpEngineDataSource আপডেট করুন (#১২৬২)।
    • DataSourceContractTest: DataSource.getUri() যে সমাধান করা URI (ডকুমেন্ট করা অনুযায়ী) ফেরত দেয় তা নিশ্চিত করুন। যেখানে এটি অনুরোধ করা URI-এর থেকে আলাদা, সেখানে টেস্টগুলি নতুন DataSourceContractTest.TestResource.Builder.setResolvedUri() পদ্ধতি ব্যবহার করে এটি নির্দেশ করতে পারে।
    • DataSourceContractTest: open()-এ কল করার চেষ্টা ব্যর্থ হওয়ার পরে ('খুঁজে পাওয়া যায়নি' রিসোর্সের কারণে) এবং পরবর্তী close() কল করার আগে DataSource.getUri() এবং getResponseHeaders() তাদের 'খোলা' ভ্যালু ফিরিয়ে দেয় বলে দাবি করুন।
      • DataSourceContractTest.getNotFoundResources() ওভাররাইড করলে টেস্ট সাব-ক্লাস একাধিক 'খুঁজে পাওয়া যায়নি' রিসোর্স প্রদান করতে পারে এবং প্রত্যাশিত যেকোনও হেডারও প্রদান করতে পারে। এটি HTTP 404 (হেডার সহ) এবং "সার্ভার খুঁজে পাওয়া যায়নি" (হেডার ছাড়া) এর মধ্যে পার্থক্য করতে সাহায্য করে।
  • অডিও:
    • মিডিয়াতে CTA-2075 লাউডনেস মেটাডেটা থাকলে, কোডেকে তা অটোমেটিক কনফিগার করুন।
    • সিক করার সময় ভলিউম যেন মসৃণভাবে কমে যায় তা নিশ্চিত করুন।
    • সিক করার সময় পপ সাউন্ডের সমস্যা সমাধান করুন।
    • Sonic-এর টাইম-স্ট্রেচিং/পিচ-শিফ্টিং অ্যালগরিদমের জন্য ট্রাঙ্কেশন সংক্রান্ত সমস্যার অ্যাকুমুলেশন ঠিক করুন।
    • SpeedChangingAudioProcessor-এ বাগ সংক্রান্ত সমস্যার সমাধান করুন যার কারণে আউটপুট ফ্রেম ড্রপ হয়।
  • ভিডিও:
    • MediaCodecVideoRenderer এমন স্যাম্পেল ডিকোড করা এড়িয়ে যায় যেগুলি রেন্ডার করা হয়নি বা অন্য স্যাম্পেল দ্বারা রেফারেন্স হিসেবে ব্যবহার করা হয়নি।
    • API 35 ও তার পরবর্তী ভার্সনে, MediaCodecAdapter এখন null Surface configure-এ পেতে পারে এবং নতুন পদ্ধতি detachOutputSurface-এ কল করতে পারে যাতে কোডেক এটি (MediaCodecInfo.detachedSurfaceSupported) সাপোর্ট করলে আগে সেট করা Surface সরানো যায়।
    • onOutputFormatChanged প্রসেস করার সময় MediaCodecAdapter-এর দেওয়া পিক্সেল অ্যাস্পেক্ট রেশিওর ভ্যালু ব্যবহার করুন (#১৩৭১)।
    • Galaxy Tab S7 FE-তে ডিভাইস সংক্রান্ত সমস্যার জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন যার ফলে 60fps নিরাপদ H264 স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয় (#১৬১৯)।
    • শেষ স্যাম্পেলের পরে এন্ড-অফ-স্ট্রিম সিগন্যাল না ফিরিয়ে আটকে যাওয়া কোডেকগুলির জন্য ওয়ার্কঅ্যারাউন্ড যোগ করুন।
  • টেক্সট:
    • একটি কাস্টম VoiceSpan যোগ করুন এবং WebVTT ভয়েস স্প্যান-এর জন্য এটি পপুলেট করুন (#1632)।
    • 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, লিগ্যাসি পরিষেবার মাধ্যমে ফেরত পাঠানো প্রকৃত রিটার্ন ভ্যালু রিসিভ করতে পারেনি (#1474)।
    • মিডিয়া বোতাম ইনটেন্টের (#১৭৩০) জন্য ব্রডকাস্ট রিসিভার সেট করার সময় নির্দিষ্ট কিছু প্রস্তুতকারকের ডিভাইসের মাধ্যমে থ্রো করা IllegalArgumentException ম্যানেজ করুন।
    • মিডিয়া আইটেমের জন্য কমান্ড বোতাম যোগ করুন। এটি Media3 API যোগ করে যা MediaBrowserCompat সহ লিগ্যাসি লাইব্রেরির সাথে Custom browse actions হিসেবে পরিচিত ছিল। মনে রাখবেন, Media3-এর সাথে মিডিয়া আইটেমের জন্য কমান্ড বোতাম MediaBrowser এবং MediaController, দুটির জন্যই উপলভ্য। আরও দেখুন কাস্টম ব্রাউজ অ্যাকশন প্রয়োগ করুন। * Media3 কন্ট্রোলার কখনও কখনও play()-এর অনুরোধ করার পরে সেশন অ্যাপকে ফোরগ্রাউন্ড সার্ভিস চালু করতে না দেওয়ার সমস্যা সমাধান করা হয়েছে।
    • CommandButton.Builder.setIconUri-কে শুধু কন্টেন্ট Uri গ্রহণ করার জন্য সীমাবদ্ধ করুন।
    • পুরনো MediaBrowserCompat-এর সাথে কানেক্ট করার সময়, Media3 ব্রাউজারের কানেকশন সংক্রান্ত ইঙ্গিত প্রাথমিক MediaBrowserCompat-এ পাস করুন। onGetRoot()-এ প্রথম কলের সাথে রুট হিন্ট হিসেবে পাস করা কানেকশন হিন্ট পরিষেবাটি পেতে পারে।
    • ব্রাউজার parentid-এ সাবস্ক্রাইব করার পরে, পুরনো ব্রাউজার পরিষেবার সাথে কানেক্ট করা MediaBrowser, পরিষেবার পাঠানো কোনও ত্রুটি পায়নি, এই সমস্যার সমাধান করুন।
    • ইন্টারঅপারেবিলিটি আচরণ উন্নত করুন, যাতে একটি Media3 ব্রাউজার যা একটি লিগ্যাসি MediaBrowserService-এর সাথে কানেক্ট করা আছে সেটি একটি parentId-এর চাইল্ডকে দুবার অনুরোধ না করে যখন একটি পেরেন্টকে সাবস্ক্রাইব করে।
  • UI:
    • XML-ভিত্তিক শেয়ার করা ট্রানজিশনে সমস্যার কারণে PlayerView-in-Compose-AndroidView ওয়ার্কঅ্যারাউন্ডে স্ট্রেচ/ক্রপ করা ভিডিও চালু করুন। PlayerView ব্যবহার করা অ্যাপের AndroidView ভিতরে PlayerView.setEnableComposeSurfaceSyncWorkaround-এ কল করতে হবে যাতে অপ্ট-ইন করা যায় (#১২৩৭, #১৫৯৪)।
    • চাহিদা অনুযায়ী ফুলস্ক্রিন বোতামের আইকন আপডেট করার অনুমতি দিতে PlayerView-এ setFullscreenButtonState যোগ করুন, অর্থাৎ আউট-অফ-ব্যান্ড এবং ক্লিক ইন্টার‍্যাকশনে প্রতিক্রিয়াশীল নয় (#১৫৯০, #১৮৪)।
    • অ্যাপ-নির্ধারিত টেক্সট ট্র্যাক বেছে নেওয়ার পছন্দ থাকলে, টেক্সট বেছে নেওয়ার ক্ষেত্রে "কোনওটিই নয়" বিকল্প কাজ না করার সমস্যার সমাধান করুন।
  • DASH এক্সটেনশন:
    • সেগমেন্টের মাঝখানে শুরু হওয়া পিরিয়ডের জন্য সহায়তা যোগ করুন (#১৪৪০)।
  • স্মুথ স্ট্রিমিং এক্সটেনশন:
    • টেক্সট ট্র্যাক সহ SmoothStreaming স্ট্রিম চালানোর সময় Bad magic number for Bundle সমস্যার সমাধান করা হয়েছে (#১৭৭৯)।
  • RTSP এক্সটেনশন:
    • এনকোড করা @ অক্ষর আছে এমন URL-এর জন্য ব্যবহারকারীর তথ্য সরিয়ে দেওয়ার সমস্যার সমাধান করা (#১১৩৮)।
    • হেডার এক্সটেনশন সহ 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 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-এ অ্যাসিঙ্ক্রোনাসভাবে প্রিলোড কলব্যাক ম্যানেজ করুন (#১৫৬৮)।
    • লোড করা না গেলে বাফার করা সময়সীমা নির্বিশেষে প্লেব্যাক করার অনুমতি দিন (#1571)।
  • এক্সট্র্যাক্টর:
    • MP3: Info ফ্রেমের দৈর্ঘ্য ফিল্ডের উপর ভিত্তি করে ট্রেলিং নন-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-এ ডবল ট্যাপ করার অ্যাকশনকে 'পরের আইটেমে যান' অ্যাকশনে পরিবর্তন করুন, যেমন ডকুমেন্ট করা হয়েছে (#১৪৯৩)।
    • MediaButtonReceiver-এ 'প্লে' কমান্ড হিসেবে KEYCODE_HEADSETHOOK হ্যান্ডেল করুন যখন এটি এড়িয়ে যাওয়ার সিদ্ধান্ত নেবেন যাতে ForegroundServiceDidNotStartInTimeException (#১৫৮১) এড়ানো যায়।
  • RTSP এক্সটেনশন:
    • SDP পার্সিংয়ে ভুল মিডিয়া বিবরণ এড়িয়ে যান (#১০৮৭)।

ভার্সন 1.4.0

২৫ জুলাই, ২০২৪

androidx.media3:media3-*:1.4.0 রিলিজ করা হয়েছে। ভার্সন 1.4.0-এ এইসব কমিট আছে।

  • কমন লাইব্রেরি:
    • সম্ভাব্য নো-অপ সিক কল উপেক্ষা করার পরিবর্তে সুরক্ষিত BasePlayer.seekTo() এবং SimpleBasePlayer.handleSeek() পদ্ধতিতে ফরওয়ার্ড করুন। আপনি কাস্টম প্লেয়ারে এই পদ্ধতিগুলি প্রয়োগ করলে, আপনাকে mediaItemIndex == C.INDEX_UNSET-এর মাধ্যমে এই অতিরিক্ত কলগুলি ম্যানেজ করতে হতে পারে।
    • উন্নত Java 8 ডিসুগারিংয়ের উপর কম্পাইল ডিপেন্ডেন্সি সরান (#1312)।
    • MediaItem.Builder.setImageDurationMs()-এ পাস করা সময়সীমা ছবি নয় এমন MediaItem-এর জন্য উপেক্ষা করা হয়েছে কিনা তা নিশ্চিত করুন (ডকুমেন্ট করা অনুযায়ী)।
    • 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)-এর মাধ্যমে একটি নাল ভ্যালু ফিরিয়ে দেওয়ার অনুমতি দিন যাতে MediaSource-কে প্রদত্ত rankingData-এর সাথে প্রিলোড না করার নির্দেশ দেওয়া যায়।
    • BasePreloadManager-এ remove(MediaSource) যোগ করুন।
    • প্রিলোড ম্যানেজার ইনস্ট্যান্স রেখে, হোল্ড করা সব সোর্স রিলিজ করতে reset()-কে BasePreloadManager-এ যোগ করুন।
    • 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) যায়।
    • অডিও ফোকাস সংক্রান্ত কিছু অসঙ্গতি ঠিক করা হয়েছে, যেমন প্লেয়ার পজ করা থাকলে সম্পূর্ণ বা ক্ষণস্থায়ী ফোকাস লস রিপোর্ট না করা (#1436)।
    • প্রাথমিক প্রস্তুতিমূলক ধাপের পরে এক্সট্র্যাক্টর অতিরিক্ত ট্র্যাক রিপোর্ট করার কারণে সম্ভাব্য 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-কে আক্ষরিক রঙের মানের পরিবর্তে রঙের সূচক হিসেবে সমাধান করা যায় (#১৩৬৭)।
    • CEA-708: rowLock ভ্যালু উপেক্ষা করুন। CEA-708-E S-2023 স্পেসিফিকেশন অনুযায়ী, স্ট্রিমে যে ভ্যালুই থাকুক না কেন, rowLock এবং columnLock দুটিকেই সত্য বলে ধরে নিতে হবে (columnLock সাপোর্ট বাস্তবায়িত হয়নি, তাই এটিকে সবসময় মিথ্যা বলে ধরে নেওয়া হয়)।
      • এটি প্রথমে 1.3.0-alpha01 রিলিজ নোটে অন্তর্ভুক্ত করা হয়েছিল, কিন্তু 1.3.0-rc01 রিলিজের আগে ভুলবশত পরিবর্তনটি আগের অবস্থায় ফিরিয়ে আনা হয়েছে। এটি এখন ঠিক করা হয়েছে, তাই পরিবর্তনটি আবার দেখা যাচ্ছে।
    • CEA-708: ExoPlayer-এর 'সেট পেন লোকেশন' কমান্ডের সহজ হ্যান্ডলিংয়ের মাধ্যমে ডুপ্লিকেট নতুন লাইন যোগ করা এড়িয়ে চলুন (#১৩১৫)।
    • WebVTT সাবটাইটেল স্যাম্পেলে কোনও কিউ না থাকলে, যেমন DASH স্ট্রিমের অংশ হিসেবে, LegacySubtitleUtil থেকে IllegalArgumentException সংক্রান্ত সমস্যার সমাধান করুন (#১৫১৬)।
  • মেটাডেটা:
    • ID3 সর্ট ট্যাগে MP4-এর ম্যাপিং ঠিক করুন। আগে 'অ্যালবাম সর্ট' (soal), 'আর্টিস্ট সর্ট' (soar) এবং 'অ্যালবাম আর্টিস্ট সর্ট' (soaa) MP4 ট্যাগ ভুল করে TSO2, TSOA এবং TSOP ID3 ট্যাগের সাথে ম্যাপ করা হয়েছিল (#১৩০২)।
    • ভ্যালু এক বাইটের বেশি হলে 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 নন-নাল কিনা তা চেক করুন। এই প্যারামিটারটি আগে থেকেই নন-নাল হিসেবে অ্যানোটেট করা আছে।
    • open()-এর সময় ByteArrayDataSource-কে বাইট অ্যারেতে URI সমাধান করার অনুমতি দিন, কনস্ট্রাকশনে হার্ড-কোড করার পরিবর্তে (#১৪০৫)।
  • DRM:
    • DefaultDrmSessionManagerProvider (#১২৭১)-এ LoadErrorHandlingPolicy সেট করার অনুমতি দিন।
  • প্রভাব:
    • 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-কে প্রদত্ত সমস্যার তথ্য (#543) সহ সমস্যা সংক্রান্ত স্ট্যাটাসে আপডেট করতে কাস্টম সমস্যা ব্যবহার করা হয়।
    • নির্দিষ্ট কন্ট্রোলার থেকে প্লেয়ার ইন্টার‍্যাকশনের সিরিজ শেষ হলে সেশনকে জানানোর জন্য MediaSession.Callback.onPlayerInteractionFinished() যোগ করুন।
    • SessionError যোগ করুন এবং SessionResult ও LibraryResult-এ এটি ব্যবহার করুন সমস্যার কোডের পরিবর্তে সমস্যা সম্পর্কে আরও তথ্য প্রদান করতে এবং সম্ভব হলে কীভাবে সমস্যার সমাধান করা যায়।
    • Media3 কন্ট্রোলার টেস্ট অ্যাপের জন্য কোড প্রকাশ করুন যা মিডিয়া সেশন প্রকাশ করা অ্যাপের সাথে ইন্টার‍্যাকশন টেস্ট করতে ব্যবহার করা যেতে পারে।
    • media3-এর MediaSession[Builder].setSessionExtras()-এ পাস করা অতিরিক্ত ডেটা media1 কন্ট্রোলারের PlaybackStateCompat.getExtras()-এ প্রোপাগেট করুন।
    • প্ল্যাটফর্ম সেশনে এবং সেশন থেকে মারাত্মক এবং মারাত্মক নয় এমন ত্রুটি ম্যাপ করুন। PlaybackStateCompat-এর মারাত্মক সমস্যা সংক্রান্ত স্ট্যাটাসের সাথে PlaybackException ম্যাপ করা হয়েছে। MediaSession.sendError(ControllerInfo, SessionError) সহ মিডিয়া বিজ্ঞপ্তি কন্ট্রোলারে পাঠানো SessionError PlaybackStateCompat-এ মারাত্মক নয় এমন সমস্যার সাথে ম্যাপ করা হয়েছে, যার অর্থ হল সমস্যার কোড ও মেসেজ সেট করা হয়েছে কিন্তু প্ল্যাটফর্ম সেশনের স্ট্যাটাস STATE_ERROR-এর থেকে আলাদা থাকে।
    • গ্লোবাল সেশন অ্যাক্টিভিটি ওভাররাইড করতে, প্রতিটি কন্ট্রোলারের জন্য সেশন অ্যাক্টিভিটি সেট করার অনুমতি দিন। কানেকশন করার সময় AcceptedResultBuilder.setSessionActivivty(PendingIntent)-এর সাথে ConnectionResult তৈরি করে কন্ট্রোলারের জন্য সেশন অ্যাক্টিভিটি নির্ধারণ করা যেতে পারে। কানেক্ট করা হয়ে গেলে, সেশন অ্যাক্টিভিটি MediaSession.setSessionActivity(ControllerInfo, PendingIntent)-এর সাথে আপডেট করা যাবে।
    • MediaLibrarySession.Callback-এ কলের ক্ষেত্রে সমস্যার রেপ্লিকেশন উন্নত করুন। সমস্যার রেপ্লিকেশন এখন MediaLibrarySession.Builder.setLibraryErrorReplicationMode() ব্যবহার করে কনফিগার করা যেতে পারে। এটি সমস্যার ধরন বেছে নিতে বা সমস্যার রেপ্লিকেশন থেকে অপ্ট-আউট করতে সাহায্য করে, যা ডিফল্ট হিসেবে চালু থাকে।
  • UI:
    • PlayerView-এ ছবি দেখানোর সুবিধা যোগ করুন যখন এটি একটি ExoPlayer (#1144)-এর সাথে কানেক্ট করা থাকে।
    • গ্লোবাল ওভাররাইডের পরিবর্তে, প্রতি PlayerView ইনস্ট্যান্সের জন্য বিভিন্ন ড্রয়েবলকে অনুমতি দিতে, xml অ্যাট্রিবিউটের মাধ্যমে PlayerControlView-এ বিভিন্ন আইকনের কাস্টমাইজেশন যোগ করুন (#১২০০)।
    • API 34-এ কম্পোজ AndroidView-এর মধ্যে SurfaceView ব্যবহার করার সময় স্ট্রেচ/ক্রপ করা ভিডিওর কারণ হিসেবে প্ল্যাটফর্মের বাগ সংক্রান্ত সমস্যার সমাধান করা (#1237)।
  • ডাউনলোড:
    • নিশ্চিত করুন যে DownloadHelper রিলিজ না হওয়া Renderer ইনস্ট্যান্স লিক করে না, যার ফলে শেষ পর্যন্ত অ্যাপ ক্র্যাশ করতে পারে IllegalStateException: Too many receivers, total of 1000, registered for pid (#১২২৪)।
  • 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.4.0-beta01

২৬ জুন, ২০২৪

1.4.0 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.4.0-alpha02

৭ জুন, ২০২৪

1.4.0 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.4.0-alpha01

১৭ এপ্রিল, ২০২৪

1.4.0 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন ১.৩.০

ভার্সন 1.3.1

১১ এপ্রিল, ২০২৪

androidx.media3:media3-*:1.3.1 রিলিজ করা হয়েছে। ভার্সন 1.3.1-এ এইসব কমিট আছে।

  • কমন লাইব্রেরি:
    • লোকালাইজ করা বা অন্যান্য বিকল্প লেবেলের অনুমতি দিতে Format.labels যোগ করুন।
  • ExoPlayer:
    • PreloadMediaPeriod আবার প্রিলোড করা হলে, স্ট্রিম ধরে রাখতে না পারার সমস্যা সমাধান করা হয়েছে।
    • ট্র্যাক আবার বেছে নেওয়ার সময়, প্লেয়িং পিরিয়ডে সঠিক সংশ্লিষ্ট TrackSelectionResult প্রয়োগ করুন।
    • মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় প্লেয়িং পিরিয়ড অ্যাডভান্স করার পরেই আগে থেকে চালু করা রেন্ডারার শুরু করুন (#১০১৭)।
    • DefaultVideoFrameProcessor.Factory.Builder.build()-এর জন্য প্রোগার্ড -keepclasseswithmembers নিয়মে মিসিং রিটার্ন টাইপ যোগ করুন (#১১৮৭)।
  • ট্রান্সফর্মার:
    • API 30-এর আগে MediaMuxer নেগেটিভ প্রেজেন্টেশন টাইমস্ট্যাম্প সাপোর্ট না করার কারণে ব্যতিক্রমের জন্য সমাধান যোগ করুন।
  • ট্র্যাক বেছে নেওয়া:
    • DefaultTrackSelector: কম বা সেট না করা ফ্রেম রেটের তুলনায় 'যুক্তিযুক্ত' ফ্রেম রেট (>=১০fps) সহ ভিডিও ট্র্যাককে অগ্রাধিকার দিন। এটি নিশ্চিত করে যে প্লেয়ার মোশন ফটো থেকে এক্সট্র্যাক্ট করা MP4-এ 'আসল' ভিডিও ট্র্যাক বেছে নেয় যেটিতে দুটি HEVC ট্র্যাক থাকতে পারে, যার মধ্যে একটির রেজোলিউশন বেশি কিন্তু ফ্রেমের সংখ্যা খুব কম (#১০৫১)।
  • এক্সট্র্যাক্টর:
    • WAV ফাইল থেকে অদ্ভুত সাইজের চাঙ্ক পড়ার সময় প্যাডিং এড়ানো না যাওয়ার সমস্যা সমাধান করা হয়েছে (#1117)।
    • MP3: মেটাডেটা ফ্রেম থেকে Format.averageBitrate পপুলেট করুন, যেমন XING এবং VBRI।
    • MPEG-TS: স্যাম্পেল সারিতে স্ট্রিমের শেষ অ্যাক্সেস ইউনিট পাস করার মাধ্যমে শেষ ফ্রেম রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করার উদ্দেশ্যে করা পরিবর্তন ফিরিয়ে আনা (#৭৯০৯)। এই পরিবর্তনের ফলে শুধুমাত্র I-ফ্রেম HLS স্ট্রিম (#১১৫০) এবং H.২৬২ HLS স্ট্রিম (#১১২৬) সংক্রান্ত নতুন সমস্যা দেখা দিয়েছে।
  • অডিও:
    • অডিও ট্র্যাক অফলোড মোডে শুরু হতে না পারলে, অফলোড বন্ধ করে রেন্ডারার রিকভারির অনুমতি দিন।
  • ভিডিও:
    • Galaxy Tab S7 FE, Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য সমাধান যোগ করুন, যার ফলে 60fps H265 স্ট্রিম কাজ করে না বলে চিহ্নিত করা হয়
    • এমন সমাধান যোগ করুন যা নিশ্চিত করে যে টানেলিং করার সময় প্রথম ফ্রেমটি সর্বদা রেন্ডার করা হয়, এমনকি ডিভাইসটি API (#1169) দ্বারা প্রয়োজনীয় হিসাবে এটি অটোমেটিক না করলেও। (#৯৬৬)।
    • HDR কালার তথ্য হ্যান্ডেল করার সময় কোডেক ঠিকমতো কাজ না করা এবং SDR ভিডিও ট্র্যাকের জন্য অ্যাডাপ্টিভ ফর্ম্যাট সুইচ করতে না পারার সমস্যা সমাধান করা হয়েছে (#১১৫৮)।
  • টেক্সট:
    • WebVTT: সরাসরি পরপর কিউ থেকে WebvttParser.parse-এর অতিরিক্ত CuesWithTiming ইনস্ট্যান্স তৈরি হওয়া আটকায় (#১১৭৭)।
  • DRM:
    • NoSuchMethodError-এর জন্য বিকল্প সমাধান যা ResourceBusyException বা NotProvisionedException-এর পরিবর্তে MediaDrm ফ্রেমওয়ার্কের মাধ্যমে থ্রো করা যেতে পারে, কিছু Android 14 ডিভাইসে (#1145)।
  • প্রভাব:
    • কালার স্পেস কনভার্ট করার মাধ্যমে উন্নত PQ থেকে SDR টোন-ম্যাপিং।
  • সেশন:
    • কন্ট্রোলার বর্তমান আইটেমটি পরিবর্তন করলে, বর্তমান পজিশন আগের অবস্থায় ফিরে যাওয়ার সমস্যাটি সমাধান করুন (#951)।
    • মিডিয়া কন্ট্রোলার ও সেশনের মধ্যে শুধু নন-নাল extras সহ MediaMetadata ট্রান্সমিট না হওয়ার সমস্যা সমাধান করা হয়েছে (#1176)।
  • UI:
    • Locale যদি কোনও ডিসপ্লে নাম শনাক্ত করতে না পারে, তাহলে অডিও ট্র্যাকের ভাষার নাম অন্তর্ভুক্ত করার জন্য ফলব্যাক (#988)।
  • DASH এক্সটেনশন:
    • ম্যানিফেস্ট থেকে Format.labels-এ সব Label এলিমেন্ট পপুলেট করুন (#১০৫৪)।
  • RTSP এক্সটেনশন:
    • SDP পার্সিংয়ে খালি সেশন তথ্যের ভ্যালু (i-ট্যাগ) এড়িয়ে যান (#১০৮৭)।
  • ডিকোডার এক্সটেনশন (FFmpeg, VP9, AV1, MIDI ইত্যাদি):
    • ডিফল্ট হিসেবে লোকাল ডিপেন্ডেন্সি হিসেবে MIDI এক্সটেনশন বন্ধ করুন কারণ এটির জন্য অতিরিক্ত Maven রিপোজিটরি কনফিগার করতে হয়। যেসব ব্যবহারকারীর স্থানীয় ডিপেন্ডেন্সি থেকে এই মডিউল প্রয়োজন তারা এটি আবার চালু করতে পারবেন।

ভার্সন ১.৩.০

৬ মার্চ, ২০২৪

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 ডিপেন্ডেন্সির লেটেস্ট ভার্সনে আপগ্রেড করার জন্য এটি প্রয়োজন।
    • MediaMetadata.Builder.populate(MediaMetadata)-এ artworkUri এবং artworkData দুটির মধ্যে অন্তত একটি নন-নাল হলে, দুটিই পপুলেট করুন (#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) কী-এর নাম যাচাই করার জন্য ব্যবহৃত রেজেক্স সংশোধন করুন। এটি শুধুমাত্র হাইফেন চেক করার জন্য পরিবর্তন করুন (#১০২৮)।
    • CMCD কোয়েরি প্যারামিটার ডবল-এনকোড করা বন্ধ করুন (#১০৭৫)।
  • ট্রান্সফর্মার:
    • H.265/HEVC SEF স্লো মোশন ভিডিও ফ্ল্যাট করার জন্য সহায়তা যোগ করুন।
    • ট্রান্সমিক্সিংয়ের স্পিড বাড়ান, বিশেষ করে 'ভিডিও সরান' এডিটের জন্য।
    • আউটপুট ফাইল যাতে ভিডিও ফ্রেম থেকে শুরু হয় তা নিশ্চিত করতে API যোগ করুন। এটি ট্রিম করার অপারেশনের আউটপুটকে প্লেয়ার ইমপ্লিমেন্টেশনের সাথে আরও মানানসই করে তুলতে পারে যা প্রথম ভিডিও ফ্রেমটি তার প্রেজেন্টেশন টাইমস্ট্যাম্প (#৮২৯) পর্যন্ত দেখায় না।
    • সিঙ্গেল অ্যাসেট MP4 ট্রিম অপারেশন অপ্টিমাইজ করার জন্য সহায়তা যোগ করুন।
    • আউটপুট ফাইলে ভিডিও ফ্রেমের প্রথম টাইমস্ট্যাম্প আছে কিনা তা নিশ্চিত করতে সহায়তা যোগ করুন। iOS ভিত্তিক প্লেয়ারে (#829) কালো ফ্রেম দিয়ে শুরু হওয়া আউটপুট ফাইল সংক্রান্ত সমস্যার সমাধান করা হয়েছে।
  • ট্র্যাক বেছে নেওয়া:
    • ইমেজ ট্র্যাক বেছে নেওয়ার সুবিধা চালু করতে DefaultTrackSelector.selectImageTrack যোগ করুন।
    • ইমেজ ট্র্যাক ও ভিডিও ট্র্যাক, দুটিই উপলভ্য থাকলে, ইমেজ ট্র্যাক বেছে নেওয়া হবে কিনা তা নির্ধারণ করতে TrackSelectionParameters.isPrioritizeImageOverVideoEnabled যোগ করুন। ডিফল্ট ভ্যালু হল false যার অর্থ হল ভিডিও ট্র্যাক বেছে নেওয়াকে অগ্রাধিকার দেওয়া হয়।
  • এক্সট্র্যাক্টর:
    • ColorInfo.colorSpace, ColorInfo.colorTransfer এবং ColorInfo.colorRange ভ্যালু (#৬৯২) ফিরিয়ে আনতে MP4 এক্সট্র্যাক্টরে অতিরিক্ত AV1C পার্সিং যোগ করুন।
    • MP3: Info হেডার সহ ফাইলের জন্য কনস্ট্যান্ট বিটরেট (CBR) ব্যবহার করুন (Xing হেডারের CBR সমতুল্য)। আগে আমরা Info হেডার থেকে সিক টেবিল ব্যবহার করতাম, কিন্তু এর ফলে আমরা যদি এটি উপেক্ষা করি এবং ফাইলটি CBR বলে ধরে নিই, তার চেয়ে কম সুনির্দিষ্ট সিকিং হয়।
    • MPEG2-TS: DTS, DTS-LBR এবং DTS:X Profile2 সাপোর্ট যোগ করুন (#275)।
    • TS ডেসক্রিপ্টর থেকে অডিওর ধরন এক্সট্র্যাক্ট করে রোল ফ্ল্যাগে ম্যাপ করা, যাতে ব্যবহারকারীরা আরও ভালভাবে জেনে অডিও ট্র্যাক বেছে নিতে পারেন (#973)।
  • অডিও:
    • স্মুথ ভলিউম র‍্যাম্পের মাধ্যমে সাইলেন্স স্কিপিং অ্যালগরিদম উন্নত করা; ন্যূনতম সাইলেন্স এবং আরও স্বাভাবিক সাইলেন্সের সময়সীমা বজায় রাখা (#৭৪২৩)।
    • এড়িয়ে যাওয়া সাইলেন্স আরও নির্ধারকভাবে রিপোর্ট করুন (#১০৩৫)।
  • ভিডিও:
    • MediaCodecVideoRenderer কনস্ট্রাক্টর পরিবর্তন করুন যা একটি VideoFrameProcessor.Factory আর্গুমেন্ট নেয় এবং এটিকে এমন একটি কনস্ট্রাক্টর দিয়ে প্রতিস্থাপন করুন যা একটি VideoSinkProvider আর্গুমেন্ট নেয়। যেসব অ্যাপ কাস্টম VideoFrameProcessor.Factory ইনজেক্ট করতে চায়, সেগুলি CompositingVideoSinkProvider ইনস্ট্যান্টিয়েট করতে পারে, যা কাস্টম VideoFrameProcessor.Factory ব্যবহার করে এবং MediaCodecVideoRenderer-এ ভিডিও সিঙ্ক প্রোভাইডার পাস করে।
  • টেক্সট:
    • DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836) ব্যবহার করার সময় 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 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 হ্যান্ডেল করার সমস্যা সমাধান করা হয়েছে (#৭১২)।
  • ভিডিও:
    • Galaxy Tab S7 FE, Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য সমাধান যোগ করুন, যার ফলে ৬০fps AVC স্ট্রিমকে 'কাজ করে না' হিসেবে চিহ্নিত করা হয় (#৬৯৩)।
  • মেটাডেটা:
    • Vorbis কমেন্ট থেকে বড় হাতের কী সহ MediaMetadata পপুলেট হওয়ার সমস্যা সমাধান করা হয়েছে (#876)।
    • খুব বড় ID3 ফ্রেম পার্স করার সময় OutOfMemoryError ক্যাচ করুন, অর্থাৎ প্লেব্যাক সম্পূর্ণভাবে ব্যর্থ হওয়ার পরিবর্তে ট্যাগ তথ্য ছাড়াই প্লেব্যাক চালিয়ে যাওয়া যেতে পারে।
  • DRM:
    • API 33+ (আগে ওয়ার্কঅ্যারাউন্ড শুধু API 33-এর ক্ষেত্রে প্রযোজ্য ছিল) (#৮৩৭) URL-এর জন্য নকল ClearKey https://default.url লাইসেন্সের ওয়ার্কঅ্যারাউন্ড বাড়ানো হয়েছে।
    • প্লেয়ারের সাথে কোনও সারফেস অ্যাটাচ না করে এনক্রিপ্ট করা থেকে স্পষ্ট কন্টেন্টে পরিবর্তন করার সময় ERROR_DRM_SESSION_NOT_OPENED সংক্রান্ত সমস্যার সমাধান করুন। ক্লিয়ার কন্টেন্ট চালানোর জন্য সুরক্ষিত ডিকোডার ভুলভাবে ব্যবহার করার কারণে এই সমস্যা হয়েছে।
  • সেশন:
    • কাস্টম কী ও ভ্যালু MediaMetadataCompat থেকে MediaMetadata.extras এবং MediaMetadata.extras থেকে MediaMetadataCompat-এ রাখুন (#৭৫৬, #৮০২)।
    • পুরনো কন্ট্রোলারের জন্য ব্রডকাস্টিং notifyChildrenChanged সংক্রান্ত সমস্যার সমাধান করা (#644)।
    • বিজ্ঞপ্তির বন্ধ থাকা setWhen টাইমারের জন্য নেগেটিভ সময় সেট করার ফলে কিছু ডিভাইসে ক্র্যাশ হওয়ার সমস্যা সমাধান করা হয়েছে (#903)।
    • প্রথম বিজ্ঞপ্তি আপডেট করার অনুরোধ করা হলে, মিডিয়া বিজ্ঞপ্তি কন্ট্রোলার কানেক্ট করার প্রসেস সম্পূর্ণ না করলে, IllegalStateException সংক্রান্ত সমস্যার সমাধান করুন (#৯১৭)।
  • UI:
    • BottomSheetDialogFragment-এ মেটেরিয়াল ডিজাইনের সাথে ব্যবহার করার সময় ফরোয়ার্ড ও রিওয়াইন্ড বোতাম দেখা না যাওয়ার সমস্যার সমাধান করা হয়েছে (#511)।
    • 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 মেথড প্যারামিটার (#৬৭৯২)।
    • 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-এ অতিরিক্ত প্যারামিটার আছে, যার মধ্যে playbackSpeed এবং lastRebufferRealtimeMs আগে থেকে থাকা playbackPositionUs-এর সাথে যোগ করা হয়েছে।
    • ChunkSource ইন্টারফেসে ChunkSource.getNextChunk(long, long, List, ChunkHolder) পদ্ধতি উন্নত করে ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) করুন।
    • কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: বাফার স্টারভেশন (bs), ডেডলাইন (dl), প্লেব্যাক রেট (pr) এবং স্টার্টআপ (su) (#8699).
    • ColorInfo-এ লুমা ও ক্রোমা বিটডেপথ যোগ করুন (#৪৯১)।
    • কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: পরবর্তী অবজেক্ট অনুরোধ (nor) এবং পরবর্তী রেঞ্জ অনুরোধ (nrr) (#৮৬৯৯)।
    • কোয়েরি প্যারামিটার (#৫৫৩) ব্যবহার করে কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) ডেটা ট্রান্সমিট করার জন্য ফাংশনালিটি যোগ করুন।
    • ExperimentalBandwidthMeter-এ ConcurrentModificationException সংক্রান্ত সমস্যার সমাধান করুন (#612).
    • CompositeMediaSource.getMediaTimeForChildMediaTime-এ MediaPeriodId প্যারামিটার যোগ করুন।
    • ConcatenatingMediaSource2-এ ClippingMediaSource (এবং পিরিয়ড/উইন্ডো টাইম অফসেট সহ অন্যান্য সোর্স) সাপোর্ট করে (#১১২২৬)।
    • BaseRenderer.onStreamChanged() পরিবর্তন করুন যাতে MediaPeriodId আর্গুমেন্টও পাওয়া যায়।
  • ট্রান্সফর্মার:
    • ছবি ইনপুটের জন্য EXIF রোটেশন ডেটা পার্স করুন।
    • TransformationRequest.HdrMode অ্যানোটেশনের ধরন এবং এর সাথে যুক্ত কনস্ট্যান্ট সরিয়ে দিন। পরিবর্তে Composition.HdrMode এবং এর সাথে সম্পর্কিত কনস্ট্যান্ট ব্যবহার করুন।
    • ঘূর্ণন সংক্রান্ত সমস্যার সমাধান করতে OverlaySettings সরল করুন।
    • SampleConsumer.queueInputBitmap-এর frameRate ও durationUs প্যারামিটার পরিবর্তন করে TimestampIterator করা হয়েছে।
  • ট্র্যাক বেছে নেওয়া:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness যোগ করুন যাতে স্পষ্টভাবে নন-সিমলেস অ্যাডাপ্টেশন অনুমোদন বা বাতিল করা যায়। ডিফল্ট true-এর বর্তমান আচরণে থাকে।
  • এক্সট্র্যাক্টর:
    • MPEG-TS: স্যাম্পেল সারিতে স্ট্রিমের শেষ অ্যাক্সেস ইউনিট পাস করার মাধ্যমে শেষ ফ্রেমটি রেন্ডার করা হয়েছে কিনা তা নিশ্চিত করুন (#৭৯০৯)।
    • rotationDegrees নির্ধারণ করার সময় টাইপো ঠিক করুন। projectionPosePitch থেকে projectionPoseRoll-এ পরিবর্তন করা হয়েছে (#461)।
    • Extractor ইনস্ট্যান্স সরাসরি instanceof-এর মাধ্যমে পরীক্ষা করা যাবে, এই অনুমান সরিয়ে দিন। আপনি যদি Extractor-এর ইমপ্লিমেন্টেশন সংক্রান্ত বিবরণের রানটাইম অ্যাক্সেস চান, তাহলে আপনাকে প্রথমে Extractor.getUnderlyingInstance-এ কল করতে হবে।
    • BmpExtractor যোগ করুন।
    • WebpExtractor যোগ করুন।
    • HeifExtractor যোগ করুন।
    • Mp4Extractor-এ QuickTime ক্লাসিক সাপোর্ট যোগ করুন।
  • অডিও:
    • 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 ক্লাসে সরান।
    • onAudioTrackInitialized এবং onAudioTrackReleased কলব্যাক AnalyticsListener, AudioRendererEventListener এবং AudioSink.Listener-এ যোগ করুন।
    • 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 লাইভ স্ট্রিম ব্যতিক্রম দেখাতে পারে, এই সমস্যার সমাধান করা হয়েছে (#৫৭১)।
    • AdsLoader.destroy() কল করার আগে StreamManager রিলিজ করুন
    • IMA SDK ভার্সন 3.31.0-এ আপডেট করা হয়েছে।
  • সেশন:
    • বিজ্ঞপ্তি ফোরগ্রাউন্ড সার্ভিস আচরণ DefaultMediaNotificationProvider-এ FOREGROUND_SERVICE_IMMEDIATE-এ সেট করুন (#১৬৭)।
    • 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-এর জন্য "ডেটা সিঙ্ক" ফোরগ্রাউন্ড পরিষেবার ধরন ঘোষণা করুন। এই পরিষেবা ব্যবহার করার সময়, অ্যাপকে ম্যানিফেস্টে dataSync-কে foregroundServiceType হিসেবে যোগ করতে হবে এবং FOREGROUND_SERVICE_DATA_SYNC অনুমতি যোগ করতে হবে (#১১২৩৯)।
  • HLS এক্সটেনশন:
    • শেষবার লোড সম্পূর্ণ হওয়ার সময়ের পরিবর্তে শেষবার লোড শুরু হওয়ার সময় থেকে হিসেব করা বিরতি সহ HLS লাইভ প্লেলিস্ট রিফ্রেশ করুন (#৬৬৩)।
  • DASH এক্সটেনশন:
    • সেগমেন্ট টেমপ্লেট URL-এ একই DASH শনাক্তকারী একাধিকবার ব্যবহার করার অনুমতি দিন।
    • এক্সট্র্যাক্ট করার সময় সাবটাইটেল পার্স করার জন্য এক্সপেরিমেন্টাল সহায়তা যোগ করুন। এতে ওভারল্যাপ করা সাবটাইটেল মার্জ করার জন্য আরও ভালো সহায়তা রয়েছে, যার মধ্যে সাবটাইটেল সেগমেন্টের মধ্যে ট্রানজিশন করার সময় ফ্লিকারিং সংক্রান্ত সমস্যার সমাধান করাও অন্তর্ভুক্ত। আপনি DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#২৮৮) ব্যবহার করে এটি চালু করতে পারবেন।
  • RTSP এক্সটেনশন:
    • TCP-তে ফিরে যাওয়ার সময় IndexOutOfBoundsException-এর কারণ হতে পারে এমন রেস কন্ডিশন বা কিছু পরিস্থিতিতে প্লেব্যাক হ্যাং হয়ে যাওয়ার সমস্যার সমাধান করুন।
    • RTSP সেট-আপে স্টেট চেক করুন যখন RtspMediaPeriod (#577)-এর লোডিং স্টেট রিটার্ন করা হচ্ছে।
    • বিকল্পের উত্তর সংক্রান্ত পাবলিক হেডারে কাস্টম 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 (#৭৩৪) করা হয়েছে।
  • 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 প্যারামিটার নেয়।

ভার্সন 1.2.0-rc01

১ নভেম্বর ২০২৩

১.২.০ স্টেবল ভার্সন ব্যবহার করুন।

Version 1.2.0-beta01

১৯ অক্টোবর, ২০২৩

১.২.০ স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.2.0-alpha02

২৯ সেপ্টেম্বর, ২০২৩

১.২.০ স্টেবল ভার্সন ব্যবহার করুন।

Version 1.2.0-alpha01

১৭ আগস্ট, ২০২৩

১.২.০ স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.1.0

ভার্সন ১.১.১

১৬ আগস্ট, ২০২৩

  • কমন লাইব্রেরি:
    • সব মডিউল থেকে ভুলবশত যোগ করা multidex ডিপেন্ডেন্সি সরান (#৪৯৯)।
  • ExoPlayer:
    • PlaybackStatsListener-এ সেই সমস্যার সমাধান করা হয়েছে যেখানে প্লেলিস্ট মুছে দেওয়ার পরে ভুল PlaybackStats তৈরি হয়।
    • কমন মিডিয়া ক্লায়েন্ট ডেটা (CMCD) লগিংয়ে অতিরিক্ত ফিল্ড যোগ করুন: স্ট্রিমিং ফর্ম্যাট (sf), স্ট্রিমের ধরন (st), ভার্সন (v), টপ বিটরেট (tb), অবজেক্টের সময়সীমা (d), পরিমাপ করা থ্রুপুট (mtp) এবং অবজেক্টের ধরন (ot) (#৮৬৯৯)।
  • অডিও:
    • খুব ছোট ফাইল চালানোর সময় 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-এ পাঠানো মেসেজে সমস্যা হলে, Result-এ এই মেসেজ কাজ করে না, যার ফলে UnsupportedOperationException (#৭৮) তৈরি হয়।
    • PlayerWrapper যেভাবে VolumeProviderCompat তৈরি করে তা ঠিক করুন উভয় লিগ্যাসি কমান্ড (COMMAND_ADJUST_DEVICE_VOLUME এবং COMMAND_SET_DEVICE_VOLUME) এবং নতুন কমান্ড (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS এবং COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554) ব্যবহার করে volumeControlType নির্ধারণ করার মাধ্যমে।

ভার্সন 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
    • প্লেয়ারে ওভারলোড করা পদ্ধতি যোগ করুন যা ব্যবহারকারীদের ভলিউম ফ্ল্যাগ নির্দিষ্ট করার অনুমতি দেয়:
      • 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() যোগ করুন।
    • sourceId-কে int-এর পরিবর্তে long হিসেবে স্টোর করতে SampleQueue আপডেট করুন। এটি পাবলিক মেথড 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: দীর্ঘ সময়সীমার ফাইলে খোঁজার সময় বাগ ঠিক করা হয়েছে (#391)।
    • TimestampAdjuster emsg অ্যাটম থেকে মেটাডেটা স্যাম্পেল টাইম সহ ভুল টাইমস্ট্যাম্প অফসেট ইনিশিয়ালাইজ করে, এই সমস্যা সমাধান করুন (#৩৫৬)।
  • অডিও:
    • টানেলিং চালু থাকলে এবং AudioProcessors অ্যাক্টিভ থাকলে কিছু প্লেব্যাক কাজ না করার সমস্যা সমাধান করা হয়েছে, যেমন গ্যাপলেস ট্রিমিংয়ের জন্য (#১০৮৪৭)।
    • সরাসরি প্লেব্যাকের (অফলোড) ক্ষেত্রে Ogg প্যাকেটে Opus ফ্রেম এনক্যাপসুলেট করুন।
    • অফলোড শিডিউলিংয়ের মাধ্যমে স্লিপ মোডে বর্তমান পজিশন এক্সট্রাপোলেট করুন।
    • প্লেয়ারের লাইফসাইকেলের শেষে রিসোর্স রিলিজ করার জন্য Renderer.release() এবং AudioSink.release() যোগ করুন।
    • DefaultAudioSink-এ অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন শুনুন। DefaultAudioSink-এর কনস্ট্রাক্টরে প্রয়োজনীয় প্যারামিটার context যোগ করুন, যার মাধ্যমে DefaultAudioSink, AudioCapabilitiesReceiver-এর লিসেনার হিসেবে রেজিস্টার করবে এবং ক্ষমতা পরিবর্তন সম্পর্কে জানানো হলে এর audioCapabilities প্রপার্টি আপডেট করবে।
    • নতুন ইভেন্টের মাধ্যমে অডিওর ক্ষমতা সংক্রান্ত পরিবর্তন প্রচার করুন AudioSink.Listener ইন্টারফেসে onAudioCapabilitiesChanged এবং নতুন ইন্টারফেস 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 এবং তার আগের ভার্সনের জন্য ডিফল্ট হিসেবে কম্প্যাক্ট মিডিয়া বিজ্ঞপ্তি ভিউতে "আগেরটিতে যান" এবং "পরেরটিতে যান" কমান্ড বোতাম যোগ করুন (#৪১০)।
    • MediaSession.Callback.onAddMediaItems-এ ডিফল্ট ইমপ্লিমেন্টেশন যোগ করুন যাতে অনুরোধ করা MediaItems-কে Player-এ পাস করা যায়, যদি তাদের LocalConfiguration (যেমন, URI) থাকে (#২৮২)।
    • Android 12 এবং তার আগের ভার্সনের জন্য ডিফল্ট হিসেবে কম্প্যাক্ট মিডিয়া বিজ্ঞপ্তি ভিউতে "আগেরটিতে যান" এবং "পরেরটিতে যান" কমান্ড বোতাম যোগ করুন (#৪১০)।
  • UI:
    • প্লে/পজ বোতাম সহ কাস্টম UI এলিমেন্ট লিখতে Util পদ্ধতি shouldShowPlayButton এবং handlePlayPauseButtonAction যোগ করুন।
  • RTSP এক্সটেনশন:
    • MPEG4-LATM-এর জন্য, Describe Response SDP মেসেজে (#৩০২) profile-level-id ভ্যালু না থাকলে ডিফল্ট ভ্যালু ব্যবহার করুন।
    • DESCRIBE রেসপন্স হেডারে (#11160) উপস্থিত থাকলে, RTSP সেশন থেকে রিলেটিভ পাথ রেজোলিউশনের জন্য বেস Uri ব্যবহার করুন।
  • DASH এক্সটেনশন:
    • মাল্টি পিরিয়ড DASH স্ট্রিমের জন্য MediaLoadData.startTimeMs এবং MediaLoadData.endTimeMs থেকে মিডিয়া টাইম অফসেট সরিয়ে দিন।
    • মাল্টি-পিরিয়ড লাইভ ড্যাশ মিডিয়া সোর্স আবার প্রস্তুত করার সময় IndexOutOfBoundsException (#১০৮৩৮) তৈরি হওয়ার সমস্যা সমাধান করা হয়েছে।
  • 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 প্যারামিটার দেওয়ার বিকল্প রয়েছে।
    • Charsets-এর জন্য বাতিল করা স্ট্রিং কনস্ট্যান্ট (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME এবং UTF16LE_NAME) সরিয়ে দিন, এর পরিবর্তে kotlin.text প্যাকেজ থেকে Kotlin Charsets, java.nio.charset.StandardCharsets অথবা com.google.common.base.Charsets ব্যবহার করুন।
    • বন্ধ হয়ে যাওয়া 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 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 1.1.0-beta01

৭ জুন, ২০২৩

1.1.0 স্টেবল ভার্সন ব্যবহার করুন।

ভার্সন 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 ফাইল বাইট অর্ডার মার্ক দিয়ে শুরু হলে সেটির জন্য সহায়তা যোগ করুন (#৩১৯)।
  • সেশন:
    • MediaController-এর উপলভ্য কমান্ড আপডেট না হওয়ার সমস্যা সমাধান করা হয়েছে। এটি তখন হয় যখন এমন একটি লিগ্যাসি MediaSessionCompat-এর সাথে কানেক্ট করা হয় যা নিজের অ্যাকশন আপডেট করে।
    • API 30-এ params.isRecent == true-এর সাথে সিস্টেম UI থেকে Callback.onGetLibraryRoot-এ কলের জন্য MediaLibraryService-কে নাল রিটার্ন করা থেকে আটকানো সমস্যার সমাধান করুন (#355)।
    • MediaSessionService বা MediaLibraryService-এর মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন (#৩৪৬)।
    • MediaSession-এ Timeline ও পজিশন আপডেট একসাথে করার সময় MediaController-এ IllegalStateException দেখানোর সমস্যার সমাধান করা হয়েছে।

ভার্সন ১.০.১

১৮ এপ্রিল, ২০২৩

androidx.media3:media3-*:1.0.1 রিলিজ করা হয়েছে। ভার্সন 1.0.1-এ এইসব কমিট রয়েছে।

এই রিলিজ ExoPlayer 2.18.6 রিলিজ-এর সাথে সম্পর্কিত।

  • কোর লাইব্রেরি:
    • ডিফল্ট পজিশনে খোঁজার সময় টার্গেট লাইভ স্ট্রিম ওভাররাইড রিসেট করুন (#11051)।
    • মিডিয়াতে খালি স্যাম্পেল স্ট্রিম থাকলে প্লেব্যাক আটকে যাওয়ার সমস্যা সমাধান করা হয়েছে।
  • সেশন:
    • পুরনো MediaSessionCompat-এর মাধ্যমে একাধিক একই ধরনের কিউ আইটেম প্রকাশ করার ফলে MediaController-এ ব্যতিক্রম হওয়ার সমস্যা সমাধান করা হয়েছে (#২৯০)।
    • MediaSession.broadcastCustomCommand-এর মিসিং ফরওয়ার্ডিং লেগ্যাসি MediaControllerCompat.Callback.onSessionEvent-এ যোগ করুন (#২৯৩)।
    • MediaSession.setPlayer কল করার সময় উপলভ্য কমান্ড আপডেট না হওয়ার সমস্যার সমাধান করা।
    • MediaController থেকে পাঠানো TrackSelectionOverride ইনস্ট্যান্স Format.metadata-এর সাথে কোনও গ্রুপকে রেফার করলে, সেগুলি উপেক্ষা করা হয়, এই সমস্যার সমাধান করুন (#২৯৬)।
    • পুরনো MediaSessionCompat-এর মাধ্যমে মেটাডেটা অ্যাক্সেস করার জন্য Player.COMMAND_GET_CURRENT_MEDIA_ITEM-কে উপলভ্য হতে হবে, এই সমস্যা সমাধান করুন।
    • ব্যাকগ্রাউন্ড থ্রেডে MediaSession ইনস্ট্যান্সের কারণে MediaSessionService-এ ব্যবহার করার সময় ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে (#318)।
    • অ্যাপের উদ্দেশ্য না থাকা সত্ত্বেও লাইব্রেরির মাধ্যমে মিডিয়া বোতাম রিসিভার ঘোষণা করা সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#৩১৪)।
  • DASH:
    • খালি সেগমেন্ট টাইমলাইন ম্যানেজ করার সমস্যা সমাধান করা হয়েছে (#11014)।
  • RTSP:
    • UDP-এর সাথে RTSP সেট-আপ RTSP ত্রুটি 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)।
    • অডিও বন্ধ করার ঠিক পরেই প্লেব্যাক স্পিড সেট করার সময় যে সমস্যা হচ্ছিল তা সমাধান করা হয়েছে। আগের স্পিড পরিবর্তনের কারণে এটি ওভাররাইড হয়ে যেতে পারে (#১০৮৮২)।
  • ভিডিও:
    • HEVC HDR10 ফর্ম্যাটকে HEVCProfileMain10-এর পরিবর্তে HEVCProfileMain10HDR10-এ ম্যাপ করুন।
    • Chromecast with Google TV এবং Lenovo M10 FHD Plus-এ ডিভাইস সংক্রান্ত সমস্যার জন্য বিকল্প সমাধান যোগ করা হয়েছে, যার ফলে 60fps AVC স্ট্রিমকে 'কাজ করে না' হিসেবে চিহ্নিত করা হয় (#১০৮৯৮)।
    • স্ক্রিন রিফ্রেশ রেটের থেকে অনেক বেশি ফ্রেম রেট সহ মিডিয়া চালানোর সময় ফ্রেম রিলিজ পারফর্ম্যান্স সংক্রান্ত সমস্যার সমাধান করুন।
  • কাস্ট:
    • মিডিয়া আইটেমের মধ্যে ট্রানজিশন করার সময় ট্রানজিয়েন্ট STATE_IDLE সংক্রান্ত সমস্যার সমাধান করা (#২৪৫)।
  • RTSP:
    • ভুল RTSP পার্স করার সময় IllegalArgumentException থ্রো করা হয়েছে উত্তরের মেসেজ বর্ণনা করুন (#10971)।
  • সেশন:
    • বিজ্ঞপ্তি প্লে/পজ বোতাম প্লেয়ারের স্ট্যাটাসের সাথে আপডেট না হওয়ার সমস্যা সমাধান করা হয়েছে (#১৯২)।
  • IMA এক্সটেনশন:
    • একটি সমস্যার সমাধান করা হয়েছে যার ফলে কোনও বিজ্ঞাপন ছাড়াই DAI স্ট্রিম শুরু করা যাচ্ছিল না কারণ প্রথম (এবং বিজ্ঞাপন ছাড়া স্ট্রিমের ক্ষেত্রে একমাত্র) LOADED ইভেন্ট পাওয়া যাচ্ছিল না।

ভার্সন 1.0.0-rc01

১৬ ফেব্রুয়ারি, ২০২৩

androidx.media3:media3-*:1.0.0-rc01 রিলিজ করা হয়েছে। ভার্সন 1.0.0-rc01-এ এইসব কমিট রয়েছে।

এই রিলিজ ExoPlayer 2.18.3 রিলিজ-এর সাথে সম্পর্কিত।

  • কোর লাইব্রেরি:
    • রেন্ডারারের ডিকোডার অর্ডারিং লজিক টুইক করুন যাতে MediaCodecSelector-এর পছন্দ বজায় থাকে, এমনকি ডিকোডার যদি রিপোর্ট করে যে এটি মিডিয়া পারফর্ম্যান্সের সাথে চালাতে পারবে না। যেমন, ডিফল্ট সিলেক্টরের সাথে, শুধুমাত্র ফাংশনাল সাপোর্ট সহ হার্ডওয়্যার ডিকোডারকে, ফর্ম্যাটকে সম্পূর্ণভাবে সাপোর্ট করে এমন সফ্টওয়্যার ডিকোডারের চেয়ে বেশি প্রাধান্য দেওয়া হবে (#10604)।
    • ExoPlayer.Builder.setPlaybackLooper যোগ করুন যা নতুন ExoPlayer ইনস্ট্যান্সের জন্য আগে থেকে থাকা প্লেব্যাক থ্রেড সেট করে।
    • ডাউনলোড ম্যানেজার হেল্পারদের মুছে ফেলার অনুমতি দিন (#১০৭৭৬)।
    • BasePlayer.seekTo-এ প্যারামিটার যোগ করুন যাতে খোঁজার জন্য ব্যবহৃত কমান্ডও নির্দেশ করা যায়।
    • API 21+-এ ড্রয়েবল লোড করার সময় থিম ব্যবহার করুন (#২২০)।
    • ConcatenatingMediaSource2 যোগ করুন যা একাধিক মিডিয়া আইটেমকে একটি উইন্ডোতে একত্রিত করার অনুমতি দেয় (#২৪৭)।
  • এক্সট্র্যাক্টর:
    • trak অ্যাটম পার্স করার সময় স্যাম্পেল টেবিলে (stbl) প্রয়োজনীয় স্যাম্পেল বিবরণ (stsd) না থাকলে, NullPointerException-এর পরিবর্তে ParserException থ্রো করুন।
    • fMP4-এ সরাসরি সিঙ্ক ফ্রেমে খোঁজার সময় স্যাম্পেল সঠিকভাবে এড়িয়ে যাওয়া (#১০৯৪১)।
  • অডিও:
    • ডাইরেক্ট প্লেব্যাকে (পাসথ্রু) AudioTrack-এর জন্য ন্যূনতম বাফার সাইজ গণনা করতে কম্প্রেস করা অডিও ফর্ম্যাট বিটরেট ব্যবহার করুন।
  • টেক্সট:
    • সাবটাইটেল ফাইলে কোনও কিউ না থাকলে, TextRenderer-এর মাধ্যমে Subtitle.getEventTime-এ ভুল (নেগেটিভ) ইনডেক্স পাস করার সমস্যা সমাধান করুন।
    • SubRip: UTF-16 ফাইল বাইট অর্ডার মার্ক দিয়ে শুরু হলে, সেটির জন্য সহায়তা যোগ করুন।
  • মেটাডেটা:
    • ID3 ফ্রেম থেকে একাধিক নাল-সেপারেটেড ভ্যালু পার্স করুন, যেমনটি ID3 v2.4-এর মাধ্যমে অনুমোদিত।
    • মেটাডেটার মাধ্যমে বর্ণনা করা কন্টেন্ট বা ফোল্ডারের ধরন বোঝাতে MediaMetadata.mediaType যোগ করুন।
    • MediaMetadata.folderType-এর পরিবর্তে MediaMetadata.isBrowsable যোগ করুন। পরবর্তী রিলিজে ফোল্ডারের ধরন বন্ধ করে দেওয়া হবে।
  • DASH:
    • টাইল গণনা সহ ইমেজ অ্যাডাপ্টেশন সেটের জন্য সম্পূর্ণ পার্সিং যোগ করুন (#3752)।
  • UI:
    • দৃশ্যমানতা পরিবর্তন রেজিস্টার করা লিসনারের কাছে পাস করা হয়েছে কিনা তা নিশ্চিত করতে PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) ডেপ্রিকেট করা সংক্রান্ত সমস্যার সমাধান করুন (#২২৯)।
    • ডানদিক-থেকে-বাঁদিকে (RTL) লেআউট ব্যবহার করার সময় PlayerView-এ সেন্টার প্লেয়ার কন্ট্রোলের ক্রম ঠিক করুন (#২২৭)।
  • সেশন:
    • কাস্টম প্লেয়ারের জন্য Player ইন্টারফেস প্রয়োগ করতে অ্যাবস্ট্র্যাক্ট SimpleBasePlayer যোগ করুন।
    • প্ল্যাটফর্ম সেশন টোকেনকে Media3-তে কনভার্ট করার জন্য হেল্পার পদ্ধতি যোগ করুন SessionToken (#১৭১)।
    • প্ল্যাটফর্ম মিডিয়া সেশনের আপডেট ট্রিগার করতে onMediaMetadataChanged ব্যবহার করুন (#২১৯)।
    • DefaultMediaNotificationProvider-এর getMediaButtons()-এর আর্গুমেন্ট হিসেবে মিডিয়া সেশন যোগ করুন এবং স্বচ্ছতার জন্য অপরিবর্তনীয় তালিকা ব্যবহার করুন (#২১৬)।
    • প্লেয়ারে সেট করার আগে সেশন অনুযায়ী MediaItem তালিকা, শুরুর ইন্ডেক্স ও পজিশন পরিবর্তন/সেট করার উপায় প্রদান করতে onSetMediaItems কলব্যাক লিসেনার যোগ করুন (#১৫৬)।
    • ব্লুটুথ নয় এমন মিডিয়া বোতাম ইভেন্টের জন্য ডবল ট্যাপ শনাক্তকরণ এড়িয়ে চলুন (#২৩৩)।
    • সন্দেহজনক লিগ্যাসি সেশন স্টেট থাকলে QueueTimeline আরও শক্তিশালী করুন (#২৪১)।
  • মেটাডেটা:
    • ID3 ফ্রেম থেকে একাধিক নাল-সেপারেটেড ভ্যালু পার্স করুন, যেমনটি ID3 v2.4-এর মাধ্যমে অনুমোদিত।
    • মেটাডেটার মাধ্যমে বর্ণনা করা কন্টেন্ট বা ফোল্ডারের ধরন বোঝাতে 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 (#10758) হতে পারে, এই সমস্যার সমাধান করুন।
  • বিল্ড:
    • কম্পাইলেশন সংক্রান্ত সমস্যা এড়াতে ন্যূনতম compileSdkVersion এনফোর্স করুন (#১০৬৮৪)।
    • অন্য গ্রেডেল বিল্ডে অন্তর্ভুক্ত থাকলে, ব্লক প্রকাশ করা এড়িয়ে চলুন।
  • ট্র্যাক বেছে নেওয়া:
    • ডিসপ্লেতে Dolby Vision কাজ না করলে, অন্য ট্র্যাক বেছে নিন। (#8944)।
  • ডাউনলোড:
    • একই PriorityTaskManager-এর মাধ্যমে একই সাথে ডাউনলোড ও প্লেব্যাক করার কারণে ProgressiveDownloader-এ সম্ভাব্য ইনফিনিট লুপের সমস্যা সমাধান করুন (#10570)।
    • ডাউনলোড সংক্রান্ত বিজ্ঞপ্তি যাতে সাথে সাথে দেখা যায় তা নিশ্চিত করুন (#১৮৩)।
    • অতিরিক্ত থ্রেড তৈরি করা এড়াতে সমান্তরাল ডাউনলোড অপসারণের সীমা ১-এ সীমাবদ্ধ করুন (#১০৪৫৮)।
  • ভিডিও:
    • ডিসপ্লেতে Dolby Vision কাজ না করলে, Dolby Vision-এর জন্য বিকল্প ডিকোডার ব্যবহার করে দেখুন। (#৯৭৯৪)।
  • অডিও:
    • একই সময়ে একাধিক প্লেয়ার রিলিজ করার সময় OutOfMemory সমস্যা এড়াতে AudioTrack ইনস্ট্যান্স রিলিজ করার জন্য SingleThreadExecutor ব্যবহার করুন (#10057)।
    • 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 (#১০৪২৯)।
  • সেশন:
    • কিছু কমান্ডের জন্য অ্যাসিঙ্ক্রোনাস রেজোলিউশন প্রয়োজন হলেও, কমান্ডগুলি সর্বদা সঠিক ক্রমে কার্যকর করা হয়েছে কিনা তা নিশ্চিত করুন (#৮৫)।
    • DefaultMediaNotificationProvider ইনস্ট্যান্স তৈরি করতে DefaultMediaNotificationProvider.Builder যোগ করুন। বিল্ডার, বিজ্ঞপ্তি আইডি, বিজ্ঞপ্তি চ্যানেল আইডি এবং বিজ্ঞপ্তি চ্যানেল নাম কনফিগার করতে পারে যা পরিষেবা প্রদানকারী ব্যবহার করে। এছাড়াও, বিজ্ঞপ্তির ছোট আইকন সেট করতে DefaultMediaNotificationProvider.setSmallIcon(int) পদ্ধতি যোগ করুন। (#১০৪)।
    • MediaController.release()-এর আগে পাঠানো কমান্ড যাতে ড্রপ না হয় তা নিশ্চিত করুন (#৯৯)।
    • SimpleBitmapLoader, file:// URI থেকে বিটম্যাপ লোড করতে পারে (#১০৮)।
    • নির্দিষ্ট সময়সীমার মধ্যে (#122) বিজ্ঞাপনের উপর MediaController-কে সিক করা থেকে আটকায় এমন অ্যাসারশন ঠিক করুন।
    • প্লেব্যাক শেষ হলে, ফোরগ্রাউন্ড থেকে MediaSessionService বন্ধ হয়ে যায় এবং শেষবার চালানো মিডিয়া আইটেমের প্লেব্যাক রিস্টার্ট করার জন্য একটি বিজ্ঞপ্তি দেখানো হয় (#১১২)।
    • পজ করার জন্য পেন্ডিং ইনটেন্ট সহ ফোরগ্রাউন্ড সার্ভিস শুরু করবেন না (#১৬৭)।
    • API 26 ও API 27-এ DefaultNotificationProvider-এর তৈরি করা বিজ্ঞপ্তির সাথে যুক্ত 'ব্যাজ' ম্যানুয়ালি লুকান (API 28+-এ ব্যাজ অটোমেটিক লুকানো হয়) (#১৩১)।
    • পুরনো MediaSession থেকে Media3 MediaController-এ দ্বিতীয় বাইন্ডার কানেকশন IllegalStateExceptions (#৪৯) ঘটায়, এই সমস্যার সমাধান করা হয়েছে।
  • RTSP:
    • H263 ফ্র্যাগমেন্টেড প্যাকেট হ্যান্ডলিং যোগ করুন (#১১৯)।
    • MP4A-LATM-এর জন্য সহায়তা যোগ করুন (#১৬২)।
  • IMA:
    • বিজ্ঞাপন লোড করার সময় IMA SDK আটকে গেলে সেই পরিস্থিতি সামাল দেওয়ার জন্য বিজ্ঞাপনের তথ্য লোড করার টাইমআউট যোগ করুন (#১০৫১০)।
    • কন্টেন্টের শেষ পর্যন্ত দেখার সময় মিড-রোল বিজ্ঞাপন এড়িয়ে যাওয়া আটকান (#১০৬৮৫)।
    • সার্ভার-সাইড ইনসার্ট করা বিজ্ঞাপন সহ লাইভ স্ট্রিমের জন্য উইন্ডোর সময়সীমা সঠিকভাবে গণনা করুন, যেমন 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-এ কল করা যাবে কিনা তা নিশ্চিত করুন (#9889)।
    • প্রোগ্রেসিভ মিডিয়ার জন্য, বাফার করা পজিশনে শুধু বেছে নেওয়া ট্র্যাক অন্তর্ভুক্ত করুন (#১০৩৬১)।
    • সব ExoPlayer লগ আউটপুটের জন্য কাস্টম লগারকে অনুমতি দিন (#৯৭৫২)।
    • DefaultMediaSourceFactory-এ setDataSourceFactory-এর প্রয়োগ সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যা কিছু ক্ষেত্রে কাজ করছিল না (#116)।
  • এক্সট্র্যাক্টর:
    • H265 শর্ট টার্ম রেফারেন্স পিকচার সেটের পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#১০৩১৬)।
    • esds বক্স থেকে বিটরেট পার্সিং সংক্রান্ত সমস্যার সমাধান করা (#১০৩৮১)।
  • DASH:
    • ম্যানিফেস্ট থেকে ClearKey লাইসেন্স URL পার্স করুন (#১০২৪৬)।
  • UI:
    • প্লেব্যাক কন্ট্রোল মেনুতে বর্তমানে অ্যাক্টিভ স্পিড বিকল্পটি টকব্যাক ঘোষণা করছে কিনা তা নিশ্চিত করুন (#১০২৯৮)।
  • RTSP:
    • VP8 ফ্র্যাগমেন্টেড প্যাকেট হ্যান্ডলিং যোগ করুন (#১১০)।
  • Leanback এক্সটেনশন:
    • LeanbackAdapter-এ playWhenReady পরিবর্তন শুনুন (১০৪২০)।
  • কাস্ট:
    • MediaItem ব্যবহার করুন যা প্লেলিস্ট পদ্ধতিতে Window.mediaItem হিসেবে CastTimeline-এ পাস করা হয়েছে (#২৫, #৮২১২)।
    • CastPlayer (#২৫) দিয়ে Player.getMetadata() ও Listener.onMediaMetadataChanged()-কে সাহায্য করুন।

ভার্সন 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.Parameters.Builder ফিরিয়ে আনুন, বন্ধ হয়ে যাওয়া DefaultTrackSelector.ParametersBuilder-এর পরিবর্তে।
    • 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 স্টাইল সেটিং সাপোর্ট করে (#৮৪৩৫)।
    • CEA-708: একাধিক পরিষেবা ব্লকে ডেটা পার্স করুন এবং বর্তমানে বেছে নেওয়া পরিষেবা নম্বরের সাথে সম্পর্কিত নয় এমন ব্লক উপেক্ষা করুন।
    • RawCcExtractor সরিয়ে দিন, যা শুধুমাত্র Google-এর ইন্টার্নাল সাবটাইটেল ফর্ম্যাট ম্যানেজ করার জন্য ব্যবহার করা হয়েছিল।
  • এক্সট্র্যাক্টর:
    • AVI-এর জন্য সহায়তা যোগ করুন (#২০৯২)।
    • Matroska: Opus ট্র্যাকের জন্য DiscardPadding পার্স করুন।
    • MP4: esds বক্স থেকে বিটরেট পার্স করুন।
    • Ogg: ডুপ্লিকেট Opus ID এবং কমেন্ট হেডার অনুমোদন করুন (#10038)।
  • UI:
    • useController=false-এর ক্ষেত্রে PlayerView-এ সেট করা OnClickListener-এ ইভেন্ট ডেলিভারি সংক্রান্ত সমস্যার সমাধান করুন (#9605)। এছাড়াও, সব ভিউ কনফিগারেশনের জন্য OnLongClickListener-এ ইভেন্ট ডেলিভারি সংক্রান্ত সমস্যার সমাধান করুন।
    • ACTION_UP-এর আগে PlayerView-এর বাউন্ডারি থেকে বেরিয়ে যাওয়া টাচ ইভেন্টের সিকোয়েন্সকে ভুল করে ক্লিক হিসেবে বিবেচনা করার সমস্যার সমাধান করা হয়েছে (#৯৮৬১)।
    • PlayerView অ্যাক্সেসিবিলিটি সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে ট্যাপ করলে কন্ট্রোল লুকানোর পরিবর্তে প্লেব্যাক টগল হতে পারে (#৮৬২৭)।
    • ExoPlayer-এর পরিবর্তে Player ইন্টারফেসের সাথে কাজ করার জন্য TrackSelectionView এবং TrackSelectionDialogBuilder আবার লেখো। এটি ভিউকে অন্যান্য Player ইমপ্লিমেন্টেশনের সাথে ব্যবহার করার অনুমতি দেয় এবং UI মডিউল থেকে ExoPlayer মডিউলের নির্ভরতা সরিয়ে দেয়। এটি একটি ব্রেকিং পরিবর্তন।
    • PlayerView ট্র্যাক সিলেক্টরে ফোর্সড টেক্সট ট্র্যাক দেখাবেন না এবং "কোনওটিই নয়" বিকল্প বেছে নেওয়া হলে উপযুক্ত ফোর্সড টেক্সট ট্র্যাক বেছে নিন (#৯৪৩২)।
  • DASH:
    • DTS AudioChannelConfiguration এলিমেন্ট থেকে চ্যানেল সংখ্যা পার্স করুন। এটি DTS স্ট্রিমের জন্য অডিও পাসথ্রু আবার চালু করে (#১০১৫৯)।
    • DashMediaSource.Factory.setCompositeSequenceableLoaderFactory-এ null পাস করার অনুমতি দেবেন না। প্রয়োজন হলে DefaultCompositeSequenceableLoaderFactory-এর ইনস্ট্যান্স স্পষ্টভাবে পাস করা যেতে পারে।
  • HLS:
    • প্লেলিস্টের CODECS অ্যাট্রিবিউটে অডিও কোডেক না থাকলে চাঙ্কফুল প্রস্তুতিতে ফিরে যান (#১০০৬৫)।
    • null-কে HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory এবং HlsMediaSource.Factory.setPlaylistTrackerFactory-এ পাস করার অনুমতি দেবেন না। প্রয়োজন হলে DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory-এর ইনস্ট্যান্স অথবা DefaultHlsPlaylistTracker.FACTORY-এর রেফারেন্স স্পষ্টভাবে পাস করা যেতে পারে।
  • স্মুথ স্ট্রিমিং:
    • SsMediaSource.Factory.setCompositeSequenceableLoaderFactory-এ null পাস করার অনুমতি দেবেন না। প্রয়োজন হলে DefaultCompositeSequenceableLoaderFactory-এর ইনস্ট্যান্স স্পষ্টভাবে পাস করা যেতে পারে।
  • RTSP:
    • H263-এর জন্য RTP রিডার যোগ করুন (#63)।
    • MPEG4-এর জন্য RTP রিডার যোগ করুন (#৩৫)।
    • HEVC-এর জন্য RTP রিডার যোগ করুন (#৩৬)।
    • AMR-এর জন্য RTP রিডার যোগ করুন। বর্তমানে শুধুমাত্র মনো-চ্যানেল, নন-ইন্টারলিভড AMR স্ট্রিম কাজ করে। কম্পাউন্ড AMR RTP পেলোড কাজ করে না। (#46)
    • VP8-এর জন্য RTP রিডার যোগ করুন (#৪৭)।
    • WAV-এর জন্য RTP রিডার যোগ করুন (#56)।
    • RTSP বেসিক অথরাইজেশন হেডার সংক্রান্ত সমস্যার সমাধান করুন। (#9544)।
    • ExoPlayer-এর প্রয়োজন নেই বলে বাধ্যতামূলক SDP ফিল্ড চেক করা বন্ধ করুন (#10049)।
    • RTSP টাইমিং পার্স করার সময় চেক করা ব্যতিক্রম থ্রো করুন (#১০১৬৫)।
    • VP9-এর জন্য RTP রিডার যোগ করুন (#47)।
    • OPUS-এর জন্য RTP রিডার যোগ করুন (#53)।
  • ডেটা সোর্স:
    • 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 সংক্রান্ত সমস্যার সমাধান করুন (#৫৯)।
    • টাইমলাইনে সেশন পজিশন সংক্রান্ত তথ্য আপডেট করুন পরিবর্তন(#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 স্ট্রিমে বিজ্ঞাপন চলাকালীন অডিও আন্ডাররান সংক্রান্ত সমস্যার সমাধান করুন।

ভার্সন 1.0.0-alpha02

২ মার্চ, ২০২২

androidx.media3:media3-*:1.0.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha02-এ এইসব কমিট রয়েছে।

এটি 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-এর মাধ্যমে এটি স্ট্রিপ করা যায়।
  • ট্র্যাক বেছে নেওয়া:
    • ট্র্যাক বেছে নেওয়ার সময় পছন্দের ভিডিও রোল ফ্ল্যাগ সংক্রান্ত সহায়তা (#৯৪০২)।
    • অ্যাডাপ্টেশনের জন্য একাধিক ভিডিও ট্র্যাক বেছে নেওয়ার সময়, পছন্দের MIME-এর প্রকার ও রোল ফ্ল্যাগ বিবেচনা করার জন্য ভিডিও ট্র্যাক বেছে নেওয়ার লজিক আপডেট করুন (#9519)।
    • ভিডিও ও অডিও ট্র্যাক বেছে নেওয়ার লজিক আপডেট করা হয়েছে যাতে অ্যাডাপ্টিভ সিলেকশনের জন্য শুধু সেইসব ফর্ম্যাট বেছে নেওয়া হয় যেগুলির ডিকোডার ও হার্ডওয়্যার সাপোর্ট একই লেভেলের (#9565)।
    • প্রাইমারি, হার্ডওয়্যার-অ্যাক্সিলারেটেড ডিকোডার দ্বারা একাধিক কোডেক সমর্থিত হলে আরও দক্ষ কোডেক পছন্দ করার জন্য ভিডিও ট্র্যাক নির্বাচন লজিক আপডেট করুন (#4835).
    • টেকনিক্যাল ট্র্যাক বেছে নেওয়ার সীমাবদ্ধতার (যেমন, পছন্দের MIME-এর প্রকার বা সর্বাধিক চ্যানেল সংখ্যা) পরিবর্তে অডিও কন্টেন্ট সংক্রান্ত পছন্দ (যেমন, "ডিফল্ট" অডিও ট্র্যাক বা সিস্টেমের স্থানীয় ভাষার সাথে ম্যাচ করে এমন ট্র্যাক) বেছে নিন।
    • ট্র্যাক বেছে নেওয়ার সমস্যা সমাধান করা হয়েছে যেখানে একটি ট্র্যাক গ্রুপ ওভাররাইড করলে একই ধরনের অন্য ট্র্যাক গ্রুপ বন্ধ হয়ে যেত না (#৯৬৭৫)।
    • ট্র্যাক বেছে নেওয়া সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে খালি নয় এবং খালি ট্র্যাক ওভাররাইডের মিশ্রণ সঠিকভাবে প্রয়োগ করা হয় না (#৯৬৪৯)।
    • TrackGroupArray-এ ডুপ্লিকেট TrackGroup নিষিদ্ধ করুন। TrackGroup কনস্ট্রাক্টরে id সেট করে TrackGroup-কে সবসময় আলাদা করে চেনা যায়। এটি অ্যাক্টিভ ট্র্যাক ওভাররাইড সহ অ্যাপ ব্যাকগ্রাউন্ডে পাঠানোর পরে প্লেব্যাক আবার শুরু করার সময় ক্র্যাশ হওয়ার সমস্যা সমাধান করে (#9718)।
    • AdaptiveTrackSelection-এ লজিক সংশোধন করুন যাতে প্লেব্যাক লাইভ এজের খুব কাছাকাছি থাকলেও পর্যাপ্ত নেটওয়ার্ক ব্যান্ডউইথের অধীনে কোয়ালিটি বাড়ানোর অনুমতি দেওয়া যায় (#৯৭৮৪)।
  • ভিডিও:
    • প্রয়োজন হলে, Dolby Vision-এর জন্য ডিকোডার ফলব্যাক লজিক ঠিক করুন যাতে মানানসই H264/H265 ডিকোডার ব্যবহার করা যায়।
  • অডিও:
    • প্রয়োজন হলে, মানানসই E-AC3 ডিকোডার ব্যবহার করার জন্য Dolby Atmos (E-AC3-JOC)-এর ডিকোডার ফলব্যাক লজিক ঠিক করুন।
    • AudioCapabilities API পরিবর্তন করুন যাতে null-এর পরিবর্তে স্পষ্টভাবে AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES পাস করতে হয়।
    • AudioTrackBufferSizeProvider-কে DefaultAudioSink-এ ইনজেক্ট করার মাধ্যমে AudioTrack বাফার সাইজ গণনা কাস্টমাইজ করার অনুমতি দিন। (#8891).
    • অনুরোধ করা বাফার সাইজ > ১ এমবি হলে, AudioTrack তৈরি করার জন্য আবার চেষ্টা করুন। (#9712)।
  • এক্সট্র্যাক্টর:
    • WAV: RF64 স্ট্রিমের জন্য সহায়তা যোগ করা হয়েছে (#9543)।
    • H.265 SPS NAL ইউনিটের ভুল পার্সিং সংক্রান্ত সমস্যার সমাধান করা হয়েছে (#9719)।
    • Ogg Opus এবং Ogg Vorbis ফাইলে Vorbis কমেন্ট (METADATA_BLOCK_PICTURE সহ) পার্স করুন।
  • টেক্সট:
    • একটি MediaItem.SubtitleConfiguration.id ফিল্ড যোগ করুন যা কনফিগারেশন থেকে তৈরি সাবটাইটেল ট্র্যাকের Format.id ফিল্ডে প্রচার করা হয় (#9673)।
    • Matroska কন্টেনারে WebVTT সাবটাইটেলের জন্য প্রাথমিক সহায়তা যোগ করা হয়েছে (#9886)।
    • Cea708Decoder-কে কোনও পরিষেবা ব্লকের ঘোষিত সাইজের চেয়ে বেশি ডেটা পড়া থেকে আটকায়।
  • DRM:
    • DrmSessionManager.(pre)acquireSession থেকে playbackLooper সরান। কোনও অ্যাপ কাস্টম MediaSource-এ DrmSessionManager ব্যবহার করলে, playbackLooper-এর পরিবর্তে DrmSessionManager.setPlayer পাস করতে হবে।
  • বিজ্ঞাপন প্লেব্যাক / IMA:
    • IMA ডায়নামিক বিজ্ঞাপন ইনসার্শন (DAI)-এর জন্য সহায়তা যোগ করুন (#8213).
    • AdPlaybackState-এ একটি পদ্ধতি যোগ করুন যাতে বিজ্ঞাপন গ্রুপ রিসেট করার অনুমতি দেওয়া যায় এবং এটি আবার চালানো যায় (#৯৬১৫)।
    • বিজ্ঞাপন প্লেব্যাকের সময় প্লেব্যাক স্পিড ১.০-এ সেট করুন (#9018)।
    • বিজ্ঞাপন গ্রুপ লোড না হওয়ার কারণে অবিলম্বে প্লেব্যাক রিসেট হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে (#9929)।
  • UI:
    • নির্দিষ্ট কিছু থিম ব্যবহার করার সময় StyledPlayerView রিওয়াইন্ড ও ফাস্টফরওয়ার্ড বোতামে নম্বরের রঙ ঠিক করা (#9765)।
    • প্লেব্যাক স্পিড স্ট্রিং সঠিকভাবে অনুবাদ করুন (#9811).
  • DASH:
    • Representation-এ পার্স করা প্রয়োজনীয় ও সাপ্লিমেন্টাল প্রপার্টি যোগ করুন (#9579)।
    • forced-subtitle ট্র্যাক রোলের জন্য সহায়তা (#9727)।
    • main ট্র্যাকের ভূমিকা C.SELECTION_FLAG_DEFAULT হিসেবে ব্যাখ্যা করা বন্ধ করুন।
    • DVB নেমস্পেস (#৯৮৫৬) ঘোষণা করে না এমন ম্যানিফেস্টের জন্য বেস URL এক্সক্লুশন লজিক ঠিক করুন।
    • রিলেটিভ MPD.Location URL-এর জন্য সহায়তা (#9939).
  • HLS:
    • শুধুমাত্র অডিও HLS স্ট্রিমের জন্য Format.label সঠিকভাবে পপুলেট করুন (#9608)।
    • শুরু করার সময় উন্নত করতে ডিফল্ট হিসেবে চাঙ্কলেস প্রস্তুতি ব্যবহার করুন। আপনার রেন্ডিশনে যদি মাক্সড ক্লোজড-ক্যাপশন ট্র্যাক থাকে যা মাস্টার প্লেলিস্টে ঘোষণা করা হয়নি, তাহলে প্লেব্যাকের জন্য উপলভ্য করতে আপনাকে সেগুলি মাস্টার প্লেলিস্টে যোগ করতে হবে অথবা HlsMediaSource.Factory.setAllowChunklessPreparation(false)-এর মাধ্যমে চাঙ্কলেস প্রস্তুতি বন্ধ করতে হবে।
    • HLS-এ কী-ফ্রেম অ্যাকুরেট সিকিংয়ের সুবিধা (#২৮৮২)।
  • RTSP:
    • যেকোনও সার্ভার কানেকশনের জন্য ব্যবহৃত SocketFactory ওভাররাইড করতে ক্লায়েন্ট API প্রদান করুন (#৯৬০৬)।
    • BASIC-এর পরিবর্তে DIGEST যাচাইকরণ পদ্ধতি ব্যবহার করুন, যদি দুটিই থাকে (#9800)।
    • RTSP ট্র্যাক টাইমিং উপলভ্য না থাকলে হ্যান্ডেল করুন (#9775).
    • ভুল RTP-Info হেডার ভ্যালু উপেক্ষা করুন (#9619).
  • ট্রান্সফর্মার:
    • প্রয়োজনীয় ন্যূনতম API ভার্সন বাড়িয়ে ২১ করুন।
    • ট্রান্সফর্মেশনের সময় হওয়া সমস্যা বর্ণনা করতে এখন TransformationException ব্যবহার করা হয়।
    • ট্রান্সফর্মেশনের বিকল্প নির্দিষ্ট করতে TransformationRequest যোগ করুন।
    • একাধিক শ্রোতাকে রেজিস্টার করার অনুমতি দিন।
    • কোডেক আউটপুট আংশিকভাবে পড়া হলে ট্রান্সফরমার আটকে যাওয়ার সমস্যা সমাধান করুন।
    • muxer রিলিজ করার সময় Transformer.getProgress-এ সম্ভাব্য NPE সংক্রান্ত সমস্যার সমাধান করুন।
    • ট্রান্সফর্মেশন প্রয়োগ করার জন্য একটি ডেমো অ্যাপ যোগ করুন।
  • MediaSession এক্সটেনশন:
    • ডিফল্ট হিসেবে, MediaSessionConnector এখন বন্ধ করার সময় প্লেলিস্ট মুছে দেয়। যেসব অ্যাপ প্লেলিস্ট রেখে দিতে চায়, তারা কানেক্টরে setClearMediaItemsOnStop(false) কল করতে পারে।
  • কাস্ট এক্সটেনশন:
    • CastPlayer থেকে onIsPlayingChanged-এ কল করার সময় হওয়া সমস্যার সমাধান করা হয়েছে (#9792)।
    • DefaultMediaItemConverter (#9663)-এর সাথে আর্টওয়ার্ক সহ অডিও মেটাডেটা সাপোর্ট করুন।
  • 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। অ্যাপগুলিকে Media3-তে মাইগ্রেট করার জন্য সময় দিতে আমরা কিছু সময়ের জন্য ExoPlayer GitHub প্রোজেক্ট বজায় রাখা এবং রিলিজ করা চালিয়ে যাওয়ার পরিকল্পনা করেছি। ExoPlayer-এর সব মডিউলের জন্য Media3-তে বিকল্প আছে, তবে পুরনো media2 এবং mediasession এক্সটেনশনের জন্য নেই, যেগুলি নতুন media3-session মডিউল দ্বারা প্রতিস্থাপিত হয়। এটি প্লেয়ার ও মিডিয়া সেশনের মধ্যে সরাসরি ইন্টিগ্রেশন প্রদান করে, যার জন্য কোনও অ্যাডাপ্টার/কানেক্টর ক্লাস ব্যবহার করতে হয় না।