2

mediaplayer を使用してアプリでビデオを再生すると、問題が発生します。ビデオが正常に再生される場合もありますが、黒い画面が表示される場合もあります。同じファイルでテストしたため、ビデオを呼び出しているファイルではありません。動作する場合と動作しない場合があります。この問題は、いくつかのビデオを再生した後に最もよく発生すると思います。私は通常、問題が始まる前に 3 ~ 4 でプレイします。何が原因で、どうすれば修正できるのだろうと考えていました。私のコードは以下に掲載されています。

public class FullImageActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener, OnErrorListener{

private static final String TAG = null;
MediaPlayer player;
SurfaceView surfaceview;
SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.full_image);

    Intent i = getIntent();

    long id = i.getExtras().getLong("id");
    String path = i.getExtras().getString("videopath");

    surfaceview = (SurfaceView)findViewById(R.id.surfaceview);
    surfaceHolder = surfaceview.getHolder();
    surfaceHolder.addCallback(this);

    player = new MediaPlayer();

    try {
        player.reset();


        player.setOnErrorListener(this);
        player.setDataSource(path);
        player.setOnPreparedListener(this);

        player.prepare();
        player.start();


    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}
@Override
public void surfaceCreated(SurfaceHolder holder) {
    player.setDisplay(holder);
}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

}
@Override
public void onPrepared(MediaPlayer p) {

}

@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
    Log.i(TAG, "THERE WAS AN ERROR");
    return false;
}

ありがとう。

4

2 に答える 2

1

問題は、実装が、メディア プレーヤーが終了したときにアクティビティが破棄されるという前提に依存していることです。

それでも、インテントが起動されたときに、アクティビティがすでに存在している可能性があります。その場合、アプリケーションは onCreate() をスキップするため、メディア プレーヤーを初期化できません。

メディア プレーヤーを起動するには、onStart() メソッドをオーバーライドする必要があります。

于 2013-06-26T14:30:18.013 に答える
1

問題が何であるかを正確に知ることは困難です。

試してみるいくつかのこと:

于 2013-06-26T14:20:59.400 に答える