wake-up-neo.com

Wiedergabe von Videos mit der MediaPlayer-Klasse

Ich versuche, die MediaPlayer-Klasse zum Abspielen einer Videodatei zu verwenden. Das Problem ist, dass Videos überhaupt nicht angezeigt werden, obwohl ich den Ton im abgespielten Video hören kann.

Nachfolgend ist der Aktivitätscode

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;
    }
  }
   }

Nachfolgend finden Sie den Code für Layout-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>

bitte sag mir, was zu tun ist? Vielen Dank im Voraus.

15
Anonymous C

Sie können die Funktion onSizeChanged() der Klasse SurfaceView überschreiben, um die Größe der Ansicht zu ermitteln und festzulegen.

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

Wenn sich die Bildschirmgröße geändert hat, wird diese Klasse aufgerufen.

Als zweite Alternative können Sie möglicherweise die Größe festlegen, indem Sie die Layoutparameter festlegen (unsicher, ob dies mit ScrollView funktioniert):

@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

oberfläche festlegen Ansichtshöhe und -breite, um das übergeordnete Element in der XML-Datei zu füllen.

  <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

Nun, ich weiß nicht, ob Sie eine bestimmte Situation benötigen, aber haben Sie bereits FullscreenVideoView probiert?

Es versucht, alle diese SurfaceView-Probleme zu abstrahieren, und Sie können sich nur auf die Schaltflächen der Benutzeroberfläche konzentrieren. Wenn es geöffnet ist, können Sie FullscreenVideoView subclassieren und nach Bedarf anpassen. 

0
Hamiseixas

Wenn Sie Ihr SurfaceView-Layout auf wrap_content einstellen, wird ein Video nicht im richtigen Seitenverhältnis für die Wiedergabe formatiert.

Sie können auf diesen Antwortlink verweisen

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

Und auch dieses BlogMedien auf Oberflächen mit Android.media.MediaPlayer abspielen

0
Nirali