我想制作一个视频播放器。 当我运行应用程序时,下面的代码正在运行。 但如果我单击主页键并返回 Activity ,声音会传来但视频消失了。 我认为这是因为 surfaceview 被破坏了。
我尝试了几种方法来重新创建 serfaceView,但没有奏效。 每次都只发出声音。
请查看我的代码并帮助我~!
我现在正在制作一些自定义 UI.. 所以我不能使用 videoview 和 mediacontroller。 请仅针对 MediaPlayer 的情况提出建议..
谢谢!
public class AndroidVideoPlayerActivity extends Activity implements SurfaceHolder.Callback{
SurfaceView surface;
SurfaceHolder sh;
MediaPlayer mp;
String web_video = "http://xxx.mp4"; //some address
Button startB, stopB;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startB = (Button)findViewById(R.id.startB);
stopB = (Button)findViewById(R.id.stopB);
surface = (SurfaceView)findViewById(R.id.surfaceView1);
sh = surface.getHolder();
sh.addCallback(this);
sh.setFixedSize(400, 300);
sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mp = new MediaPlayer();
mp.setDisplay(surface.getHolder());
startB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playVideo();
}
});
stopB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopVideo();
}
});
}//onCreate
@Override
protected void onPause() {
super.onPause();
mp.pause();
}
@Override
protected void onRestart() {
super.onRestart();
mp.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
mp.stop();
mp.release();
mp = null;
}
private void playVideo(){
try{
mp.setDataSource(web_video);
mp.prepare();
mp.start();
}catch(Exception e){
Log.d("ERROR", e+"");
}
}
private void stopVideo(){
mp.stop();
mp.release();
mp = null;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
最佳答案
我自己回答。
我在 surfaceCreated 中放了两行,它起作用了。
public void surfaceCreated(SurfaceHolder holder) {
if(mp == null)mp = new MediaPlayer();
mp.setDisplay(holder);
}
关于android - restart() 时如何为视频播放重新创建 surfaceview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296655/