这是我的代码,但是当我启动媒体播放器时,它只有声音出来而表面没有任何显示。为什么呢?
我对此一无所知。你有一些代码可以帮我学习吗?
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();
答案 0 :(得分:5)
尝试在
之后添加sh.addCallback(this);
此
sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
就我而言,它很有帮助。
答案 1 :(得分:3)
您是否添加了准备好的听众?我在该方法中实现了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();
}
答案 2 :(得分:1)
尝试此代码。
resource
是您要播放的文件名,one.two
是您的路径可能与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();
另请查看此tutorial
答案 3 :(得分:0)
这对于新手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
之间的区别,请参见this link。