ExoPlayer es un reproductor multimedia a nivel de aplicación que es muy similar a MediaPlayer. A diferencia de MediaPlayer, ExoPlayer se basa en API de medios de bajo nivel en Android, lo que tiene muchas ventajas, como que admite reproducciones adaptables DASH y SmoothStreaming. ExoPlayer es altamente personalizable y extensible, lo que lo hace capaz de muchos casos de uso avanzado. Es un proyecto de código abierto utilizado por las aplicaciones de Google, incluidas YouTube y Google Play Movies and TV. En este artículo, le mostraremos cómo puede implementar ExoPlayer para reproducir un video en Android usando Jetpack Compose . Siga los pasos a continuación una vez que el IDE esté listo.
Implementación paso a paso
Paso 1: crea un nuevo proyecto en Android Studio
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Al elegir la plantilla, seleccione Actividad de composición vacía . Si no encuentra esta plantilla, intente actualizar Android Studio a la última versión. Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.
Paso 2: Agregar permiso de INTERNET en el archivo AndroidManifest.xml
Vaya al archivo AndroidManifest.xml y agregue el permiso de INTERNET como se muestra a continuación.
XML
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.geeksforgeeks.jcvideo"> <!-- Add this permission --> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.JCVideo"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.JCVideo"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Paso 3: agregue la dependencia de ExoPlayer en el archivo build.gradle (aplicación)
Vaya al archivo app build.gradle y agregue esta dependencia en la sección de dependencia. Agregue siempre la última versión de la dependencia para el correcto funcionamiento de la aplicación. La última dependencia de ExoPlayer se puede encontrar aquí: NOTAS DE LA VERSIÓN
// Exo Player Library implementation "com.google.android.exoplayer:exoplayer:2.16.1"
Paso 4: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package com.geeksforgeeks.jcvideo import android.net.Uri import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.viewinterop.AndroidView import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.source.ProgressiveMediaSource import com.google.android.exoplayer2.ui.PlayerView import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.util.Util class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // Calling the composable function // to display element and its contents MainContent() } } } // Creating a composable // function to display Top Bar @Composable fun MainContent() { Scaffold( topBar = { TopAppBar(title = { Text("GFG | ExoPlayer Video", color = Color.White) }, backgroundColor = Color(0xff0f9d58)) }, content = { MyContent() } ) } // Creating a composable function to create // two Images and a spacer between them // Calling this function as content in the above function @Composable fun MyContent(){ Column(Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) { // Fetching the Local Context val mContext = LocalContext.current // Declaring a string value // that stores raw video url val mVideoUrl = "https://cdn.videvo.net/videvo_files/video/free/2020-05/large_watermarked/3d_ocean_1590675653_preview.mp4" // Declaring ExoPlayer val mExoPlayer = remember(mContext) { ExoPlayer.Builder(mContext).build().apply { val dataSourceFactory = DefaultDataSourceFactory(mContext, Util.getUserAgent(mContext, mContext.packageName)) val source = ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(mVideoUrl)) prepare(source) } } // Implementing ExoPlayer AndroidView(factory = { context -> PlayerView(context).apply { player = mExoPlayer } }) } } // For displaying preview in // the Android Studio IDE emulator @Preview(showBackground = true) @Composable fun DefaultPreview() { MainContent() }
Producción:
En el siguiente video, puede ver que ExoPlayer se implementó con éxito.
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA