请教:SurfaceView+mediaplayer有声音无视频是怎么回事?

niitqin 2012-05-21 06:30:02
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MediaPlayDemo extends Activity {
private SurfaceView surfaceView = null ;
private SurfaceHolder surfaceHolder = null ;
private MediaPlayer mp = null ;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView = new SurfaceView(this);
this.surfaceHolder = this.surfaceView.getHolder();
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
this.setContentView(this.surfaceView);

this.mp = new MediaPlayer();
try {
mp.setDataSource("/sdcard/wozhinvrenxin.mp4");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mp.setDisplay(surfaceHolder);
this.mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
this.mp.prepare();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mp.start();
}
}
...全文
416 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
niitqin 2012-05-22
  • 打赏
  • 举报
回复
问题已经解决了,1楼,3楼正解。
谢谢。
niitqin 2012-05-22
  • 打赏
  • 举报
回复
问题已经解决了,1楼,2楼正解。
谢谢。
CyberLogix 2012-05-21
  • 打赏
  • 举报
回复
SurfaceView没有创建成功,所以没有视频
AMinfo 2012-05-21
  • 打赏
  • 举报
回复
上面代码中mp4路径要改一下。
AMinfo 2012-05-21
  • 打赏
  • 举报
回复
原因是:MediaPlayer开始播放后,SurfaceView还没有创建出来,因此会出现有声音没图像,解决办法:

通过surfaceHolder.addCallback监听surfaceCreate事件后再播放;

public class MediaPlayDemo extends Activity implements SurfaceHolder.Callback
{
private SurfaceView surfaceView = null ;
private SurfaceHolder surfaceHolder = null ;
private MediaPlayer mp = null ;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
surfaceView = new SurfaceView(this);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(this);
setContentView(surfaceView);


}

@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 = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDisplay(surfaceHolder);
try {
mp.setDataSource("/sdcard/DownAndPlay/xyj.mp4");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mp.prepare();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
}

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

}

}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