Suj*_*ana 12 android surfaceview media-player surfaceholder
我正在用Android媒体播放器对象构建视频播放器.我能够听到音频,但视频没有出现在surfaceView上.这是我的代码
public class PlayerActivity extends Activity implements SurfaceHolder.Callback {
String path;
private MediaPlayer mp;
private SurfaceView mPreview;
private SurfaceHolder holder;
boolean pausing = false;
public static String filepath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
getWindow().setFormat(PixelFormat.UNKNOWN);
mPreview = (SurfaceView)findViewById(R.id.surfaceView);
holder = mPreview.getHolder();
holder.setFixedSize(176, 144);
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mp = new MediaPlayer();
mp.setDisplay(holder);
try {
Intent intent = getIntent();
Uri fileuri = intent.getData();
filepath=fileuri.getPath();
} catch(Exception e) {}
try {
mp.setDataSource(filepath);
mp.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
}
Run Code Online (Sandbox Code Playgroud)
目标是android 2.3及以上版本.如何解决它请帮帮我..
Suj*_*ana 25
最后我自己解决了.刚刚调用了mp.setDisplay(holder);surfaceCreated()函数.最后的代码是
public class PlayerActivity extends Activity implements SurfaceHolder.Callback {
String path;
private MediaPlayer mp;
private SurfaceView mPreview;
private SurfaceHolder holder;
boolean pausing = false;
public static String filepath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
getWindow().setFormat(PixelFormat.UNKNOWN);
mPreview = (SurfaceView)findViewById(R.id.surfaceView);
holder = mPreview.getHolder();
holder.setFixedSize(800, 480);
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mp = new MediaPlayer();
try{
Intent intent = getIntent();
Uri fileuri = intent.getData();
filepath=fileuri.getPath();
}catch(Exception e){}
}
protected void onPause(){
super.onPause();
mp.release();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mp.setDisplay(holder);
play();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
void play(){
try {
mp.setDataSource(filepath);
mp.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30776 次 |
| 最近记录: |