MediaSession — मुख्य अवधारणाएँ, एकीकरण और Android में कार्य तंत्र

लेखक: IT Sectr प्रकाशित: 2026-05-23 पढ़ने का समय: 8 मिनट

MediaSession मीडिया सामग्री प्लेबैक प्रबंधित करने और बाहरी उपकरणों के साथ एकीकरण के लिए Android फ्रेमवर्क का एक घटक है। यह Bluetooth हेडसेट, हेडफ़ोन, Android Auto और सिस्टम मीडिया सेंटर के साथ इंटरैक्शन के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। Android Developers Guide, 2026 के अनुसार, MediaSession पुराने RemoteControlClient को बदलता है और सिस्टम के साथ सिंक करने वाले प्लेयर्स के लिए अनिवार्य है।

मुख्य बातें

  • MediaSession Android में मीडिया स्ट्रीम प्रबंधित करने के लिए केंद्रीय घटक है, जो बाहरी स्रोतों से कमांड प्राप्त करता है।
  • यह Bluetooth AVRCP, हेडसेट, Android Auto, पहनने योग्य उपकरणों और Android मीडिया सेंटर को सपोर्ट करता है।
  • सेशन प्लेयर स्थिति (play/pause/next/previous) और मेटाडेटा (शीर्षक, कलाकार, कवर आर्ट) को सिस्टम के साथ सिंक करता है।
  • इसके लिए AndroidX से MediaSessionCompat आवश्यक है, जो API 14 तक बैकवर्ड संगतता प्रदान करता है।
  • MediaSession.Callback सिस्टम इनकमिंग कमांड को संसाधित करता है और MediaSession की स्थिति बदलता है।

MediaSession क्या है?

MediaSession Android में एक सिस्टम घटक है जो ऐप को अपनी मीडिया गतिविधि घोषित करने और बाहरी स्रोतों से नियंत्रण कमांड प्राप्त करने की अनुमति देता है। जब उपयोगकर्ता Bluetooth हेडसेट पर Play बटन दबाता है, तो सिस्टम इस इवेंट को सक्रिय MediaSession को भेजता है, और ऐप अपने Callback के माध्यम से प्रतिक्रिया करता है।

Android 5.0 से पहले, इस उद्देश्य के लिए RemoteControlClient का उपयोग किया जाता था, लेकिन यह पर्याप्त लचीलापन प्रदान नहीं करता था और आधुनिक परिदृश्यों — Android Auto, स्मार्टवॉच, स्मार्ट स्पीकर — को सपोर्ट नहीं करता था। MediaSession को API 21 में पेश किया गया और यह ऑडियो और वीडियो प्लेबैक वाले सभी Android ऐप्स के लिए वास्तविक मानक बन गया।

Android डेवलपर दस्तावेज़ीकरण (2026) के अनुसार, ऐप को प्रत्येक स्वतंत्र प्लेबैक स्रोत के लिए एक MediaSession बनाना चाहिए। किसी भी समय केवल एक सत्र सक्रिय हो सकता है — कोई भी नया सत्र स्वचालित रूप से पिछले सत्र को निष्क्रिय कर देता है।

MediaSession और MediaBrowserService

MediaSession का MediaBrowserService के साथ संयोजन मीडिया प्रबंधन का पूरा चक्र प्रदान करता है: सेवा एक सामग्री ट्री (प्लेलिस्ट, कैटलॉग) प्रदान करती है, और सत्र नेविगेशन और प्लेबैक कमांड स्वीकार करता है। यह Google द्वारा संगीत प्लेयर्स, पॉडकास्ट और ऑडियोबुक्स के लिए अनुशंसित आर्किटेक्चर है।

MediaBrowserService एक नोटिफिकेशन के साथ फोरग्राउंड सेवा के रूप में चलता है, जो Activity के नष्ट होने पर भी ऐप के काम करना सुनिश्चित करता है। यह ऑडियो प्लेयर्स के लिए महत्वपूर्ण है जिन्हें ऐप के छोटा होने पर भी चलते रहना चाहिए।

MediaSession कैसे काम करता है

सत्र दो प्रकार की इंटरैक्शन का समर्थन करता है: यह MediaController (क्लाइंट पक्ष) से कमांड प्राप्त करता है और PlaybackState के माध्यम से स्थिति प्रसारित करता है। MediaController एक ही प्रक्रिया में या किसी अलग ऐप में हो सकता है — सिस्टम SessionToken के माध्यम से अनुरोधों को रूट करता है।

जब उपयोगकर्ता Android वॉयस असिस्टेंट को बुलाता है और “अगला ट्रैक चलाएँ” कहता है, तो सिस्टम MediaBrowserService से कनेक्शन के माध्यम से सक्रिय MediaSession ढूंढता है और ACTION_SKIP_TO_NEXT कमांड भेजता है। ऐप का Callback onSkipToNext() कॉल प्राप्त करता है और PlaybackState को अपडेट करता है।

