कैसे करें

Media3 1.11 - नया क्या है?

पढ़ने में 3 मिनट लगेंगे
Toni Heidenreich की प्रोफ़ाइल देखना
Toni Heidenreich सॉफ़्टवेयर इंजीनियर, Android

Media3 1.11 उपलब्ध है. यह रिलीज़, Android के ज़्यादातर मीडिया ऐप्लिकेशन को बेहतर बनाती है. इसमें नई सुविधाएं जोड़ी गई हैं, गड़बड़ियां ठीक की गई हैं, और प्लेबैक, एडिटिंग, और यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट को बेहतर बनाया गया है. हम Jetpack Compose के यूज़र इंटरफ़ेस (यूआई) मॉड्यूल को बढ़ा रहे हैं. इनमें पसंद के मुताबिक बनाए जा सकने वाले Player स्लॉट और इस्तेमाल करने में आसान डिफ़ॉल्ट, इंटरैक्टिव जेस्चर, स्टेट ऑब्ज़र्वर, और PlayerPool का इस्तेमाल करके कम अवधि के वीडियो को पहले से लोड करने की सुविधा शामिल है. हमने Media3 Cast इंटिग्रेशन को भी बेहतर बनाया है. इसमें SystemUI Output Switcher की सुविधा जोड़ी गई है. साथ ही, हमने नया Ktor HTTP क्लाइंट नेटवर्क एक्सटेंशन लॉन्च किया है. इसके अलावा, Ogg और WAV फ़ाइलों के लिए नई मक्सिंग यूटिलिटी जोड़ी गई हैं.

मुख्य हाइलाइट के बारे में पढ़ें. साथ ही, बदलावों की पूरी सूची देखने के लिए, रिलीज़ नोट देखें.

प्लेबैक यूज़र इंटरफ़ेस (यूआई) और कंपोज़

Android में Compose को डिफ़ॉल्ट टूल के तौर पर इस्तेमाल किया जा रहा है. इसलिए, हम media3-ui-compose और media3-ui-compose-material3 मॉड्यूल को लगातार बेहतर बना रहे हैं. इस अपडेट में, प्लेयर लेआउट पर ज़्यादा विस्तृत कंट्रोल, बेहतर इंटरैक्शन पैटर्न, और Material3 के साथ बेहतर इंटिग्रेशन की सुविधा जोड़ी गई है.

अपनी पसंद के मुताबिक प्लेयर का लेआउट

Material 3 Player Composable अब topControls, centerControls, bottomControls, और errorOverlay के लिए, कॉन्टेंट के अलग-अलग स्लॉट के साथ काम करता है. आपके पास अपने कंपोज़ेबल जोड़ने या PlayerDefaults में पब्लिश किए गए, पहले से तैयार डिफ़ॉल्ट का इस्तेमाल करने का विकल्प होता है:

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Player कंपोज़ेबल में FocusRequester की सुविधा भी शामिल है. इससे Android TV, फ़ोल्ड किए जा सकने वाले डिवाइसों, और डेस्कटॉप एनवायरमेंट पर डी-पैड और कीबोर्ड से आसानी से नेविगेट किया जा सकता है. 

player_video.png
पसंद के मुताबिक बनाए गए कंट्रोल के साथ कंपोज़ेबल प्लेयर का उदाहरण

हावभाव और वीडियो चलाने की स्पीड कंट्रोल करने की सुविधा

PlaybackSpeedState अब फ़ास्ट-फ़ॉरवर्ड/स्लो-मोशन एपीआई उपलब्ध कराता है. demo-compose app में, वीडियो को तेज़ी से आगे बढ़ाने के लिए दबाकर रखने के जेस्चर और वीडियो में किसी खास हिस्से पर जाने के लिए दो बार टैप करने की सुविधा दिखाई गई है. 1.10 वर्शन में पेश किए गए ProgressSlider के साथ, Compose Player UI अब टच और जेस्चर के साथ इंटरैक्ट करने की बेहतर सुविधाएं देता है.

PlayerPool की मदद से, कम अवधि के वीडियो को पहले से लोड करना

स्लाइडिंग-विंडो वाले मीडिया फ़ीड (उदाहरण के लिए, कम अवधि का वर्टिकल वीडियो) वाले ऐप्लिकेशन के लिए, एक साथ कई ExoPlayer इंस्टेंस को मैनेज करना एक आम चुनौती है. Media3 1.11 में, प्लेयर रीसाइक्लिंग के लिए PlayerPool (common-ktx में) और प्रीलोडिंग के लिए rememberPooledPlayer (ui-compose में) की सुविधा जोड़ी गई है. इससे ये काम अपने-आप हो जाते हैं.

