一个接一个地同时流畅地播放视频[没有可见的从一个切换到另一个]

Posted

技术标签:

【中文标题】一个接一个地同时流畅地播放视频[没有可见的从一个切换到另一个]【英文标题】:Play video one after another simultaneously smoothly [without visible switching from one to another] 【发布时间】:2012-11-02 12:40:30 【问题描述】:

我是 android 新手,想一个接一个地同时播放视频,让它看起来像连续的视频。

我发现 *** 上的这个链接很有帮助。 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,我也有类似的问题。您是否能够实现最小的“黑屏切换”时间? 使用 exoPlayer。该库可帮助您将多个视频连接在一起 【参考方案1】:

您根本没有真正使用两个VideoViews,而是将VideoViewVideoView1 分配给R.id.VVSimpleVideo,所以它们是同一个对象。这意味着每次你点击onCompletion,它都会重新设置自己,而不是设置一个然后播放另一个。

尝试在布局中创建两个单独的 VideoView 对象。一组为VISIBLE,一组为GONE/INVISIBLE,当你想改变的时候交换。

不过,我不能保证它会使其“无缝”,因为这几乎是不可能完成的任务。即使是大多数桌面媒体播放器也不是真正无缝的。这仅取决于您对接缝的容忍度。

【讨论】:

嗨 Geobits,感谢您的回复。感谢您纠正在布局中使用两个不同的 VideoView。但是如果有 GONE/INVISIBLE 则无法启动第二个。每次轮到第一个玩家工作时。然后我尝试通过 videoView.setVisibility(0); 动态设置可见性;我没有发现 VISIBLE/GONE/INVISIBLE 作为可能的值,所以设置为 0。尽管音乐即将播放,但仍然无法显示第二个视频的帧。 嗨,我可以通过 videoView1.setVisibility(View.VISIBLE) 即时更改可见性,但是当它切换时,它会在两者之间显示一些停电,因此播放不流畅。

以上是关于一个接一个地同时流畅地播放视频[没有可见的从一个切换到另一个]的主要内容,如果未能解决你的问题,请参考以下文章

在 VideoView 中一个接一个地播放视频

dash.js 无法一个接一个地播放多个视频

在 recyclerview 中流畅地播放来自 URL 的视频

如何优化 mp4 视频以在浏览器中尽可能流畅地播放 (HTML5)

UISlider 不是每毫秒都流畅地滴答作响

Web:如何无延迟地一个接一个地播放音频文件?