ऑडियो और वीडियो चलाना
Android में सरल मीडिया प्लेबैक।
ऑडियो और वीडियो चलाना, CoddyKit पर Android Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Android Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
इमेज से आगे: मीडिया प्लेबैक
Coil इमेज को सुंदर ढंग से दिखाता है, लेकिन ऐप ध्वनि और वीडियो भी चलाते हैं: नोटिफ़िकेशन की धुन, पॉडकास्ट, बैकग्राउंड क्लिप या वीडियो फ़ीड। Android में मीडिया के लिए समर्पित API उपलब्ध हैं।
आधुनिक और अनुशंसित लाइब्रेरी Media3 (ExoPlayer) है। यह पुरानी MediaPlayer की तुलना में स्ट्रीमिंग, फ़ॉर्मैट, बफ़रिंग और प्लेबैक नियंत्रण को कहीं बेहतर ढंग से संभालती है। इस पाठ में आप Compose ऐप में सरल ऑडियो और वीडियो चलाएँगे।
Media3 की निर्भरताएँ जोड़ना
Media3 अलग-अलग मॉड्यूल में विभाजित है। अधिकांश ऐप के लिए आपको media3-exoplayer (प्लेयर इंजन) और media3-ui (तैयार प्लेयर दृश्य) चाहिए। Compose वीडियो के लिए आप AndroidView के माध्यम से PlayerView का भी उपयोग कर सकते हैं।
// build.gradle.kts (module level)
dependencies {
implementation("androidx.media3:media3-exoplayer:1.5.0")
implementation("androidx.media3:media3-ui:1.5.0")
}ExoPlayer बनाना
ExoPlayer को Context से बनाया जाता है। उसे एक MediaItem (URL या स्थानीय फ़ाइल) दें, prepare() कॉल करें और प्लेबैक शुरू करें। यह अपने अलग थ्रेड पर चलता है, इसलिए UI रुकता नहीं है।
ध्यान रखें कि प्लेयर सिस्टम संसाधनों को अपने पास रखता है और उसे रिलीज़ करना आवश्यक है; इसके बारे में आगे बताया जाएगा।
import android.content.Context
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
fun createPlayer(context: Context, url: String): ExoPlayer {
val player = ExoPlayer.Builder(context).build()
player.setMediaItem(MediaItem.fromUri(url))
player.prepare()
player.playWhenReady = true
return player
}ऑडियो चलाना
केवल ऑडियो चलाने की प्रक्रिया भी यही है; आपको बस MediaItem को किसी ऑडियो URL (mp3, aac आदि) की ओर निर्देशित करना होता है। दिखाने के लिए कोई दृश्य नहीं होता, इसलिए इसे प्लेयर ऑब्जेक्ट के माध्यम से नियंत्रित करते हैं: play(), pause(), seekTo()।
इतना एक पॉडकास्ट या संगीत प्लेयर बनाने के लिए पर्याप्त है।
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
fun playPodcast(player: ExoPlayer, audioUrl: String) {
player.setMediaItem(MediaItem.fromUri(audioUrl))
player.prepare()
player.play()
}
fun togglePause(player: ExoPlayer) {
if (player.isPlaying) player.pause() else player.play()
}Compose में प्लेयर को याद रखना
Compose में आपको प्लेयर को एक बार बनाकर पुनर्संयोजनों के दौरान बनाए रखना चाहिए। हर पुनर्संयोजन पर नया प्लेयर बनने से रोकने के लिए remember का उपयोग करें।
इसे उचित सफ़ाई (अगले दृश्य में) के साथ जोड़ें, ताकि संसाधन लीक न हों।
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
@Composable
fun rememberPlayer(url: String): ExoPlayer {
val context = LocalContext.current
return remember {
ExoPlayer.Builder(context).build().apply {
setMediaItem(MediaItem.fromUri(url))
prepare()
}
}
}प्लेयर को रिलीज़ करना
प्लेयर कोडेक, बफ़र और ऑडियो फ़ोकस को सक्रिय रखता है। यदि आप इसे रिलीज़ करना भूल जाएँ, तो मेमोरी लीक हो सकती है और स्क्रीन हटने के बाद भी प्लेबैक जारी रह सकता है। Compose में DisposableEffect तब सफ़ाई चलाता है जब कंपोज़ेबल कंपोज़िशन से बाहर हो जाता है।
वहाँ हमेशा player.release() कॉल करें।
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.media3.exoplayer.ExoPlayer
@Composable
fun ManagedPlayer(player: ExoPlayer) {
DisposableEffect(player) {
onDispose {
player.release()
}
}
// ... use player here
}PlayerView के साथ वीडियो दिखाना
Media3 नियंत्रणों के साथ तैयार PlayerView उपलब्ध कराता है। Compose में मूल वीडियो कंपोज़ेबल नहीं है, इसलिए AndroidView का उपयोग करके View को एम्बेड करें और उसमें प्लेयर जोड़ें।
इससे आपको बिना अतिरिक्त प्रयास के प्ले/पॉज़, सीक बार और फ़ुलस्क्रीन सुविधाएँ मिलती हैं।
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView
@Composable
fun VideoPlayer(player: ExoPlayer, modifier: Modifier = Modifier) {
AndroidView(
factory = { context ->
PlayerView(context).apply {
this.player = player
}
},
modifier = modifier
)
}एक पूर्ण वीडियो स्क्रीन
आइए सब कुछ जोड़ें: प्लेयर बनाएँ, उसे याद रखें, PlayerView से जोड़ें और डिस्पोज़ होने पर रिलीज़ करें। यह एक स्वतंत्र वीडियो स्क्रीन है, जिसका आप पुनः उपयोग कर सकते हैं।
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView
@Composable
fun VideoScreen(videoUrl: String) {
val context = LocalContext.current
val player = remember {
ExoPlayer.Builder(context).build().apply {
setMediaItem(MediaItem.fromUri(videoUrl))
prepare()
playWhenReady = true
}
}
DisposableEffect(Unit) { onDispose { player.release() } }
AndroidView(
factory = { PlayerView(it).apply { this.player = player } },
modifier = Modifier.fillMaxWidth().height(220.dp)
)
}प्लेबैक स्थिति पर नज़र रखना
अपने UI (प्ले/पॉज़ आइकन या प्रगति पट्टी) को अपडेट करने के लिए Player.Listener के माध्यम से प्लेयर की स्थिति सुनें। यह बफ़रिंग, तैयार होने और समाप्त होने जैसी स्थिति में बदलावों के साथ-साथ यह भी बताता है कि प्लेबैक सक्रिय है या नहीं।
स्क्रीन दिखाई देने पर listener जोड़ें और डिस्पोज़ होने पर उसे हटा दें।
import androidx.media3.common.Player
import androidx.media3.exoplayer.ExoPlayer
fun observe(player: ExoPlayer, onPlaying: (Boolean) -> Unit): Player.Listener {
val listener = object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
onPlaying(isPlaying)
}
override fun onPlaybackStateChanged(state: Int) {
when (state) {
Player.STATE_BUFFERING -> { /* show spinner */ }
Player.STATE_READY -> { /* ready */ }
Player.STATE_ENDED -> { /* finished */ }
}
}
}
player.addListener(listener)
return listener
}ऐप बैकग्राउंड में जाने पर रोकना
इनलाइन वीडियो (संगीत ऐप नहीं) के लिए आमतौर पर आप चाहते हैं कि उपयोगकर्ता के स्क्रीन छोड़ने पर वीडियो रुक जाए और वापस आने पर फिर शुरू हो जाए। Lifecycle को देखकर और ON_PAUSE पर प्लेबैक रोककर आप प्लेबैक को Compose के लाइफ़साइकल से जोड़ सकते हैं।
इससे वह वीडियो चलने से बचता है जिसे उपयोगकर्ता देख नहीं सकता और बैटरी भी बचती है।
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.media3.exoplayer.ExoPlayer
@Composable
fun PauseWithLifecycle(player: ExoPlayer) {
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_PAUSE -> player.pause()
Lifecycle.Event.ON_RESUME -> player.play()
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
}
}MediaSession के साथ बैकग्राउंड ऑडियो
ऐसे ऑडियो के लिए जिसे ऐप के बैकग्राउंड में जाने पर भी चलते रहना चाहिए (संगीत, पॉडकास्ट), प्लेबैक को MediaSessionService में रखें। यह सिस्टम नियंत्रणों, लॉक स्क्रीन और Bluetooth बटनों के साथ एकीकृत होता है।
इसमें कुछ अधिक काम होता है, लेकिन मूल विचार अपने प्लेयर को MediaSession के माध्यम से उपलब्ध कराना है।
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.session.MediaSession
import androidx.media3.session.MediaSessionService
class PlaybackService : MediaSessionService() {
private var session: MediaSession? = null
override fun onCreate() {
super.onCreate()
val player = ExoPlayer.Builder(this).build()
session = MediaSession.Builder(this, player).build()
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo) = session
override fun onDestroy() {
session?.run { player.release(); release() }
session = null
super.onDestroy()
}
}त्वरित जाँच
ऐसी Compose स्क्रीन में जिसमें ExoPlayer मौजूद है, स्क्रीन के कंपोज़िशन से बाहर जाने पर प्लेयर को रिलीज़ करने के लिए आपको किस Compose API का उपयोग करना चाहिए?
पुनरावलोकन
आपने ऑडियो और वीडियो प्लेबैक जोड़ना सीख लिया है:
- Media3 ExoPlayer का उपयोग करें, जो MediaPlayer का आधुनिक विकल्प है।
- प्लेयर बनाएँ,
MediaItemसेट करें,prepare()और फिरplay()कॉल करें। - Compose में प्लेयर को
rememberकरें औरDisposableEffectकेonDisposeमें उसे रिलीज़ करें। AndroidViewके साथPlayerViewएम्बेड करके वीडियो दिखाएँ।Player.Listenerसे स्थिति पर नज़र रखें; बैकग्राउंड ऑडियो के लिएMediaSessionServiceका उपयोग करें।
इसके साथ Coil के साथ इमेज और मीडिया लोडिंग का पाठ्यक्रम पूरा होता है। अब आप इमेज को सहजता से लोड कर सकते हैं और आधुनिक Android तरीके से मीडिया चला सकते हैं।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 36
- पाठ
- 152
अक्सर पूछे जाने वाले प्रश्न
क्या “ऑडियो और वीडियो चलाना” पाठ निःशुल्क है?
हाँ — Android Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “ऑडियो और वीडियो चलाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“ऑडियो और वीडियो चलाना” में मैं क्या सीखूँगा?
Android में सरल मीडिया प्लेबैक। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Android Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Android Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Android Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“ऑडियो और वीडियो चलाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Android Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Android Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Coil के साथ इमेज लोड करना
- प्लेसहोल्डर और त्रुटि स्थितियाँ
- कैशिंग और प्रदर्शन
- ऑडियो और वीडियो चलाना