demo-compose में मौजूद नया ShortFormPlayerScreen इसे ऐक्शन में दिखाता है. यह वर्टिकल पेजिंग वाला फ़ीड है, जिसमें खिलाड़ियों को इकट्ठा किया जाता है, प्रीलोड किया जाता है, और उपयोगकर्ता के स्क्रोल करने पर उन्हें आसानी से रीसाइकल किया जाता है.

MiniController

media3-ui-compose-material3 में मौजूद नए MiniController कंपोज़ेबल में, कॉम्पैक्ट प्लेबैक बार दिखता है. इसमें, मौजूदा आइटम का टाइटल, कलाकार, आर्टवर्क, और प्रोग्रेस के साथ-साथ, 'चलाएं/रोकें' कंट्रोल दिखते हैं. media3-ui-compose-material3 में मौजूद हमारे सभी डिफ़ॉल्ट कंपोज़ेबल की तरह, MiniController में Material3 के डाइनैमिक कलर इंटिग्रेशन की सुविधा है. इससे यह उपयोगकर्ता के वॉलपेपर थीम के हिसाब से अपने-आप अडजस्ट हो जाता है. यह सुविधा, लगातार दिखने वाली बॉटम-शीट या मिनी-प्लेयर के लिए सबसे सही है. उदाहरण के लिए, जब उपयोगकर्ता कॉन्टेंट ब्राउज़ कर रहा हो या कास्टिंग के चालू सेशन के दौरान.

mini_player.png
एल्बम आर्ट, मीडिया मेटाडेटा, और बुनियादी कंट्रोल दिखाने वाला Media3 MiniController

मेटाडेटा और गड़बड़ियों के लिए, स्टेट होल्डर बढ़ाए गए

हमने media3-ui-compose में कई नए रिएक्टिव स्टेट होल्डर जोड़े हैं:

  • rememberCurrentMediaItemState – मौजूदा समय में चल रहे आइटम के बारे में मेटाडेटा देखना
  • rememberPlaylistState – पूरी प्लेलिस्ट और ऐक्टिव इंडेक्स देखें
  • rememberErrorState – ट्रैक प्लेबैक की गड़बड़ियां, Material3 में मिलते-जुलते ErrorText कंपोज़ेबल और डिफ़ॉल्ट ErrorOverlay के साथ

हम आने वाले समय में, नए विकल्प जोड़ने और ज़्यादा बेहतर तरीके से पसंद के मुताबिक बनाने की सुविधा उपलब्ध कराने पर काम करते रहेंगे. कृपया प्रोजेक्ट के लिए समस्या ट्रैकर के बारे में अपनी राय दें.

कास्ट इंटिग्रेशन को बेहतर बनाया गया

Media3 1.11, Cast एक्सटेंशन को प्रोग्राम के हिसाब से कॉन्फ़िगर करने के विकल्पों के साथ अपडेट करता है. साथ ही, ओएस-लेवल की राउटिंग के लिए सहायता भी उपलब्ध कराता है.

CastParams और SystemUI आउटपुट स्विचर

अब CastParams का इस्तेमाल करके, Cast एक्सटेंशन को कॉन्फ़िगर किया जा सकता है:

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

सेटिंग setShowSystemOutputSwitcherOnCastIconClick(true), MediaRouteButton को कॉन्फ़िगर करती है, ताकि यह काम करने वाले प्लैटफ़ॉर्म वर्शन पर Android के नेटिव SystemUI Output Switcher को खोल सके. इससे, आउटपुट चुनने का एक जैसा अनुभव मिलता है.

Compose में MediaRouteButton की प्रतिक्रियाशील स्थिति

Jetpack Compose का इस्तेमाल करने वाले ऐप्लिकेशन अब आसानी से मीडिया राउटिंग बटन (इसे कास्ट बटन भी कहा जाता है) जोड़ सकते हैं. यह बटन, डायलॉग की स्थिति को अपने-आप मॉनिटर करता है और उसके हिसाब से अपडेट होता है. Media3 के CastPlayer के साथ इसका इस्तेमाल करने पर, किसी अन्य लॉजिक की ज़रूरत नहीं होती!

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
Media3 का मीडिया रूट बटन, जो डिफ़ॉल्ट आउटपुट स्विचर डायलॉग लॉन्च करता है

प्लेबैक और सेशन से जुड़ी मुख्य सुविधाएं बेहतर बनाई गई हैं

Eclipsa Video - HAGC डाइनैमिक एचडीआर मेटाडेटा (API 37+)

Eclipsa Video की मदद से, सभी डिवाइसों पर एक जैसा एचडीआर अनुभव मिलता है. इसमें एचडीआर के लिए एक जैसा बेसलाइन वाइट, स्क्रीन और आस-पास के माहौल के हिसाब से अडैप्टिव हेडरूम होता है. इससे यह पक्का किया जाता है कि सभी डिवाइसों पर क्रिएटिव इंटेंट बना रहे.

ExoPlayer अब प्रोग्रेसिव मीडिया (MP4, Matroska) के लिए, ज़रूरी HAGC (ST 2094-50) टाइम किए गए मेटाडेटा को चलाने की सुविधा देता है. प्लेयर, HAGC मेटाडेटा ट्रैक को वीडियो ट्रैक के साथ अपने-आप मर्ज कर देता है. साथ ही, API 37 या इसके बाद के वर्शन वाले डिवाइसों पर डिकोडर को मेटाडेटा डिलीवर करता है. पुराने डिवाइसों पर, ExoPlayer बिना किसी बदलाव के स्टैंडर्ड एचडीआर प्लेबैक की सुविधा देता है.  

eclipsa.png
Eclipsa Video HDR के फ़ायदों को दिखाने वाला इलस्ट्रेशन. जैसे, रंग का बेहतर कंट्रास्ट

Ktor HTTP क्लाइंट का नया एक्सटेंशन

नए media3-datasource-ktor एक्सटेंशन मॉड्यूल में KtorDataSource की सुविधा मिलती है. यह Ktor एचटीटीपी स्टैक पर काम करता है. यह मौजूदा Cronet और OkHttp डेटा सोर्स मॉड्यूल के लिए, Kotlin-first और coroutine-friendly विकल्प उपलब्ध कराता है.

MediaSession से एसिंक्रोनस कनेक्शन

MediaSession.Callback में अब onConnectAsync() शामिल है. इसकी मदद से, कंट्रोलर को कनेक्ट करने की कोशिशों को एसिंक्रोनस तरीके से प्रोसेस किया जा सकता है. उदाहरण के लिए, कनेक्शन स्वीकार करने से पहले अनुमति की पुष्टि करना. मौजूदा onConnect की तरह काम करने वाले Future को Futures.immediateFuture(ConnectionResult) के साथ तुरंत वापस किया जा सकता है. 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

MediaSession के लिए ज़्यादा सुरक्षित डिफ़ॉल्ट सेटिंग

MediaSession.Callback में onConnect या onConnectAsync को बदलने वाले ऐप्लिकेशन के लिए, लाइब्रेरी अब डिफ़ॉल्ट रूप से ज़्यादा सुरक्षित कॉन्फ़िगरेशन पर सेट हो जाती है. खास तौर पर, सेशन का डेटा डिफ़ॉल्ट रूप से उन कंट्रोलर के साथ शेयर नहीं किया जाता जिन पर भरोसा नहीं किया जा सकता. इसका मतलब है कि तीसरे पक्ष या सिस्टम से बाहर के ऐसे ऐप्लिकेशन को सेशन का डेटा ऐक्सेस करने से रोका जाता है जिनके पास सूचनाएं पाने का ऐक्सेस नहीं है. हालांकि, अगर आपको कनेक्शन को अनुमति देनी है, तो आपको इन कॉलबैक तरीकों को साफ़ तौर पर लागू करना होगा.

मक्सर को लागू करने के नए तरीके और कंटेनर पार्सिंग

OggMuxer और WavMuxer

हमने दो नए Muxer जोड़े हैं: OggMuxer का इस्तेमाल OPUS और VORBIS स्ट्रीम को स्टैंडर्ड .ogg फ़ाइलों में मक्स करने के लिए किया जाता है. वहीं, WavMuxer का इस्तेमाल बिना कंप्रेस की गई और फ़्लोटिंग-पॉइंट पीसीएम .wav ऑडियो फ़ाइलें जनरेट करने के लिए किया जाता है.

कंटेनर पार्स करना और ट्रैक रेफ़रंस

  • MP4 ट्रैक के रेफ़रंस (tref): Mp4Muxer.addTrackReference की मदद से, डिपेंडेंट मेटाडेटा या ऑक्स ट्रैक को प्राइमरी वीडियो स्ट्रीम से लिंक किया जा सकता है.
  • चैप्टर की जानकारी निकालना: QuickTime और Nero चैप्टर की जानकारी को अब MP4 फ़ाइलों (.m4a.m4b) और Matroska चैप्टर से Chapter मेटाडेटा एंट्री के तौर पर निकाला जाता है. इससे ऑडियो बुक और पॉडकास्ट को नेविगेट करने में मदद मिलती है.

अगर आपको कोई गड़बड़ी रिपोर्ट करनी है, कोई सवाल पूछना है या किसी सुविधा का अनुरोध करना है, तो कृपया समस्या को ट्रैक करने वाले टूल का इस्तेमाल करें. हमें आपके जवाब का इंतज़ार रहेगा!

लेखक:
पढ़ना जारी रखें