इस दस्तावेज़ में, मीडिया प्लेयर का इस्तेमाल करने से पहले, आपको बुनियादी कॉन्सेप्ट के बारे में जानना चाहिए.
साउंड और वीडियो क्लास
Android फ़्रेमवर्क में, आवाज़ और वीडियो चलाने के लिए ये क्लास इस्तेमाल की जाती हैं:
MediaPlayer
: यह क्लास, आवाज़ और वीडियो चलाने के लिए मुख्य एपीआई है.AudioManager
: यह क्लास, डिवाइस पर ऑडियो सोर्स और ऑडियो आउटपुट को मैनेज करती है.
मेनिफ़ेस्ट में किए गए एलान
MediaPlayer का इस्तेमाल करके अपने ऐप्लिकेशन का डेवलपमेंट शुरू करने से पहले, पक्का करें कि आपके मेनिफ़ेस्ट में, मिलती-जुलती सुविधाओं का इस्तेमाल करने की अनुमति देने के लिए सही एलान किए गए हों.
इंटरनेट की अनुमति: अगर नेटवर्क पर मौजूद कॉन्टेंट को स्ट्रीम करने के लिए MediaPlayer का इस्तेमाल किया जा रहा है, तो आपके ऐप्लिकेशन को नेटवर्क ऐक्सेस करने का अनुरोध करना होगा.
<uses-permission android:name="android.permission.INTERNET" />
वेक लॉक की अनुमति: अगर आपके प्लेयर ऐप्लिकेशन को स्क्रीन की रोशनी कम होने या प्रोसेसर के स्लीप मोड में जाने से रोकना है या
MediaPlayer.setScreenOnWhilePlaying(boolean)
याMediaPlayer.setWakeMode(android.content.Context, int)
तरीकों का इस्तेमाल करना है, तो आपको इस अनुमति का अनुरोध करना होगा.<uses-permission android:name="android.permission.WAKE_LOCK" />
MediaPlayer क्लास का इस्तेमाल करना
MediaPlayer
क्लास, मीडिया फ़्रेमवर्क का एक ज़रूरी कॉम्पोनेंट है.
इस क्लास का कोई ऑब्जेक्ट, कम सेटअप के साथ ऑडियो और वीडियो, दोनों को फ़ेच, डिकोड, और चला सकता है. MediaPlayer
कई मीडिया सोर्स के साथ काम करता है. इनमें ये शामिल हैं:
- स्थानीय संसाधन
- इंटरनल यूआरआई, जैसे कि आपको कॉन्टेंट रिज़ॉल्वर से मिल सकता है
- बाहरी यूआरएल (स्ट्रीमिंग)
Android पर काम करने वाले मीडिया फ़ॉर्मैट की सूची देखने के लिए, काम करने वाले मीडिया फ़ॉर्मैट पेज पर जाएं.
ऑडियो सोर्स के साथ काम करने के उदाहरण
यहां ऐसे ऑडियो को चलाने का उदाहरण दिया गया है जो स्थानीय रॉ रिसॉर्स के तौर पर उपलब्ध है (आपके ऐप्लिकेशन की res/raw/
डायरेक्ट्री में सेव किया गया है):
Kotlin
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you
Java
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
इस मामले में, "रॉ" रिसॉर्स ऐसी फ़ाइल होती है जिसे सिस्टम किसी खास तरीके से पार्स नहीं करता. हालांकि, इस संसाधन का कॉन्टेंट रॉ ऑडियो नहीं होना चाहिए. यह मीडिया फ़ाइल, कोड में बदली गई हो और सही फ़ॉर्मैट में हो. साथ ही, यह इस्तेमाल किए जा सकने वाले फ़ॉर्मैट में हो.
यहां बताया गया है कि सिस्टम में मौजूद यूआरआई से, वीडियो कैसे चलाया जा सकता है. उदाहरण के लिए, वह यूआरआई जो आपको कॉन्टेंट रिज़ॉल्वर से मिला है:
Kotlin
val myUri: Uri = .... // initialize Uri here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(applicationContext, myUri)
prepare()
start()
}
Java
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
एचटीटीपी स्ट्रीमिंग का इस्तेमाल करके, रिमोट यूआरएल से वीडियो चलाने पर यह दिखता है:
Kotlin
val url = "http://........" // your URL here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(url)
prepare() // might take long! (for buffering, etc)
start()
}
Java
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
परफ़ॉर्मेंस को बेहतर बनाने के लिए, असाइनमेंट को एक साथ तैयार करने की सुविधा का इस्तेमाल करना
MediaPlayer
का इस्तेमाल करते समय, परफ़ॉर्मेंस का ध्यान रखें. उदाहरण के लिए, prepare()
को कॉल करने में काफ़ी समय लग सकता है, क्योंकि इसमें मीडिया डेटा को फ़ेच और डिकोड करना पड़ सकता है. इसलिए, किसी भी ऐसे तरीके की तरह जिसे लागू करने में काफ़ी समय लग सकता है, इसे कभी भी अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) थ्रेड से न कॉल करें. ऐसा करने पर, यूज़र इंटरफ़ेस (यूआई) तब तक काम करना बंद कर देता है, जब तक कि वह तरीका वापस नहीं आ जाता. इससे उपयोगकर्ता को खराब अनुभव मिलता है और एएनआर (ऐप्लिकेशन काम नहीं कर रहा है) वाली गड़बड़ी हो सकती है.
अपने यूज़र इंटरफ़ेस (यूआई) थ्रेड को हैंग होने से बचाने के लिए, MediaPlayer
को तैयार करने के लिए एक और थ्रेड बनाएं और काम पूरा होने पर मुख्य थ्रेड को सूचना दें. फ़्रेमवर्क, इस टास्क को पूरा करने के लिए prepareAsync()
तरीके को लागू करने का एक आसान तरीका उपलब्ध कराता है. इस तरीके से, बैकग्राउंड में मीडिया तैयार होना शुरू हो जाता है और तुरंत नतीजा मिल जाता है. जब मीडिया तैयार हो जाता है, तो setOnPreparedListener()
के ज़रिए कॉन्फ़िगर किए गए MediaPlayer.OnPreparedListener
के onPrepared()
तरीके को कॉल किया जाता है.
ज़्यादा जानें
आपके ऐप्लिकेशन में मीडिया चलाने के लिए, Jetpack Media3 का सुझाव दिया जाता है. इसके बारे में ज़्यादा पढ़ें.
इन पेजों पर, ऑडियो और वीडियो रिकॉर्ड करने, सेव करने, और चलाने से जुड़े विषयों के बारे में बताया गया है: