CompositionPlayer की मदद से, बदलावों की झलक देखना

Jetpack Media3 लाइब्रेरी, CompositionPlayer एपीआई उपलब्ध कराती है. यह Player को लागू करने का एक बेहतरीन तरीका है. इसकी मदद से, वीडियो में किए गए बदलावों की झलक रीयल टाइम में देखी जा सकती है. अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं को वीडियो में बदलाव करने की सुविधा देता है, तो CompositionPlayer की मदद से, आउटपुट की सटीक झलक दिखाई जा सकती है. उदाहरण के लिए, इफ़ेक्ट लागू करना, वीडियो का कुछ हिस्सा काटना या कई इनपुट मीडिया आइटम को मिलाकर एक वीडियो बनाना. यह सुविधा तब काम की हो सकती है, जब आपको लागू किए गए बदलावों को सेव न करना हो या एक्सपोर्ट के लिए फ़ाइनल वीडियो में बदलावों को शामिल करने से पहले, यह पुष्टि करनी हो कि बदलावों को सही तरीके से कॉन्फ़िगर किया गया है.

CompositionPlayer क्या है?

CompositionPlayer Player इंटरफ़ेस को लागू करने का एक खास तरीका है. इसे खास तौर पर Composition ऑब्जेक्ट चलाने के लिए डिज़ाइन किया गया है. Composition से यह तय होता है कि वीडियो क्लिप और ऑडियो ट्रैक जैसी इनपुट मीडिया ऐसेट को कैसे व्यवस्थित किया जाए. साथ ही, उन पर कौनसे ऑडियो और वीडियो इफ़ेक्ट लागू किए जाएं. Composition एपीआई के बारे में ज़्यादा जानने के लिए, मीडिया आइटम का Composition तय करना लेख पढ़ें.

CompositionPlayer का मुख्य मकसद, इस Composition को रीयल टाइम में रेंडर करना है. इसमें, तय किए गए सभी बदलाव शामिल होते हैं. इससे उपयोगकर्ताओं को यह देखने में मदद मिलती है कि एक्सपोर्ट की प्रोसेस शुरू करने से पहले, उनके किए गए बदलाव कैसे दिखेंगे. एक्सपोर्ट की प्रोसेस में समय और संसाधन ज़्यादा लग सकते हैं. इसके बाद, एक्सपोर्ट के लिए Composition ऑब्जेक्ट का इस्तेमाल Transformer इंस्टेंस के साथ किया जा सकता है. इसके बारे में ज़्यादा जानने के लिए, Composition एक्सपोर्ट करना लेख पढ़ें.

CompositionPlayer बनाम ExoPlayer

CompositionPlayer और ExoPlayer, दोनों ही Media3 में Player को लागू करने के तरीके हैं . हालांकि, इन्हें अलग-अलग स्थितियों के लिए ऑप्टिमाइज़ किया गया है:

सुविधा

CompositionPlayer

ExoPlayer

इनपुट मीडिया

इसमें एक Composition ऑब्जेक्ट लिया जाता है. इसमें, हर आइटम के लिए इफ़ेक्ट के साथ, कई EditedMediaItem इंस्टेंस शामिल हो सकते हैं.

इसमें एक MediaItem या प्लेलिस्ट ली जाती है.

टाइमलाइन

टाइमलाइन और अवधि, पूरे Composition पर आधारित होती हैं.

टाइमलाइन और अवधि, फ़िलहाल चल रहे MediaItem के हिसाब से होती हैं.

इफ़ेक्ट

इफ़ेक्ट, Composition में तय किए जाते हैं. इन्हें किसी EditedMediaItem या पूरे Composition पर लागू किया जा सकता है.

इफ़ेक्ट, ExoPlayer इंस्टेंस पर setVideoEffects() की मदद से सेट किए जाते हैं. साथ ही, हर इफ़ेक्ट को प्लेलिस्ट में मौजूद हर आइटम पर अलग-अलग लागू किया जाता है.

असल में, CompositionPlayer तब सबसे ज़्यादा काम आता है, जब आपको मीडिया और इफ़ेक्ट के किसी जटिल Composition को रेंडर करना हो. आम तौर पर, ऐसा एडिटिंग के दौरान होता है. ऑडियो या वीडियो कॉन्टेंट को सामान्य तरीके से चलाने के लिए या setVideoEffects() की मदद से, एक ऐसेट में किए गए बदलावों की झलक देखने के लिए, ExoPlayer का इस्तेमाल करें.

झलक देखने के लिए CompositionPlayer

अपने ऐप्लिकेशन में CompositionPlayer को इंटिग्रेट करने के लिए, ये चरण पूरे करने होंगे. सबसे पहले, Builder पैटर्न का इस्तेमाल करके, CompositionPlayer का इंस्टेंस बनाएं. इसके बाद, चलाने के लिए Composition सेट करें:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

Composition बनाने के तरीके के बारे में जानने के लिए, Composition बनाना सेक्शन देखें.

ध्यान दें कि चूंकि CompositionPlayer Player इंटरफ़ेस को लागू करता है, आप फिर टारगेट आउटपुट सेट कर सकते हैं और स्टैंडर्ड Player तरीकों से प्लेयर को कंट्रोल कर सकते हैं.

गड़बड़ी ठीक करना

प्लेबैक इवेंट और गड़बड़ियों पर प्रतिक्रिया देने के लिए, अपने CompositionPlayer में Player.Listener इंस्टेंस जोड़ें. onPlayerError() कॉलबैक, एडिटिंग से जुड़े कॉम्पोनेंट से जुड़ी किसी भी समस्या को भी दिखाता है. जैसे, Composition या VideoGraph.Factory. ज़्यादा जानकारी के लिए, प्लेयर इवेंट की जानकारी देने वाला दस्तावेज़ पढ़ें.

इन बातों पर ध्यान देना ज़रूरी है

CompositionPlayer का इस्तेमाल करते समय, कुछ सुविधाओं और सीमाओं का ध्यान रखना चाहिए:

  • हालांकि, CompositionPlayer, Player इंटरफ़ेस पर आधारित है, लेकिन इसके कुछ व्यवहार ExoPlayer से अलग होते हैं. ऐसा इसलिए है, क्योंकि यह प्लेबैक के लिए Composition पर निर्भर करता है. उदाहरण के लिए, CompositionPlayer में, रिपीट मोड को सिर्फ़ REPEAT_MODE_OFF या REPEAT_MODE_ALL पर सेट किया जा सकता है.
  • डिफ़ॉल्ट रूप से, CompositionPlayer SingleInputVideoGraph.Factory का इस्तेमाल करता है. हालांकि, अगर आपके Composition में इमेज या वीडियो आइटम के साथ एक से ज़्यादा सीक्वेंस हैं, तो आपको अपने CompositionPlayer इंस्टेंस को बनाते समय, setVideoGraphFactory() का इस्तेमाल करना चाहिए. इससे, MultipleInputVideoGraph.Factory का इस्तेमाल किया जा सकेगा. अगर सिर्फ़ एक सीक्वेंस में इमेज या वीडियो आइटम हैं और बाकी सिर्फ़ ऑडियो हैं, तो SingleInputVideoGraph.Factory का इस्तेमाल किया जा सकता है.
  • आपके Composition में मौजूद सभी मीडिया आइटम की अवधि साफ़ तौर पर सेट होनी चाहिए, इसके लिए, इमेज के लिए MediaItem.Builder.setImageDurationMs() या ऑडियो या वीडियो के लिए EditedMediaItem.Builder.setDurationUs() का इस्तेमाल करें.

इन स्थितियों में, ऑफ़र उपलब्ध कराने की शर्तें तय की जा सकती हैं:

  • एक ऐसेट की झलक.
  • एक सीक्वेंस (यानी, क्रम से लगाए गए मीडिया आइटम) की झलक.
  • एक वीडियो सीक्वेंस + एक ऑडियो सीक्वेंस (उदाहरण के लिए, बैकग्राउंड ऑडियो) की झलक.

इन स्थितियों में, ऑफ़र उपलब्ध कराने की शर्तों को तय करने की सुविधा पर काम किया जा रहा है:

  • एक से ज़्यादा ऐसेट की झलक. इसमें, पिक्चर-इन-पिक्चर, साइड-बाइ-साइड, और ग्रिड जैसे लेआउट शामिल हैं. इनमें एक से ज़्यादा वीडियो सीक्वेंस शामिल होते हैं.
  • एडिटिंग पाइपलाइन को किसी दूसरे ग्राफ़िक्स इंजन के साथ पसंद के मुताबिक बनाना.

सुविधा के अनुरोध

अगर आपके पास CompositionPlayer के लिए कोई सुविधा का अनुरोध या सुझाव है, तो Media3 GitHub डेटाबेस पर कोई समस्या दर्ज करें.