Android 使用mediaplayer播放视频时,表面查看空白
这是我的代码,但当我启动mediaplayer时,它只发出声音,而表面没有显示任何内容。为什么? 我对此一无所知。你有一些代码可以帮我学习吗Android 使用mediaplayer播放视频时,表面查看空白,android,media-player,surfaceview,Android,Media Player,Surfaceview,这是我的代码,但当我启动mediaplayer时,它只发出声音,而表面没有显示任何内容。为什么? 我对此一无所知。你有一些代码可以帮我学习吗 videoV = (SurfaceView) findViewById(R.id.SurfaceView1); sh = videoV.getHolder(); File path = Environment.getExternalStorageDirectory(); File file = new File(path,
videoV = (SurfaceView) findViewById(R.id.SurfaceView1);
sh = videoV.getHolder();
File path = Environment.getExternalStorageDirectory();
File file = new File(path, "sample2.mp4");
sh.addCallback(this);
mp = new MediaPlayer();
mp.setDataSource(file.getAbsolutePath());
mp.setDisplay(sh);
mp.prepare();
mp.start();
试试这段代码
resource
是您想要播放的文件名,1。2
是程序包名,您的路径可能类似于android。resource://package_name/raw/file_name
VideoView video=(VideoView) findViewById(R.id.videoview);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
//Uri uri = Uri.parse("android.resource://play.vedio/"+R.raw.dobeernotdrugs);
video.setKeepScreenOn(true);
video.setVideoPath("android.resource://one.two/raw/"+resource);
video.start();
video.requestFocus();
再看一下这个您是否添加了准备好的侦听器?我在该方法中实现了start,因为它是指示视频何时准备好渲染的触发器
sh.addCallback(this);
mp = new MediaPlayer();
mp.setDataSource(file.getAbsolutePath());
mp.setDisplay(sh);
mp.setOnPreparedListener(this);
mp.prepare();
public void onPrepared(MediaPlayer arg0) {
mp.start();
}
尝试在后面添加
sh.addCallback(this);
这个
对我来说,这很有帮助
这对android新手或任何看到这一点的人来说都是有益的
在我的例子中,在OnCreate
方法中使用此代码片段帮助我找到可以使用SurfaceView
if (
GLES20.glGetString(GLES20.GL_RENDERER) == null ||
GLES20.glGetString(GLES20.GL_VENDOR) == null ||
GLES20.glGetString(GLES20.GL_VERSION) == null ||
GLES20.glGetString(GLES20.GL_EXTENSIONS) == null ||
GLES10.glGetString(GLES10.GL_RENDERER) == null ||
GLES10.glGetString(GLES10.GL_VENDOR) == null ||
GLES10.glGetString(GLES10.GL_VERSION) == null ||
GLES10.glGetString(GLES10.GL_EXTENSIONS) == null) {
// try to use SurfaceView
} else {
// try to use TextureView
}
要了解
SurfaceView
和TextureView
之间的差异,请参阅。自蜂巢起,方法setType已被弃用。
if (
GLES20.glGetString(GLES20.GL_RENDERER) == null ||
GLES20.glGetString(GLES20.GL_VENDOR) == null ||
GLES20.glGetString(GLES20.GL_VERSION) == null ||
GLES20.glGetString(GLES20.GL_EXTENSIONS) == null ||
GLES10.glGetString(GLES10.GL_RENDERER) == null ||
GLES10.glGetString(GLES10.GL_VENDOR) == null ||
GLES10.glGetString(GLES10.GL_VERSION) == null ||
GLES10.glGetString(GLES10.GL_EXTENSIONS) == null) {
// try to use SurfaceView
} else {
// try to use TextureView
}