2011-11-29 17 views
6

Tengo un proyecto de Android donde necesito crear una aplicación cliente para recibir transmisiones de video unicast UDP o RTP y reproducirlas. Desafortunadamente, parece que no puedo hacer que funcione y he buscado una solución exhaustivamente.Transmisión de video por UDP en Android

He siendo la prueba en un Xoom (Android 3.2) y un Nexus S (Android 2.3.6) y saber que pueden reproducir el contenido cuando se utiliza MX Player (una aplicación de reproductor de medios de terceros) como el cliente pero no puede hacer que el reproductor multimedia nativo reproduzca el contenido. He intentado usar tanto un simple VideoView como un MediaPlayer, pero ambos fallan con el mismo código de error y no puedo encontrar ninguna información útil.

El video tiene codificación H.264 con audio aac.

Además, el servidor es una solución de un tercero al que no tengo acceso (aparte de especificar udp o rtp) pero, como dije, al usar MX Player, se pueden reproducir las transmisiones.

Aquí es la parte de mi reproductor multimedia de código:

public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     MediaPlayer player = new MediaPlayer(); 
     SurfaceView surface = (SurfaceView) findViewById(R.id.video); 

     player.setDisplay(surface.getHolder()); 

     player.setDataSource(this, Uri.parse("udp://192.168.0.78:1234")); 

     player.prepare(); 

     player.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       Log.d("SimpleVideoPlayer", "Starting player"); 
       mp.start(); 
      } 
     }); 

     player.setOnErrorListener(new OnErrorListener() { 

      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       Log.d("SimpleVideoPlayer", "error with code: " + what); 
       return false; 
      } 
     }); 

    }catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

El error que estoy recibiendo es:

11-29 15:44:14.660: D/MediaPlayer(15451): Couldn't open file on client side, trying server side 
11-29 15:44:14.670: E/MediaPlayer(15451): error (1, -2147483648) 
11-29 15:44:14.670: W/System.err(15451): java.io.IOException: Prepare failed.: status=0x1 
11-29 15:44:14.670: W/System.err(15451): at android.media.MediaPlayer.prepare(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at com.android.vidplayer.Main.onCreate(Main.java:26) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Activity.performCreate(Activity.java:4397) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1804) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1856) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.access$500(ActivityThread.java:125) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1049) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Looper.loop(Looper.java:132) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.main(ActivityThread.java:4157) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invoke(Method.java:491) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-29 15:44:14.670: W/System.err(15451): at dalvik.system.NativeStart.main(Native Method) 

he puesto los permisos de Internet también.

¿Alguien tiene alguna sugerencia por favor? No puedo encontrar ninguna información útil en ninguna parte.

Gracias.

+0

¿Ha intentado utilizar 'player.prepareAysnc()' en lugar de 'player.prepare()'? Debería usar 'prepareAsync()' cuando se reproduzcan las secuencias. – Squonk

Respuesta

3

no estoy seguro de Android soporta de forma nativa UDP, ya que no aparece en la lista de los protocolos de red

http://developer.android.com/guide/appendix/media-formats.html

Muchos mediaplayers 3 ª parte se basan en las bibliotecas FFMPEG. Es posible que desee utilizar FFMPEG en su proyecto, aunque esa es una tarea propia.

+0

Sí, parece que es el caso! ¡Había visto esa página pero esperaba que alguien hubiera encontrado su propia solución! – theChumpus

+0

@theChumpus, Alex, ¿has usado witch ffmpeg lib? ¿Utilizaste una lib compilación previa? ¿Has probado los videos de stream h264? – Derzu

+0

@Derzu He compilado ffmpeg en Unix como lo hacen en http://code.google.com/p/dolphin-player/. Juega h264 sí. –

1

También puede transmitir vía udp: // utilizando la biblioteca Vitamio (utiliza ffmpeg detrás de escena). http://www.vitamio.org/en/

+0

He eliminado mi publicación anterior, ya que probé vitamio en mi tableta (nexus-7) y funcionó bien. – user1767754

+0

podría comprobar amablemente https://stackoverflow.com/questions/45521175/vitamio-unable-to-play-udp-streaming-in-android? –

+0

Tendré que buscar mi código POC para un proyecto en particular que hice hace 4 años; No tengo el trabajo real que se hizo para esto, por supuesto, ya que no me pertenece. Sin hacer ninguna promesa, pero miraré. –

Cuestiones relacionadas