Android MediaPlayer意外停止播放(未最终完成)。

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

我只是偶然发现问题,它的这个不那么明显的解决方案,并认为它可能会帮助一些,如果我分享我的发现。

有很多类似的问题,但他们并没有帮助我解决我的问题。(是不同的)

我有一个活动,播放一个带声音的视频,然后显示一个图像3秒,然后显示一个动画地图视图10秒,然后播放另一个视频。

  • 视频1 (约60秒)
  • 图像(约3秒)
  • 动画地图视图(约10秒)
  • 视频2(约30秒)

我尝试了各种方案,但音乐总是在某件事情发生变化时停止,虽然一些组合工作(例如,没有地图和视频2(只是黑屏代替)).我做了一个非常仔细的查看所有的日志,但没有找到任何帮助。

这个问题是 在完成之前,mediaplayer正在被gc'd或以某种方式最终完成。

private static MediaPlayer mediaplayer;

而在OnCreate中。

    mediaplayer = new MediaPlayer();
    AudioFocusRequest.Builder mp;
    mediaplayer.setAudioAttributes(
            new AudioAttributes
                    .Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build());
    try {
        mediaplayer.setDataSource(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.audio));
    } catch (IOException e) {
        e.printStackTrace();
        Log.e("audio_management","error trying to set data source for audio");
    }
    try {
        mediaplayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
        Log.e("audio_management","error preparing");
    }

以下是我播放视频的一个例子:

        z.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    playPart2();
                }
            });
        }
    }, PARTONELENGTH + MAPDISPLAYTIME + IMAGEDISPLAYTIME);

而这是playPart2()函数。

    public void playPart2() {
    ImageView imgbg =  findViewById(R.id.imageView);
    ImageView agO = findViewById(R.id.agent1);
    ImageView agTw =  findViewById(R.id.agent2);
    ImageView agTh =  findViewById(R.id.agent3);
    ImageView agFo =  findViewById(R.id.agent4);
    ImageView agFi =  findViewById(R.id.agent5);
    ImageView agSi = findViewById(R.id.agent6);
    VideoView player =  findViewById(R.id.videoView);
    MapView mMap = findViewById(R.id.map);

    mMap.setVisibility(View.INVISIBLE);
    imgbg.setVisibility(View.INVISIBLE);
    agO.setVisibility(View.INVISIBLE);
    agTw.setVisibility(View.INVISIBLE);
    agTh.setVisibility(View.INVISIBLE);
    agFo.setVisibility(View.INVISIBLE);
    agFi.setVisibility(View.INVISIBLE);
    agSi.setVisibility(View.INVISIBLE);
    player.setVisibility(View.VISIBLE);


    Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.part2);
    player.setVideoURI(uri);
    player.start();
}

我真的不知道这是怎么回事 - 我读了所有关于MediaPlayer和VideoViews的文档。它说它可以同时输出2个音频流。但它不工作。

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

事实证明,videoView开始播放时,不知为何暂停了mediaplayer.解决这个问题的方法是再次调用mediaplayer.start()。

为什么没有提到mediaplayervideoview的这种行为?

为什么没有提到mediaplayervideoview的这种行为?

        z.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    playPart2();
                    mediaplayer.start();
                }
            });
        }
    }, PARTONELENGTH + MAPDISPLAYTIME + IMAGEDISPLAYTIME);
© www.soinside.com 2019 - 2024. All rights reserved.