【问题标题】:Android: MediaPlayer isPlaying: 0Android:媒体播放器正在播放:0
【发布时间】:2016-09-16 10:32:52
【问题描述】:

此代码同步surfaceview和媒体播放器用于在线流媒体

我的代码:

static SurfaceView           videoSurface;
static SurfaceHolder         videoHolder;
static MediaPlayer           mediaPlayer;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page);
        videoSurface = (SurfaceView) findViewById(R.id.surfView);
        videoHolder = videoSurface.getHolder();
        videoHolder.addCallback((Callback) this);

        mediaPlayer = new MediaPlayer();

        new Thread(new Runnable() {

                @Override
                public void run() {
                    String link = "link.m3u8";

                    imgPlay.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {    
                        play(link);
                    }
                });
        }
    }).start();
}

public static void play(final String link) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    if (mediaPlayer == null) {
                        mediaPlayer = new MediaPlayer();
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    }
                    mediaPlayer.setDisplay(videoHolder);
                    mediaPlayer.setDataSource(link);
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                        public void onPrepared(MediaPlayer mp) {
                            mp.start();
                        }
                    });
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
            }).start();
    }

这段代码可以工作,但几秒钟后

如果加载完成后我点击imgPlay,错误正在播放0

但如果我等待几秒钟,然后点击 imgPlay 播放没有问题!

【问题讨论】:

  • 你正在启动线程,就像它们是烟花一样
  • 好的,我在 UI 中使用它,但不起作用

标签: android android-mediaplayer surfaceview


【解决方案1】:
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;

public class MediaActivity extends AppCompatActivity implements SurfaceHolder.Callback {
static SurfaceView videoSurface;
static SurfaceHolder videoHolder;
static MediaPlayer mediaPlayer;
private ImageView imgPlay;

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

    videoSurface = (SurfaceView) findViewById(R.id.surfView);
    videoHolder = videoSurface.getHolder();
    videoHolder.addCallback(this);
    imgPlay = (ImageView) findViewById(R.id.imgPLay);

    final String link = "Your Link here";
    mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(link);
    } catch (IllegalArgumentException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        e.printStackTrace();
    }

    new Thread(new Runnable() {

        @Override
        public void run() {

            imgPlay.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    try {

                        try {
                            mediaPlayer.prepare();
                        } catch (IllegalStateException e) {
                            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                        } catch (IOException e) {
                            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                        }
                        mediaPlayer.start();

                        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                            @Override
                            public void onCompletion(MediaPlayer mp) {
                                Log.i("Completion Listener", "Song Complete");
                                mp.stop();
                                mp.reset();
                                try {
                                    mp.prepare();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                mp.start();
                            }
                        });
                        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                            public void onPrepared(MediaPlayer mp) {
                                mp.start();
                            }

                        });
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }).start();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}
}

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多