Android 媒体播放器 - 如何在视频之间切换?

发布于 2024-12-18 14:24:08 字数 1436 浏览 2 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

递刀给你 2024-12-25 14:24:08

您可以通过保留两个媒体播放器并在它们之间切换来切换视频。
你准备第二个来寻找它,当时机成熟时你将它们切换出去。
下面的代码是用于相同的事情,只是我在用户交互中使用它。
(您可以忽略 AssetFileDeciptor,因为这是我打开视频的方式)。

videoPlayer2 = new MediaPlayer();
AssetFileDescriptor descriptor = ExpansionFiles.SharedSingleton().getZipAssetFileDescriptorForFile("video" + camera + ".mp4", context);
if ( descriptor != null ) {
    try {
        videoPlayer2.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        videoPlayer2.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    videoPlayer2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            videoPlayer2.start();
            videoPlayer2.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
                @Override
                public void onSeekComplete(MediaPlayer mp) {
                    videoPlayer.setDisplay(null);
                    videoPlayer2.setDisplay(surfaceHolder);
                    videoPlayer2.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                        @Override
                        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                            if ( videoPlayer2 != null && videoPlayer != null ) {
                                videoPlayer = videoPlayer2;
                                videoPlayer2 = null;
                            }
                        }
                    });



                }
            });
            videoPlayer2.seekTo(videoPlayer.getCurrentPosition());
        }
    });

You can switch the videos by keeping two MediaPlayers and switching between them.
You prepare the second one seek it and when the time is right you switch them out.
The code below is for the same thing except I use it on user interaction.
(you can ignore the AssetFileDesciptor as it's the way I open videos).

videoPlayer2 = new MediaPlayer();
AssetFileDescriptor descriptor = ExpansionFiles.SharedSingleton().getZipAssetFileDescriptorForFile("video" + camera + ".mp4", context);
if ( descriptor != null ) {
    try {
        videoPlayer2.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        videoPlayer2.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    videoPlayer2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            videoPlayer2.start();
            videoPlayer2.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
                @Override
                public void onSeekComplete(MediaPlayer mp) {
                    videoPlayer.setDisplay(null);
                    videoPlayer2.setDisplay(surfaceHolder);
                    videoPlayer2.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                        @Override
                        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                            if ( videoPlayer2 != null && videoPlayer != null ) {
                                videoPlayer = videoPlayer2;
                                videoPlayer2 = null;
                            }
                        }
                    });



                }
            });
            videoPlayer2.seekTo(videoPlayer.getCurrentPosition());
        }
    });
若相惜即相离 2024-12-25 14:24:08

如何实现视频A从上次暂停时间恢复的标记?

您可以执行 seekTo() 跳转到特定位置。但这里的问题是您应该等待 seekTo() 完成。而Android并没有为VideoView提供这样的回调。

因此,我建议您使用 Vitamio 的 VideoView

How can achieve the tagging for the video A for resuming from the previously paused time?

You can do a seekTo() to jump to a particular position. But the problem here is that you should wait for the seekTo() to complete. And Android does not provide such a callback for the VideoView.

So instead I suggest that you go for Vitamio's VideoView

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文