setPlaybackState() के माध्यम से PlaybackState अपडेट करने पर सभी कनेक्टेड MediaController इंस्टेंस तुरंत सूचित होते हैं। सिस्टम मीडिया सेंटर, Bluetooth डिवाइस और Android Auto एक साथ अपडेट प्राप्त करते हैं — सामान्य परिस्थितियों में देरी 50 ms से अधिक नहीं होती।

PlaybackState और उसके मेटाडेटा

PlaybackState में मुख्य स्थिति फ़्लैग होते हैं: isPlaying, स्थिति, गति, उपलब्ध क्रियाएँ (play, pause, seek, stop)। सही ढंग से भरे गए PlaybackState के बिना, सिस्टम नहीं जानता कि ऐप कौन से कमांड सपोर्ट करता है और संबंधित इवेंट नहीं भेजता।

मेटाडेटा (MediaMetadata) वर्तमान ट्रैक के बारे में जानकारी के साथ स्थिति को पूरक करता है — शीर्षक, कलाकार, एल्बम आर्ट URI। Android Auto और पहनने योग्य उपकरण MediaMetadata का उपयोग स्क्रीन पर जानकारी प्रदर्शित करने के लिए करते हैं। Google I/O 2024 के अनुसार, सही MediaMetadata भरने से तीसरे पक्ष के लॉन्चर्स में ऐप की दृश्यता 40% बढ़ जाती है।

MediaSession के मुख्य घटक

MediaSession आर्किटेक्चर में चार परस्पर जुड़े घटक होते हैं, प्रत्येक का अपना कार्य होता है। पूर्ण सिस्टम एकीकरण के लिए डेवलपर को सभी चारों को लागू करना होगा।

  • MediaSessionCompat — मुख्य सत्र वर्ग, ऐप टैग के साथ बनाया जाता है और मीडिया बटन के लिए PendingIntent स्वीकार करता है।
  • MediaSession.Callback — कमांड हैंडलर। onPlay, onPause, onSkipToNext, onSeekTo और अन्य विधियों को लागू करता है।
  • PlaybackStateCompat — वर्तमान प्लेयर स्थिति। इसमें फ़्लैग, स्थिति, गति और उपलब्ध क्रियाओं की सूची होती है।
  • MediaMetadataCompat — वर्तमान मीडिया का मेटाडेटा: शीर्षक, कलाकार, एल्बम, कवर आर्ट, अवधि।

MediaSession जीवनचक्र

सत्र किसी सेवा या Activity की onCreate विधि में MediaSessionCompat(context, tag) कॉल करके बनाया जाता है। निर्माण के बाद, setFlags(FLAG_HANDLES_MEDIA_BUTTONS | FLAG_HANDLES_TRANSPORT_CONTROLS) कॉल करना आवश्यक है। onDestroy में, सिस्टम संसाधनों को मुक्त करने के लिए release() कॉल किया जाता है।

गलत जीवनचक्र प्रबंधन सामान्य गलतियों में से एक है। यदि release() कॉल नहीं किया जाता है, तो सत्र सिस्टम में बना रहता है, और अगले ऐप को पुरानी स्थिति मिल सकती है। Android 13+ सत्र लीक पर Logcat चेतावनी दिखाता है।

एप्लिकेशन में MediaSession एकीकरण

मूल एकीकरण एक सत्र बनाने और Callback लागू करने से शुरू होता है। AndroidX मीडिया लाइब्रेरी से MediaSessionCompat का उपयोग करने की अनुशंसा की जाती है, जो सभी Android संस्करणों — API 14 से 35 तक — के लिए एक एकीकृत API प्रदान करती है।

MediaSession और Callback बनाना

kotlin
class MusicService : Service() {

    private lateinit var mediaSession: MediaSessionCompat
    private lateinit var stateBuilder: PlaybackStateCompat.Builder

    override fun onCreate() {
        super.onCreate()

        mediaSession = MediaSessionCompat(this, "MusicService")
        mediaSession.setFlags(
            MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
                or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
        )
        mediaSession.setCallback(MediaSessionCallback())
        updatePlaybackState(false)
    }

    private inner class MediaSessionCallback : MediaSessionCompat.Callback() {
        override fun onPlay() {
            updatePlaybackState(true)
        }

        override fun onPause() {
            updatePlaybackState(false)
        }
    }

    private fun updatePlaybackState(isPlaying: Boolean) {
        stateBuilder = PlaybackStateCompat.Builder()
            .setState(
                if (isPlaying) PlaybackStateCompat.STATE_PLAYING
                else PlaybackStateCompat.STATE_PAUSED,
                AudioTrackCompat.CURRENT_POSITION_NOT_SET,
                1.0f
            )
            .setActions(
                PlaybackStateCompat.ACTION_PLAY
                    or PlaybackStateCompat.ACTION_PAUSE
                    or PlaybackStateCompat.ACTION_SKIP_TO_NEXT
                    or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
            )
        mediaSession.setPlaybackState(stateBuilder.build())
    }

