采用mediaplayer + SurfaceView 播放视频时出现有声音没有图像的问题,原因是播放时Surface还没有创建好,如果是通过按键来调用播放一般没有这个问题,但是在构造里面直接创建mediaplayer好像是会出现这个问题
解决方法是通过回调的方式,确认surface创建好了再开始播放
SurfaceHolder surfaceHolder = ((SurfaceView)findViewById(R.id.SurfaceView)).getHolder();
surfaceHolder.addCallback(new SurfaceHolderCallback());
surfaceHolder.setFixedSize(300,300);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
class SurfaceHolderCallback implements SurfaceHolder.Callback
{
@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
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.reset();
mPlayer.setDisplay(holder);
try {
mPlayer.setDataSource("rtsp://122.192.35.80:554/live/tv03");
mPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
本文详细介绍了在Android应用中使用MediaPlayer与SurfaceView结合播放视频时,遇到声音有而图像无的问题。通过分析原因发现,SurfaceView的创建过程可能导致播放延迟。为了解决此问题,提出了通过回调方式确认SurfaceView创建完成后再进行MediaPlayer初始化的解决方案,并提供了完整的代码示例。

3万+

被折叠的 条评论
为什么被折叠?



