Suite à une demande, j'ai besoin de jouer une vidéo dans mon application.
Pour plus de simplicité, j'ai décidé de créer un nouveau projet dédié seulement à lire une vidéo.
J'ai essayé trois méthodes :
- Utiliser seulement un VideoView et de définir un Uri via la méthode setVideoUri.
- Utiliser un SurfaceView, puis lier le Media Player au Holder. ( Définir la datasource après la création du media player)
- Utiliser un SurfaceView, puis lier le Media Player au Holder. ( Définir la datasource à la création du media player)
Mais rien n'y fait, cela ne fonctionne pas et j'ai toujours ce message d'erreur :
- Couldn't open file on client side, trying server side
Voici mon code :
- Code: Tout sélectionner
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Test6Activity extends Activity implements SurfaceHolder.Callback {
MediaPlayer mediaPlayer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse("http://delivery1.youmake.tv/2010/10/06/v/16742/16742.mp4"));
SurfaceView surface = (SurfaceView)findViewById(R.id.surface);
SurfaceHolder holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setFixedSize(400, 300);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mediaPlayer.setDisplay(holder);
//mediaPlayer.setDataSource("http://delivery1.youmake.tv/2010/10/06/v/16742/16742.mp4");
//mediaPlayer.prepare();
mediaPlayer.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
//} catch (IOException e) {
//e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mediaPlayer.release();
}
}
Je ne vois vraiment pas où le problème se situe.
Pensez-vous que je dois d'abord télécharger la vidéo dans mes ressources pour l'afficher ? (Même si cela ne me convient pas)
Par avance, merci.
Cordialement,
Kévin.