    override fun onDestroy() {
        mediaSession.release()
        super.onDestroy()
    }
}

इस उदाहरण में, MusicService टैग और मीडिया बटन संभालने के लिए फ़्लैग के साथ एक MediaSession बनाया गया है। Callback onPlay और onPause लागू करता है, PlaybackState अपडेट करता है। setActions विधि उपलब्ध क्रियाओं की घोषणा करती है जो सिस्टम लॉक स्क्रीन और मीडिया सेंटर पर प्रदर्शित करता है।

MediaMetadata सेट करना

kotlin
private fun setMetadata(title: String, artist: String) {
    val metadata = MediaMetadataCompat.Builder()
        .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
        .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
        .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 300000L)
        .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, albumArtUrl)
        .build()
    mediaSession.setMetadata(metadata)
}

मेटाडेटा प्रत्येक ट्रैक परिवर्तन पर अपडेट किया जाना चाहिए। सिस्टम कार Bluetooth डिस्प्ले और पहनने योग्य उपकरणों पर जानकारी प्रदर्शित करने के लिए METADATA_KEY_TITLE और METADATA_KEY_ARTIST का उपयोग करता है। यदि कवर आर्ट URI सेट नहीं है, तो प्लेयर ग्रे प्लेसहोल्डर दिखाएगा।

Bluetooth और हेडफ़ोन से मीडिया कमांड को संभालना

Bluetooth हेडसेट AVRCP 1.6+ प्रोफ़ाइल के माध्यम से कमांड भेजते हैं। Android इन कमांड्स को ACTION_MEDIA_BUTTON इंटेंट के रूप में प्रसारित करता है, जो FLAG_HANDLES_MEDIA_BUTTONS फ़्लैग सेट होने पर MediaSession द्वारा इंटरसेप्ट किए जाते हैं।

जब उपयोगकर्ता Bluetooth हेडफ़ोन पर Play बटन दबाता है, तो सिस्टम KEYCODE_MEDIA_PLAY कोड के साथ एक KeyEvent बनाता है, जो Callback की onMediaButtonEvent विधि में भेजा जाता है। यदि Callback में onPlay() लागू है, तो सिस्टम इसे सीधे कॉल करता है। हेडसेट बटन के एक बार दबाने पर KEYCODE_MEDIA_PLAY_PAUSE भेजा जाता है — प्लेयर को स्थिति टॉगल करनी चाहिए।

कई बटनों के साथ जटिल परिदृश्यों को संभालना

आधुनिक Bluetooth हेडफ़ोन में 5 बटन तक हो सकते हैं: वॉल्यूम +/-, play/pause, next, previous। प्रत्येक बटन अपना KeyEvent उत्पन्न करता है, जिसे Callback द्वारा सही ढंग से संभाला जाना चाहिए। कई हेडसेट पर play/pause का डबल प्रेस आमतौर पर अगले ट्रैक (ACTION_SKIP_TO_NEXT) पर जाने के रूप में व्याख्या किया जाता है।

Android संगतता परिभाषा दस्तावेज़ (2026) के अनुसार, मीडिया सामग्री वाले सभी ऐप्स को KEYCODE_MEDIA_PLAY_PAUSE को सही ढंग से संभालना चाहिए। इस आवश्यकता को अनदेखा करने से संगीत और ऑडियो श्रेणी के लिए Google Play में ऐप की रेटिंग स्वचालित रूप से कम हो जाती है।

सिस्टम मीडिया सेंटर के साथ सिंक्रोनाइज़ेशन

Android 11 से शुरू करके, सिस्टम मीडिया सेंटर (मीडिया कंट्रोल पैनल) नोटिफिकेशन शेड में 5 हालिया MediaSession सत्र तक प्रदर्शित करता है। उपयोगकर्ता ऐप खोले बिना प्लेयर को नियंत्रित कर सकता है। सही प्रदर्शन के लिए MediaBrowserService लागू करना और PlaybackState को सही ढंग से भरना आवश्यक है।

मीडिया कंट्रोल पैनल दिखाता है: ट्रैक शीर्षक, कलाकार, कवर आर्ट (MediaMetadata से), नियंत्रण बटन (PlaybackState की उपलब्ध क्रियाओं से)। यदि ऐप सक्रिय प्लेबैक के दौरान हर 10 सेकंड में कम से कम एक बार PlaybackState अपडेट नहीं करता है, तो मीडिया सेंटर सत्र को पैनल से छुपा देता है।

नोटिफिकेशन के साथ फोरग्राउंड सेवा

