[在Android中将seekTo与MediaPlayer一起使用时出现黑屏

问题描述 投票:0回答:1

我的目标是向用户显示录制的9帧视频,以便他可以选择其中之一。

所以我做的是一个活动,以录制视频,并将URI从视频发送到另一个活动,该活动将显示该录制的视频中的9帧。

界面中有9个VideoView,每个ViewView都通过一个seekTo进行更改,该值由此变量计算:]

        video_frames_to_jump = (mediaPlayer.getDuration() - MILISECONDS_TO_JUMP)/10;

换句话说,我将视频分成10个部分,从视频开头开始使用MILISECONDS_TO_JUMP。

此后,我使用mediaPlayer.seekTo(video_seek);方法中的onPrepared中的seekTo在不同的时间启动每个VideoView。

完整的代码是这样的:

// Activity OnCreated
OnCreated(){


        // preparing the Video file for the VideoView
        video_file_string = getIntent().getStringExtra("video_file");
        video_file = new File(video_file_string);
        Uri videoUri = Uri.fromFile(video_file);

        // Using OnPrepared so we can use the mediaPlayer.getDuration() and to avoid further problems
        MediaPlayer.OnPreparedListener onpreparedlistener = new MediaPlayer.OnPreparedListener() {
            // Make some important initialization explained above to calculate video_frames_to_jump and  
            // video_seek
            videoseek_initialization();

            // here i update the variable, so the next video will seekTo a later point in the video
            video_seek = (video_seek > mediaPlayer.getDuration())?
                        (mediaPlayer.getDuration()-1) : (video_seek+video_frames_to_jump);
            mediaPlayer.seekTo(video_seek);
            Log.v(TAG, "FramesSelection VideoSeek(" + video_seek + ") MaxDuration(" +mediaPlayer.getDuration() +")");

            // the two lines below was me trying to fix the black screen error, but it didn't work
            // some people said that playing and pause the video would update the VideoView and fix the 
            // black screen

            mediaPlayer.start();
            mediaPlayer.pause();
        }


        // here i'm initializing the videoviews
        VideoView video_view1 = (VideoView) this.findViewById(R.id.video_view1);
        VideoView video_view2 = (VideoView) this.findViewById(R.id.video_view2);
        ...   
        VideoView video_view8 = (VideoView) this.findViewById(R.id.video_view8);
        VideoView video_view9 = (VideoView) this.findViewById(R.id.video_view9);

        video_view1.setVideoURI(videoUri);

        video_view1.setZOrderOnTop(false); 
        // The line above was a possible fix for the black screen, i changed it to true/false but
        // when false - nothing changes and my problem continues.
        // when true  - the issue continues but instead of black screen, i got a white screen

        video_view1.setOnPreparedListener(onpreparedlistener);
        video_view2.setVideoURI(videoUri);
        video_view2.setZOrderOnTop(false);
        video_view2.setOnPreparedListener(onpreparedlistener);
        ...
        video_view8.setVideoURI(videoUri);
        video_view8.setZOrderOnTop(false);
        video_view8.setOnPreparedListener(onpreparedlistener);
        video_view9.setVideoURI(videoUri);
        video_view9.setZOrderOnTop(false);
        video_view9.setOnPreparedListener(onpreparedlistener);
}

来自应用程序的日志显示我正在计算所需的正确毫秒数。

例如,在每帧之间跳跃256毫秒,并在视频中跳跃前10帧,结果是:

myapplication: FramesSelection VideoSeek(266) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(522) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(778) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(1034) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(1290) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(1546) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(1802) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(2058) MaxDuration(2576)
myapplication: FramesSelection VideoSeek(2314) MaxDuration(2576)

注意,我不是在播放视频,只是在VideoView中显示了固定的“图像”或“帧”。

所以问题在于某些VideoView随机显示黑屏。

例如,有时第一个VideoView(video_view1)显示来自录制视频的图像,有时不显示。所有其他VideoView也会发生相同的情况,有时它们可​​以正常工作,有时却不能。

所以我的问题是:为什么显示黑屏,我在做什么错,我该如何解决?

我已经搜索了问题,并且在上面的代码中显示了一些修复它的尝试。问题在大多数时候都会发生。至少3个VideoView显示黑屏。

下图显示了一个示例...感谢您的帮助!抱歉,详细说明

Black screen Problem with VideoViews

我的目标是向用户显示9帧已录制的视频,以便他可以选择其中之一。因此,我要做的是进行一个活动来录制视频,并将URI从视频发送到另一个活动...

android android-mediaplayer android-videoview
1个回答
0
投票

好吧,我找不到黑屏的原因,但是由于我只需要显示图像(而不是视频),所以我找到了解决问题的方法,我将在此处发布。

© www.soinside.com 2019 - 2024. All rights reserved.