इस पेज पर, Media3 के साथ वीडियो चलाने के लिए इस्तेमाल की जा सकने वाली अलग-अलग तरह की सुविधाओं के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि अपने इस्तेमाल के उदाहरण के लिए सही सुविधा कैसे चुनें. Android में Surface ऑब्जेक्ट के बारे में ज़्यादा जानने के लिए, यह ग्राफ़िक्स दस्तावेज़ पढ़ें.
सरफ़ेस सेट करना
Player के पास, अपने वीडियो आउटपुट को किसी Surface से कनेक्ट करने के लिए चार एंट्री पॉइंट होते हैं:
void setVideoSurface(@Nullable Surface surface)void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void setVideoSurfaceView(@Nullable SurfaceView surfaceView)void setVideoTextureView(@Nullable TextureView textureView)
इसे मिटाने के अलग-अलग तरीके भी हैं:
void clearVideoSurface()void clearVideoSurface(@Nullable Surface surface)void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void clearVideoSurfaceView(@Nullable SurfaceView surfaceView)void clearVideoTextureView(@Nullable TextureView textureView)
PlayerView के लिए कोई प्लैटफ़ॉर्म टाइप चुनें
PlayerView एट्रिब्यूट के surface_type एट्रिब्यूट की मदद से, वीडियो चलाने के लिए इस्तेमाल किए जाने वाले प्लैटफ़ॉर्म का टाइप सेट किया जा सकता है. इन वैल्यू का इस्तेमाल किया जा सकता है:
surface_view(SurfaceView)texture_view(TextureView)spherical_gl_surface_view(SphericalGLSurfaceView) - स्फ़ेरिकल वीडियो चलाने के लिएvideo_decoder_gl_surface_view(VideoDecoderGLSurfaceView) - एक्सटेंशन रेंडरर का इस्तेमाल करके वीडियो रेंडर करनाnone- इसका इस्तेमाल सिर्फ़ ऑडियो चलाने के लिए किया जाता है. इसका इस्तेमाल इसलिए किया जाना चाहिए, ताकि आपको कोई सरफेस न बनाना पड़े. ऐसा करने पर आपको ज़्यादा खर्च करना पड़ सकता है.
अगर व्यू का इस्तेमाल वीडियो को सामान्य तरीके से चलाने के लिए किया जा रहा है, तो surface_view या texture_view का इस्तेमाल किया जाना चाहिए. वीडियो चलाने के लिए, TextureView की तुलना में SurfaceView के कई फ़ायदे हैं:
- कई डिवाइसों पर बैटरी की खपत काफ़ी कम होती है.
- फ़्रेम टाइमिंग ज़्यादा सटीक होती है. इससे वीडियो ज़्यादा आसानी से चलता है.
- जिन डिवाइसों पर एचडीआर वीडियो आउटपुट की सुविधा काम करती है उन पर बेहतर क्वालिटी में वीडियो आउटपुट की सुविधा.
- DRM-सुरक्षित कॉन्टेंट चलाने के दौरान, सुरक्षित आउटपुट की सुविधा काम करती है.
- Android TV डिवाइसों पर, वीडियो कॉन्टेंट को डिसप्ले के पूरे रिज़ॉल्यूशन पर रेंडर करने की सुविधा. ये डिवाइस, यूज़र इंटरफ़ेस (यूआई) लेयर को अपस्केल करते हैं.
इसलिए, जहां तक हो सके वहां TextureView की जगह SurfaceView का इस्तेमाल करना चाहिए.
TextureView का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब SurfaceView आपकी ज़रूरतों को पूरा न करता हो. इसका एक उदाहरण यह है कि Android 7.0 (एपीआई लेवल 24) से पहले, वीडियो की सतह पर स्मूथ ऐनिमेशन या स्क्रोलिंग की ज़रूरत होती है. इसके बारे में यहां बताया गया है. इस मामले में, TextureView का इस्तेमाल सिर्फ़ तब करें, जब SDK_INT 24 (Android 7.0) से कम हो. इसके अलावा, SurfaceView का इस्तेमाल करें.
Compose में कोई सरफेस टाइप चुनना
Compose में, इंटरऑप सलूशन AndroidView Composable का इस्तेमाल करके SurfaceView और TextureView को रैप करता है. इससे जुड़े दो कंपोज़ेबल, androidx.compose.foundation से AndroidExternalSurface और AndroidEmbeddedExternalSurface हैं. हालांकि, ये प्रॉक्सी क्लास एक एपीआई उपलब्ध कराती हैं. इससे, व्यू के ऐक्सेस को सीमित किया जा सकता है. इन व्यू की ज़रूरत Player को होती है, ताकि वह किसी प्लैटफ़ॉर्म के पूरे लाइफ़साइकल (क्रिएशन और साइज़ अपडेट) को मैनेज कर सके.
media3-ui-compose मॉड्यूल में, आपको ContentFrame और PlayerSurface कंपोज़ेबल मिल सकते हैं. ये कंपोज़ेबल, Player को लाइफ़साइकल के बारे में जानकारी रखने वाले Surface से लिंक करते हैं. इस मामले में, ये प्लैटफ़ॉर्म टाइप हैं:
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
none टाइप नहीं है, क्योंकि इसका मतलब है कि कंपोज़ेबल को Compose UI ट्री में शामिल नहीं किया गया है.