原为链接如下:

https://blog.csdn.net/Rookie_or_beginner/article/details/115129648 icon-default.png?t=M5H6 https://blog.csdn.net/Rookie_or_beginner/article/details/115129648 简单来说,就是Activity受到锁屏和切换界面的影响销毁了播放时的SurfaceHolder,重新进入程序后没有给播放器指定新的SurfaceHolder,导致没有画面或者画面全黑。

重新写一下解决方案!

使用MediaPlayer+SurfaceView来替换原有的VidwoView

在Activity的onCreate之前声明

private String VideoPath="";//视频的路径,我使用的时raw下的
private SurfaceView videoView;//layout新加SurfaceView
private MediaPlayer videoPlayer;//要在SurfaceView里去创建Media
private boolean IsSurfaceDestoryed=false;//是否被销毁

在Activity的onCreate里面给SurfaceView添加回调

videoView = (SurfaceView) findViewById(R.id.VideoSurfaceView);//id:VideoSurfaceView
videoView.getHolder().addCallback(new SurfaceViewCallback());//添加回调
//设置视频路径,直接播放raw文件夹下视频
VideoPath = "android.resource://" + getPackageName() + "/" + R.raw.back;

在Activity的类中添加SurfaceViewCallback

//surface 回调
    class SurfaceViewCallback implements SurfaceHolder.Callback {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                if(videoPlayer==null) {
                    videoPlayer = new MediaPlayer();
                    try {
                        videoPlayer.setDataSource(MainActivity.this,Uri.parse(VideoPath));
                    } catch (IOException e) {
                        e.printStackTrace();
                    videoPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
                    videoPlayer.setLooping(true);
                    videoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            if (!videoPlayer.isPlaying()) {
                                if (IsSurfaceDestoryed) {
                                    IsSurfaceDestoryed = false;
                                videoPlayer.setDisplay(holder);
                                videoPlayer.start();
                                //循环播放
                                videoPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                                    @Override
                                    public void onCompletion(MediaPlayer mPlayer) {
                                        // TODO Auto-generated method stub
                                        mPlayer.start();
                                        mPlayer.setLooping(true);
                    videoPlayer.setDisplay(holder);
                    videoPlayer.prepareAsync();
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            ///释放
            IsSurfaceDestoryed = true;
            videoPlayer.release();
            videoPlayer=null;
				
导致锁屏黑屏的原因:播放视频过程中锁屏不可见时,则SurfaceHolder对象会销毁,当切换可见时因为mediaPlayer.setDisplay()的SurfaceHolder对象不存在,所以只有声音没有视频。 解决方案:可以在初始化时通过surfaceView获取SurfaceHolder对象,通过addCallback监听SurfaceHolder.Callback接口,SurfaceHolder.Callback三个回调方法分别如下: surfaceCreated surfaceChanged VideoViewAndroid视频播放中很常用,用法也比较简单。但是,我在使用VideoView时遇到一个很棘手的问题:VideoView播放本地视频的开始会出现短暂的黑屏。通常这种黑屏在新打开的页面中是勉强可以接受的,不过,如果是针对在应用的启动页播放视频这样的业务场景,这样的黑屏就很难以被接受了。 首先来看一下为什么会出现黑屏的现象。视频本地播放前短暂黑屏,是由于VideoView加载资源需要一定的耗时,视频加载到视频渲染到屏幕这个过程也是需要时间的。如何避免播放前的黑屏现象呢,下面就通过一
android VideoView播放视频前黑屏问题,亲测有效 今天选择本地视频上传的功能,用VideoView预览,在设置路径后是黑频状态,我想要的是显示最开始的视频画面, 在网上找都说用一个ImageView盖住,当设置视频时显示imageView,播放后再隐藏,感觉我就播放个视频,应该不用那么麻烦,经过一番尝试,发现一种方法可行 videoView.seekTo(1);//调整从第一毫秒进行播放 感觉这种方法比较方便,还比较灵活,如果视频前面有一段就是黑频(我发现我手机录频就有这个问题)还可以直接跳过
VideoView 在播放视频前会有黑屏,点击播放时,黑屏才会消失。原因是videoview加载资源需要一定的耗时,我们可以利用MediaMetadataRetriever来解决黑屏问题。 如何利用VideoView 播放视频呢? 一、mainfest.xml给入读SD的权限 二、绑定View Mainfest.xml文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.and.
最近的项目中需要用到VideoView实现视频播放,自己花了一天多时间才能出来,有点想打自己再见,在学校的时候没好好学。 使用VideoView播放视频的步骤如下: 1) 在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件。 2) 调用VideoView的如下两个方法来加载指定视频。 setVideoPath(String path):加载 path 文件所代表的视频。 setVideoURI(Uri uri):加载uri所对应的视频。 3) 调用VideoView的start()、stop()、pause()方法来控制视频播放。 实际上与VideoView