Transmisión de Video en Aplicaciones Android
Spanish (Español) translation by Viviana Brito (you can also view the original English article)
La plataforma Android proporciona bibliotecas que puede utilizar para transmitir archivos multimedia, como vídeos remotos, presentándolos para su reproducción en sus aplicaciones. En este tutorial, se transmitir un archivo de vídeo, mostrando mediante el componente VideoView
junto con un objeto MediaControlle
r dejó la lectura de control de usuario.
También brevemente se ejecutará a través del proceso de presentar el vídeo usando la clase MediaPlayer
. Si has completado la serie sobre la creación de un reproductor de música para Android, podría utilizar lo que se aprende en este tutorial para aumentarlo. Usted debe ser capaz de completar este tutorial si ya han desarrollado por lo menos algunas aplicaciones Android.
1. cree una nueva aplicación
Paso 1
Usted puede utilizar el código de este tutorial para mejorar una aplicación existente que está trabajando o puede crear una nueva aplicación ahora en Eclipse o en estudio Android. Cree un nuevo proyecto Android, nómbrelo según su elección, configure los detalles y asígnele una clase Activity
principal inicial y un diseño de plantilla.
Paso 2
Primero vamos a configurar el manifiesto del proyecto para la transmisión de archivos multimedia. Abra el archivo del manifiesto de su proyecto y cambie a edición XML en su IDE. Para la transmisión de archivos multimedia, necesita acceso a Internet, por lo tanto añada el siguiente permiso dentro del elemento manifest
:
1 |
<uses-permission android:name="android.permission.INTERNET" /> |
2. Añada VideoView
Paso 1
La plataforma Android provee de la clase VideoView
en la que puede reproducir archivos de video. Vamos a agregar una a el archivo de la plantilla principal.
1 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
2 |
xmlns:tools="http://schemas.android.com/tools" |
3 |
android:layout_width="match_parent" |
4 |
android:layout_height="match_parent" |
5 |
android:paddingBottom="@dimen/activity_vertical_margin" |
6 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
7 |
android:paddingRight="@dimen/activity_horizontal_margin" |
8 |
android:paddingTop="@dimen/activity_vertical_margin" |
9 |
android:background="#000000" |
10 |
tools:context=".MainActivity" > |
11 |
|
12 |
<VideoView
|
13 |
android:id="@+id/myVideo" |
14 |
android:layout_width="fill_parent" |
15 |
android:layout_height="fill_parent" |
16 |
android:layout_centerInParent="true" /> |
17 |
|
18 |
</RelativeLayout>
|
Alterar parent layout para adaptarse a su aplicación si es necesario. Le damos la instancia VideoView
un atributo id
que podemos referirnos a él más adelante. Puede que necesite ajustar las otras propiedades de diseño para su propio diseño.
Paso 2
Ahora vamos a recuperar una referencia a la instancia VideoView
en código. Abra la Main Activity
Class de la aplicación y añadir las importaciones adicionales siguientes:
1 |
import android.net.Uri; |
2 |
import android.widget.MediaController; |
3 |
import android.widget.VideoView; |
La clase de actividad
debe contener ya el método onCreate
en el que se establece la vista de contenido:
1 |
@Override
|
2 |
protected void onCreate(Bundle savedInstanceState) { |
3 |
super.onCreate(savedInstanceState); |
4 |
setContentView(R.layout.activity_main); |
5 |
}
|
Después de la línea setContentView
, vamos a obtener una referencia a la instancia VideoView
como sigue, utilizando el id
que hemos creado en el esquema XML:
1 |
VideoView vidView = (VideoView)findViewById(R.id.myVideo); |
3. secuencia de un archivo de vídeo
Paso 1
Ahora podemos transmitir un archivo de vídeo a la aplicación. Preparar la URI para el punto final como sigue:
1 |
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4"; |
2 |
Uri vidUri = Uri.parse(vidAddress); |
Por supuesto necesitará usar la dirección remota para el archivo de vídeo que desea transmitir. El ejemplo aquí es un archivo de vídeo de dominio público alojado en Internet Archive. Analizar la cadena de dirección como un URI para que podemos pasar al objeto VideoView
:
1 |
vidView.setVideoURI(vidUri); |
Ahora usted puede simplemente reproducir:
1 |
vidView.start(); |
El sistema operativo Android soporta una amplia gama de formatos de video y los medios de comunicación, con cada dispositivo a menudo compatible con formatos adicionales además de todo esto.
Como se puede ver en la guía del desarrollador, formatos de vídeo soportados son 3GP, MP4, WEBM y MKV, dependiendo del formato utilizado y en que nivel de la plataforma se haya instalado el usuario.
Formatos de archivo de audio usted puede contar con soporte incorporado para incluyen MP3, MID, OGG y WAV. Puede transmitir multimedia en Android sobre RTSP, HTTP y HTTPS (de Android 3.1).
4. Añadir controles de reproducción
Paso 1
Hemos implementado la reproducción de vídeo, pero el usuario espera y estar acostumbrados a tener control sobre él. Una vez más, la plataforma Android proporciona recursos para manejar esto con interacción familiar a través de la clase MediaController
.
En su método onCreate
de la clase Activity
, antes de la línea en que llama start
en VideoView
, debe crear una instancia de la clase:
1 |
MediaController vidControl = new MediaController(this); |
A continuación, configure para usar la instancia VideoView
como su ancla:
1 |
vidControl.setAnchorView(vidView); |
Y finalmente: configure como controlador multimedia el objeto VideoView
:
1 |
vidView.setMediaController(vidControl); |
Ahora, cuando corra la app, el usuario será capaz de controlar la reproducción del video que se transmite, incluyendo los botones de avance y retroceso, el botón de play/pausa y control de la barra de reproducción.
El control de la barra de reproducción está acompañado por la longitud del archivo multimedia a la derecha y la posición actual de la reproducción a la izquierda. Aparte de poder pulsar a lo largo de la barra de reproducción para saltar a una posición del archivo, el estado de la transmisión está indicado usando el mismo tipo de visor al que el usuario está acostumbrado a ver en sitios y apps como YouTube.



