एक अच्छा Android बनाने के लिए APK का साइज़ कम करना, एक अहम पहलू है है. खास तौर पर, ऐसा तब होता है, जब विकासशील बाज़ारों को टारगेट किया जा रहा हो और Android Instant App डेवलप करते समय भी आपको मदद मिल सकती है. ऐसे मामलों में यह जानना ज़रूरी हो सकता है कि APK में शामिल ExoPlayer लाइब्रेरी का साइज़ छोटा करने के लिए. यह इस पेज पर कुछ आसान तरीकों के बारे में बताया गया है.
सिर्फ़ ज़रूरी डिपेंडेंसी का इस्तेमाल करना
यह सिर्फ़ उन लाइब्रेरी मॉड्यूल पर निर्भर करता है जिनकी आपको असल में ज़रूरत है. उदाहरण के लिए, ये नियम ExoPlayer, DASH, और यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी के मॉड्यूल पर डिपेंडेंसी जोड़ देंगे, जैसा कि आपको सिर्फ़ DASH कॉन्टेंट चलाने वाले ऐप्लिकेशन के लिए ज़रूरी हो सकता है:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
कोड और संसाधन का साइज़ कम करने की सुविधा चालू करना
आपको अपने ऐप्लिकेशन के रिलीज़ के लिए तैयार बिल्ड के लिए, कोड और संसाधन को छोटा करने की सुविधा चालू करनी चाहिए. ExoPlayer को इस तरह से बनाया गया है कि इसकी मदद से कोड छोटा हो जाता है असरदार तरीके से हटा दें. उदाहरण के लिए, DASH कॉन्टेंट चलाने वाले ऐप्लिकेशन के लिए, कोड को छोटा करने की सुविधा चालू करके, APK के साइज़ में ExoPlayer के योगदान को करीब 40% तक कम किया जा सकता है.
कोड और संसाधन को छोटा करने की सुविधा चालू करने का तरीका जानने के लिए, अपने ऐप्लिकेशन को छोटा करना, उलझाना, और ऑप्टिमाइज़ करना लेख पढ़ें.
बताएं कि आपके ऐप्लिकेशन को किन रेंडरर की ज़रूरत है
डिफ़ॉल्ट रूप से, प्लेयर के रेंडरर
DefaultRenderersFactory
. DefaultRenderersFactory
, इन सभी चीज़ों पर निर्भर करता है
ExoPlayer लाइब्रेरी में, Renderer
लागू करने की सुविधा मिली है.
कोड छोटा करने की सुविधा की मदद से, इनमें से कोई भी नहीं हटाया जाएगा. अगर आपको पता है कि सिर्फ़ आपका ऐप्लिकेशन
को रेंडरर का सबसेट चाहिए, तो आप अपना खुद का RenderersFactory
तय कर सकते हैं
आज़माएं. उदाहरण के लिए, सिर्फ़ ऑडियो चलाने वाला ऐप्लिकेशन ऐसी फ़ैक्ट्री तय कर सकता है जो
ExoPlayer
इंस्टेंस को इंस्टैंशिएट करते समय यह:
Kotlin
val audioOnlyRenderersFactory = RenderersFactory { handler: Handler, videoListener: VideoRendererEventListener, audioListener: AudioRendererEventListener, textOutput: TextOutput, metadataOutput: MetadataOutput, -> arrayOf<Renderer>( MediaCodecAudioRenderer(context, MediaCodecSelector.DEFAULT, handler, audioListener) ) } val player = ExoPlayer.Builder(context, audioOnlyRenderersFactory).build()
Java
RenderersFactory audioOnlyRenderersFactory = (handler, videoListener, audioListener, textOutput, metadataOutput) -> new Renderer[] { new MediaCodecAudioRenderer( context, MediaCodecSelector.DEFAULT, handler, audioListener) }; ExoPlayer player = new ExoPlayer.Builder(context, audioOnlyRenderersFactory).build();
इससे कोड को छोटा करके, Renderer
के अन्य लागू होने वाले वर्शन हटाए जा सकेंगे. इस उदाहरण वीडियो में, टेक्स्ट और मेटाडेटा रेंडरर
हटाया गया (इसका मतलब है कि सबटाइटल या इन-स्ट्रीम मेटाडेटा (उदाहरण के लिए,
ICY),
प्लेयर).
बताएं कि आपके ऐप्लिकेशन को किन एक्सट्रैक्टर की ज़रूरत है
डिफ़ॉल्ट रूप से, प्लेयर DefaultExtractorsFactory
का इस्तेमाल करके प्रोग्रेसिव मीडिया चलाने के लिए, Extractor
इंस्टेंस बनाता है. DefaultExtractorsFactory
, इन सभी चीज़ों पर निर्भर करता है
ExoPlayer लाइब्रेरी में, Extractor
लागू करने की सुविधा मिली है.
कोड छोटा करने की सुविधा की मदद से, इनमें से कोई भी नहीं हटाया जाएगा. अगर आपको पता है कि आपके ऐप्लिकेशन को सिर्फ़ कुछ कंटेनर फ़ॉर्मैट चलाने हैं या वह प्रोग्रेसिव मीडिया बिलकुल नहीं चलाता, तो इसके बजाय अपना ExtractorsFactory
तय किया जा सकता है. उदाहरण के लिए, ऐसा ऐप्लिकेशन जिसे सिर्फ़ MP4 फ़ाइलें चलानी हैं वह इस तरह की फ़ैक्ट्री दे सकता है:
Kotlin
val mp4ExtractorFactory = ExtractorsFactory { arrayOf<Extractor>(Mp4Extractor(DefaultSubtitleParserFactory())) } val player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, mp4ExtractorFactory)).build()
Java
ExtractorsFactory mp4ExtractorFactory = () -> new Extractor[] {new Mp4Extractor(new DefaultSubtitleParserFactory())}; ExoPlayer player = new ExoPlayer.Builder(context, new DefaultMediaSourceFactory(context, mp4ExtractorFactory)) .build();
ऐसा करने से, लागू किए गए Extractor
के अन्य विकल्पों को कोड की मदद से हटाया जा सकेगा
सिकुड़ने की वजह से, साइज़ में काफ़ी कमी आ सकती है.
अगर आपका ऐप्लिकेशन प्रगतिशील कॉन्टेंट बिल्कुल नहीं चला रहा है, तो आपको ExtractorsFactory.EMPTY
को DefaultMediaSourceFactory
कन्स्ट्रक्टर में पास करना चाहिए. इसके बाद, उस mediaSourceFactory
को ExoPlayer.Builder
कन्स्ट्रक्टर में पास करें.
Kotlin
val player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, ExtractorsFactory.EMPTY)).build()
Java
ExoPlayer player = new ExoPlayer.Builder( context, new DefaultMediaSourceFactory(context, ExtractorsFactory.EMPTY)) .build();
कस्टम MediaSource इंस्टैंशिएट करना
अगर आपका ऐप्लिकेशन पसंद के मुताबिक MediaSource.Factory
का इस्तेमाल कर रहा है और आप
कोड स्ट्रिपिंग से निकालने के लिए DefaultMediaSourceFactory
, आपको पास करना होगा
अपने MediaSource.Factory
को सीधे ExoPlayer.Builder
कंस्ट्रक्टर से कनेक्ट करें.
Kotlin
val player = ExoPlayer.Builder(context, customMediaSourceFactory).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context, mediaSourceFactory).build();
अगर आपका ऐप्लिकेशन MediaItem
के बजाय सीधे MediaSource
का इस्तेमाल कर रहा है, तो आपको यह करना चाहिए
MediaSource.Factory.UNSUPPORTED
को ExoPlayer.Builder
कंस्ट्रक्टर को पास करें,
ताकि यह पक्का किया जा सके कि DefaultMediaSourceFactory
और DefaultExtractorsFactory
कोड छोटा करने की सुविधा से हटाया जाता है.
Kotlin
val player = ExoPlayer.Builder(context, MediaSource.Factory.UNSUPPORTED).build() val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory, customExtractorsFactory) .createMediaSource(MediaItem.fromUri(uri))
Java
ExoPlayer player = new ExoPlayer.Builder(context, MediaSource.Factory.UNSUPPORTED).build(); ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory, customExtractorsFactory) .createMediaSource(MediaItem.fromUri(uri));