java - Android MediaPlayer 意外停止播放(尚未最终确定)

标签 java android android-mediaplayer

我只是偶然发现了这个不太明显的解决方案的问题,并认为如果我分享我的发现,这可能会对某些人有所帮助。

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

我有一个 Activity ,播放有声视频,然后显示图像 3 秒,然后显示动画 map View 10 秒,然后播放另一个视频。

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

当尝试从第一个视频结束时开始播放音频时,就会出现此问题。 音频在 map View 期间播放良好,然后停止。 我尝试了各种场景,但当某些内容发生变化时音乐总是停止,尽管某些组合有效(例如没有 map 和视频2(只是黑屏))。 我确实仔细查看了所有日志,但没有发现任何有用的内容。

问题是不是媒体播放器在完成之前以某种方式被GC或最终确定。

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路音频。但它不起作用。

最佳答案

结果 videoView 开始播放以某种方式暂停了媒体播放器。 解决问题的方法只是再次调用 mediaplayer.start() 。它确实从以前停止过的地方恢复过来。 (显然存在的)播放中的短暂中断并不明显。

为什么媒体播放器/视频 View 的这种行为没有在任何地方提到?

问题解决代码:

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

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

关于java - Android MediaPlayer 意外停止播放(尚未最终确定),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61598753/

相关文章:

java - 如果少于 3 个条目,则用零填充列表

java - Apache CXF 拦截器覆盖内容类型

Android 通知无法与 AlarmManager 一起正常工作

android - React Native - 为什么我们对 Image 组件使用 tintColor 属性?

android - 列出已安装的媒体播放器

java - 是否可以将换行符写入套接字的 OutputStream?

java - kafka ktable - 通过 java 访问 rocksdb

java - 使用 ViewPager2 折叠工具栏会出现滚动问题

android - 我的应用程序中有一个问题,例如警报器响起?

android - 解码器初始化失败 : OMX. qcom.video.decoder.avc,