kotlin
private fun startForegroundService() {
    val notification = NotificationCompat.Builder(this, "media_channel")
        .setSmallIcon(R.drawable.ic_play)
        .setContentTitle("अब चल रहा है")
        .setContentText(currentTrackTitle)
        .setPriority(NotificationCompat.PRIORITY_LOW)
        .setStyle(
            androidx.media.app.NotificationCompat.MediaStyle()
                .setMediaSession(mediaSession.sessionToken)
        )
        .build()
    startForeground(1001, notification)
}

MediaStyle नोटिफिकेशन sessionToken के माध्यम से MediaSession से जुड़ता है और मानक मीडिया बटन प्रदर्शित करता है। MediaStyle के बिना, नोटिफिकेशन बिना नियंत्रण बटन के सामान्य अलर्ट के रूप में दिखाई देगा। Android 13+ को प्रदर्शन के लिए स्पष्ट POST_NOTIFICATIONS अनुमति की आवश्यकता होती है।

अक्सर पूछे जाने वाले प्रश्न

क्या एक ही समय में किसी ऐप में कई सक्रिय MediaSession हो सकते हैं?

तकनीकी रूप से हाँ, लेकिन किसी भी समय केवल एक सत्र सक्रिय माना जाता है। setActive(true) कॉल किए बिना नया सत्र बनाने पर पिछला सत्र सक्रिय रहता है। प्रति ऐप एक सत्र या सक्रिय स्थिति स्विचिंग के साथ प्रति स्वतंत्र ऑडियो स्रोत एक सत्र रखने की अनुशंसा की जाती है।

MediaSession Audio Focus के साथ कैसे इंटरैक्ट करता है?

MediaSession Audio Focus को स्वचालित रूप से प्रबंधित नहीं करता — यह एक अलग तंत्र है। onPlay कमांड प्राप्त करने पर, डेवलपर को स्वतंत्र रूप से AudioManager के माध्यम से AudioFocus का अनुरोध करना होता है, और फ़ोकस खोने पर सत्र के माध्यम से प्लेबैक रोकना होता है।

मेरे ऐप के साथ हेडफ़ोन पर मीडिया बटन काम क्यों नहीं करते?

जाँचें कि FLAG_HANDLES_MEDIA_BUTTONS और FLAG_HANDLES_TRANSPORT_CONTROLS फ़्लैग सेट हैं। यह भी सुनिश्चित करें कि सत्र सक्रिय है (setActive(true))। Android 12+ पर, मीडिया बटन केवल MediaSession के माध्यम से काम करते हैं — पुराना registerMediaButtonEventReceiver समर्थित नहीं है।

क्या MediaSession के काम करने के लिए MediaBrowserService आवश्यक है?

मूल बटन हैंडलिंग के लिए — नहीं। लेकिन Android Auto, Wear OS और सिस्टम मीडिया सेंटर के साथ एकीकरण के लिए MediaBrowserService आवश्यक है। Google लंबे ऑडियो प्लेबैक वाले सभी ऐप्स में MediaBrowserService लागू करने की अनुशंसा करता है।

कैसे जाँचें कि MediaSession सही ढंग से कॉन्फ़िगर किया गया है?

सक्रिय सत्र, उनके Callbacks और PlaybackState देखने के लिए adb shell dumpsys media_session कमांड का उपयोग करें। यह उपयोगिता सभी पंजीकृत सत्रों को उनके टैग, गतिविधि स्थिति और अंतिम ज्ञात स्थिति के साथ दिखाती है — डीबगिंग के लिए एक सुविधाजनक उपकरण।

सारांश

  • MediaSession Android में प्लेबैक प्रबंधित करने का मानक तरीका है, जो API 21 से RemoteControlClient को बदलता है।
  • सत्र Bluetooth, हेडफ़ोन, Android Auto और सिस्टम मीडिया सेंटर से Callback सिस्टम के माध्यम से कमांड प्राप्त करता है।
  • PlaybackState और MediaMetadata सिस्टम UI के साथ सही सिंक्रोनाइज़ेशन के लिए दो अनिवार्य घटक हैं।
  • एकीकरण AndroidX मीडिया से MediaSessionCompat के माध्यम से किया जाता है, जो API 14+ के साथ संगतता प्रदान करता है।
  • सिस्टम मीडिया सेंटर में प्रदर्शन के लिए MediaBrowserService और MediaStyle नोटिफिकेशन के साथ फोरग्राउंड सेवा आवश्यक है।
  • Audio Focus प्रबंधन एक अलग कार्य है जो MediaSession द्वारा स्वचालित नहीं होता। डेवलपर स्वतंत्र रूप से फ़ोकस प्रबंधित करता है।
  • डीबगिंग के लिए, सक्रिय सत्र और उनकी स्थिति देखने के लिए adb shell dumpsys media_session का उपयोग करें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें