Ho un progetto Android in cui ho bisogno di costruire un'app client per ricevere flussi video unicast UDP o RTP e riprodurli. Sfortunatamente, non riesco a farlo funzionare e ho cercato a lungo una soluzione!Streaming video UDP su Android
Ho eseguito il test su un Xoom (Android 3.2) e un Nexus S (Android 2.3.6) e so che possono riprodurre il contenuto quando si utilizza MX Player (un'app di un lettore multimediale di terze parti) come client ma io impossibile ottenere il lettore multimediale nativo per riprodurre il contenuto. Ho provato a utilizzare sia una semplice VideoView che un MediaPlayer ma entrambi non riescono con lo stesso codice di errore e non riesco davvero a trovare alcuna informazione utile su.
Il video è codificato H.264 con audio aac.
Inoltre, il server è una soluzione da una terza parte che non ho accesso a (diverso per specificare UDP o RTP), ma, come ho detto, quando si utilizza MX Player, i flussi possono essere riprodotti.
Ecco la parte media player del mio codice:
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();
}
}
L'errore che sto ricevendo è:
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)
Ho impostato anche i permessi di Internet.
Qualcuno ha qualche suggerimento per favore ?? Non riesco a trovare nessuna informazione utile da nessuna parte.
Grazie.
Hai provato a utilizzare 'player.prepareAysnc()' invece di 'player.prepare()'? Dovresti usare 'prepareAsync()' durante la riproduzione di stream. – Squonk