Como verá cuando cuando corra la app, el comportamiento por defecto es que los controles desaparezcan luego de unos momentos, reapareciendo cuando el usuario toca la pantalla. Puede configurar el comportamiento del objeto MediaController
de varias maneras. Vea series en la creación de una app reproductor de música para Android para un ejemplo de cómo hacer esto. También puede mejorar la reproducción de archivos multimedia, mediante la implementación de varios oyentes para configurar el comportamiento de la aplicación.
5. Usando MediaPlayer
Paso 1
Antes de terminar, vamos a tomar un enfoque alternativo para la transmisión de un video, haciendo uso de la clase MediaPlayer
, ya que la aplicamos en series on creating a music player. Puede correr archivos multimedia, incluyendo video, a un objeto MediaPlayer
usando una vista de la superficie. Por ejemplo, puede usar la siguiente plantilla:
1 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
2 |
xmlns:tools="http://schemas.android.com/tools" |
3 |
android:layout_width="match_parent" |
4 |
android:layout_height="match_parent" |
5 |
android:background="#000000" |
6 |
android:paddingBottom="@dimen/activity_vertical_margin" |
7 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
8 |
android:paddingRight="@dimen/activity_horizontal_margin" |
9 |
android:paddingTop="@dimen/activity_vertical_margin" |
10 |
tools:context=".MainActivity" > |
11 |
|
12 |
<SurfaceView
|
13 |
android:id="@+id/surfView" |
14 |
android:layout_width="fill_parent" |
15 |
android:layout_height="fill_parent" /> |
16 |
|
17 |
</RelativeLayout>
|
Vamos a referirnos a SurfaceView
en la implementación de la clase Activity
.
Paso 2:
En su clase Actividad, añada las siguientes interfaces:
1 |
public class MainActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener |
Su IDE debería solicitarle que añada estos métodos sin implementar.
1 |
@Override
|
2 |
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { |
3 |
// TODO Auto-generated method stub
|
4 |
}
|
5 |
|
6 |
@Override
|
7 |
public void surfaceCreated(SurfaceHolder arg0) { |
8 |
//setup
|
9 |
}
|
10 |
|
11 |
@Override
|
12 |
public void surfaceDestroyed(SurfaceHolder arg0) { |
13 |
// TODO Auto-generated method stub
|
14 |
}
|
15 |
|
16 |
@Override
|
17 |
public void onPrepared(MediaPlayer mp) { |
18 |
//start playback
|
19 |
}
|
Vamos a agregar los métodos surfaceCreated
y onPrepared.
Paso 3
Para implementar la reproducción, agregue las siguientes variables de instancia a la clase:
1 |
private MediaPlayer mediaPlayer; |
2 |
private SurfaceHolder vidHolder; |
3 |
private SurfaceView vidSurface; |
4 |
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4"; |
En el método onCreate
de Activity
, puede comenzar a instanciar estas variables usando el objeto SurfaceView
que añadió en la plantilla.
1 |
vidSurface = (SurfaceView) findViewById(R.id.surfView); |
2 |
vidHolder = vidSurface.getHolder(); |
3 |
vidHolder.addCallback(this); |
Paso 4
En el método surfaceCreated
, configure los recursos de su reproductor de medios
1 |
try { |
2 |
mediaPlayer = new MediaPlayer(); |
3 |
mediaPlayer.setDisplay(vidHolder); |
4 |
mediaPlayer.setDataSource(vidAddress); |
5 |
mediaPlayer.prepare(); |
6 |
mediaPlayer.setOnPreparedListener(this); |
7 |
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); |
8 |
}
|
9 |
catch(Exception e){ |
10 |
e.printStackTrace(); |
11 |
}
|
Finalmente, en el método onPrepared
, comienza la reproducción.
1 |
mediaPlayer.start(); |
Ahora su video debería reproducirse en la instancia MediaPlayer
cuando ejecute la app.
Conclusión
En este tutorial, hemos esbozado los fundamentos de la transmisión de vídeo en Android, utilizando las clases VideoView
y MediaPlayer
. Puede añadir muchas mejoras al código que implementamos aquí, por ejemplo, mediante la creación de vídeo o soporte en la reproducción de medios en la app del reproductor de música que creamos. También puede querer revisar nuestros recursos asociados para Android como ser YouTube Android Player API.