同时平滑地播放连续的视频,无显式切换。

15

我是新手,想在Android上播放视频,使它们一个接一个地同时播放,以便看起来像连续的视频。

我在stackoverflow上找到了这个链接非常有帮助。how-to-play-videos-one-after-another-simultaneously 当我使用这个代码时,虽然我能够播放视频,但从一个片段切换到另一个片段会导致暂停一秒钟后才播放下一个片段。因此,由于这个问题,它不像连续的视频那样连贯。

请帮助我解决这个问题。 这是我的代码。

public class VideoActivity extends Activity{

     VideoView videoView, videoView1;
     MediaController mc;
     int count = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        videoView = (VideoView) findViewById(R.id.VVSimpleVideo);
        setup();
        videoView.setOnCompletionListener(completionListener);

    }

    public void setup() {

        String _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
        videoView.start();
        count++;
    }


    private OnCompletionListener completionListener=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            setup();
        }
    };

}

现在我尝试使用两个VideoView类的实例进行播放。 通过第一个播放器播放第一个视频,通过第二个播放器播放第二个视频, 接着通过第一个播放器播放第三个视频,第二个播放器播放第四个视频等等。

但是我仍然无法流畅地播放视频,同样的问题依然存在。

以下是我的双倍播放器代码。

public class VideoActivity extends Activity{

     VideoView videoView, videoView1;
     MediaController mc;
     int count = 0;
     String _path;
     String _path1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        videoView = (VideoView) findViewById(R.id.VVSimpleVideo);
        _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
         videoView.start();
        //setup();
        videoView.setOnCompletionListener(completionListener);

        videoView1 = (VideoView) findViewById(R.id.VVSimpleVideo);

        videoView1.setOnCompletionListener(completionListener1);
        count++;
        _path1 = "/mnt/sdcard/Video/"+count+".mp4";
        videoView1.setVideoPath(_path1);
    }

    public void setup() {


        videoView.start();
        count++;
        _path1 = "/mnt/sdcard/Video/"+count+".mp4";
        videoView1.setVideoPath(_path1);
    }

    public void setup1() {


        videoView1.start();

        count++;
        _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
    }

    private OnCompletionListener completionListener=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            setup1();       

        }
    };

    private OnCompletionListener completionListener1=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();

            setup();        

        }
    };

}

嗨piku,我也遇到了类似的问题。你能够实现最小的“黑屏切换”时间吗? - code
使用 exoPlayer。此库可以帮助您将多个视频串联在一起。 - roghayeh hosseini
1个回答

2
您实际上并没有同时使用两个VideoViews,而是将VideoView和VideoView1都赋值给R.id.VVSimpleVideo,因此它们是相同的对象。这意味着每次您点击onCompletion时,它都会重新设置自己,而不是设置一个并播放另一个。
尝试在布局中创建两个单独的VideoView对象。将其中一个设置为VISIBLE,将另一个设置为GONE/INVISIBLE,并在需要更改时进行交换。
我无法保证它能够做到“无缝”,因为这几乎是不可能的任务。即使大多数桌面媒体播放器也不是真正的无缝。这取决于您对接缝的容忍度。

嗨,Geobits,感谢您的回复。感谢您纠正在布局中使用两个不同的VideoView。但是,如果设置为GONE / INVISIBLE,则无法启动第二个VideoView。每次只有第一个播放器在轮到它时才能工作。然后我尝试通过videoView.setVisibility(0)来实时设置可见性;我没有找到VISIBLE / GONE / INVISIBLE作为可能的值,因此将其设置为0。仍然无法显示第二个视频的帧,尽管可以听到音乐。 - piku
嗨,我能够通过videoView1.setVisibility(View.VISIBLE)在运行时更改可见性。但是在切换时它会显示一些黑屏,所以播放不够流畅。 - piku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接