इस दस्तावेज़ में, Media Player का इस्तेमाल करने से पहले, आपको जिन बुनियादी कॉन्सेप्ट के बारे में पता होना चाहिए उनके बारे में बताया गया है.
ऑडियो और वीडियो की क्लास
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 क्लास का इस्तेमाल करना
The MediaPlayer क्लास, मीडिया फ़्रेमवर्क का एक अहम कॉम्पोनेंट है.
इस क्लास का कोई ऑब्जेक्ट, कम से कम सेटअप के साथ ऑडियो और वीडियो, दोनों को फ़ेच, डिकोड, और प्ले कर सकता है. MediaPlayer, कई मीडिया सोर्स के साथ काम करता है. इनमें ये शामिल हैं:
- स्थानीय संसाधन
- इंटरनल यूआरआई. जैसे, Content Resolver से मिलने वाला यूआरआई
- बाहरी यूआरएल (स्ट्रीमिंग)
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
इस मामले में, "रॉ" रिसोर्स एक ऐसी फ़ाइल होती है जिसे सिस्टम किसी खास तरीके से पार्स नहीं करता. हालांकि, इस रिसोर्स में रॉ ऑडियो नहीं होना चाहिए. यह, काम करने वाले किसी फ़ॉर्मैट में सही तरीके से एन्कोड और फ़ॉर्मैट की गई मीडिया फ़ाइल होनी चाहिए.
यहां बताया गया है कि सिस्टम में स्थानीय तौर पर उपलब्ध यूआरआई से ऑडियो कैसे चलाया जाए. उदाहरण के लिए, Content Resolver के ज़रिए मिला यूआरआई:
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();
setDataSource()
परफ़ॉर्मेंस को बेहतर बनाने के लिए, एसिंक्रोनस तरीके से तैयारी करना
MediaPlayer का इस्तेमाल करते समय, परफ़ॉर्मेंस को ध्यान में रखें. उदाहरण के लिए, prepare() को कॉल करने में ज़्यादा समय लग सकता है. ऐसा इसलिए, क्योंकि इसमें
मीडिया डेटा को फ़ेच और डिकोड करना शामिल हो सकता है. इसलिए, किसी भी ऐसे तरीके को जिसे पूरा होने में ज़्यादा समय लग सकता है
पूरा होने में, अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) थ्रेड से कभी भी कॉल न करें. ऐसा करने से, तरीका पूरा होने तक यूज़र इंटरफ़ेस (यूआई) काम करना बंद कर देता है. इससे उपयोगकर्ता को बुरा अनुभव मिलता है और एएनआर (ऐप्लिकेशन काम नहीं कर रहा है) वाली गड़बड़ी हो सकती है.
अपने यूज़र इंटरफ़ेस (यूआई) थ्रेड को हैंग होने से बचाने के लिए, MediaPlayer को तैयार करने के लिए कोई दूसरा थ्रेड बनाएं और तैयार होने पर मुख्य थ्रेड को सूचना दें. फ़्रेमवर्क, इस
टास्क को पूरा करने के लिए prepareAsync() तरीके का इस्तेमाल करने का आसान तरीका उपलब्ध कराता है. यह तरीका, बैकग्राउंड में मीडिया को तैयार करना शुरू करता है और तुरंत वापस आ जाता है. जब मीडिया तैयार हो जाता है, तब setOnPreparedListener() के ज़रिए कॉन्फ़िगर किए गए MediaPlayer.OnPreparedListener के onPrepared() तरीके को कॉल किया जाता है.
ज़्यादा जानें
अपने ऐप्लिकेशन में मीडिया चलाने के लिए, Jetpack Media3 का इस्तेमाल करने का सुझाव दिया जाता है. इसके बारे में ज़्यादा जानें.
इन पेजों में, ऑडियो और वीडियो रिकॉर्ड करने, सेव करने, और वापस चलाने से जुड़े विषयों के बारे में बताया गया है: