web-dev-qa-db-fra.com

Lecture de vidéos à l'aide de la classe MediaPlayer

J'essaie d'utiliser la classe MediaPlayer pour lire un fichier vidéo. Le problème est que la vidéo ne s'affiche pas du tout, même si je peux entendre le son dans la lecture de la vidéo.

Voici le code d'activité

public class MainActivity extends Activity implements OnClickListener {

private SurfaceView surfaceView;
private Button btnPlay;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    addListener();

}

private void init() {
    // TODO Auto-generated method stub
    surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
    btnPlay = (Button) findViewById(R.id.btnPlay);
}

private void addListener() {
    // TODO Auto-generated method stub

    btnPlay.setOnClickListener(this);
}

MediaPlayer mediaPlayer = null;

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.btnPlay:
        try{
        if (mediaPlayer != null) {
            mediaPlayer.reset();
            mediaPlayer.release();
        }else{
        getWindow().setFormat(PixelFormat.UNKNOWN);
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.wildlife);
        SurfaceHolder surfaceHolder = surfaceView.getHolder();

        surfaceHolder.setFixedSize(176, 144);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_Push_BUFFERS);
        mediaPlayer.setDisplay(surfaceHolder);
        mediaPlayer.start();}
        }catch (Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
        break;

    default:
        break;
    }
  }
   }

Voici le code de mise en page XML

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<SurfaceView
    Android:id="@+id/surfaceView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentRight="true"
    Android:layout_alignParentTop="true" />

<Button
    Android:id="@+id/btnPlay"
    style="?android:attr/buttonStyleSmall"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignRight="@+id/surfaceView1"
    Android:layout_alignTop="@+id/surfaceView1"
    Android:text="@string/play" />

</RelativeLayout>

s'il vous plaît dites-moi ce qui doit être fait? Merci d'avance.

15
Anonymous C

Vous pouvez remplacer la fonction onSizeChanged() de la classe SurfaceView pour obtenir et définir la taille de la vue.

protected void onSizeChanged (int w, int h, int oldw, int oldh)

Chaque fois que la taille de l'écran a changé, cette classe est appelée.

En tant que deuxième alternative, vous pourrez peut-être définir la taille en définissant les paramètres de présentation (vous ne savez pas si cela fonctionne avec ScrollView):

@Override
public void surfaceCreated(SurfaceHolder holder) {
    Android.view.ViewGroup.LayoutParams lp = this.getLayoutParams();
    lp.width = 1000; // required width
    lp.height = 1000; // required height
    this.setLayoutParams(lp);
}
0
Brijesh Singh

définissez la hauteur et la largeur de la vue pour remplir le parent dans un fichier XML.

  <SurfaceView
Android:id="@+id/surfaceView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true" />
0
Priya

Eh bien, je ne sais pas si vous avez besoin d'une situation spécifique, mais avez-vous déjà essayé FullscreenVideoView ?

Il essaie de résumer tous les problèmes de SurfaceView et vous pouvez vous concentrer uniquement sur les boutons de l'interface utilisateur. Comme il est ouvert, vous pouvez sous-classer FullscreenVideoView et le personnaliser selon vos besoins. 

0
Hamiseixas

Définir votre mise en page SurfaceView sur wrap_content ne dimensionnera pas une vidéo afin qu'elle soit lue avec le rapport de format approprié.

Vous pouvez vous référer à ce lien de réponse

https://stackoverflow.com/a/6283676/1441666

Et aussi ce blogLire des médias sur surfaceview avec Android.media.MediaPlayer

0
Nirali