无法在 Nexus 5 中同时播放两个 MediaPlayer

Posted

技术标签:

【中文标题】无法在 Nexus 5 中同时播放两个 MediaPlayer【英文标题】:Unable to play two MediaPlayer at same time in Nexus 5 【发布时间】:2015-10-29 22:03:51 【问题描述】:

我正在尝试在服务中使用两个MediaPlayers 在后台播放一些音频。如果我只想播放一个 mp3,一切正常,但如果我尝试同时播放两个,使用 MediaPlayer 的两个实例,只有最后一个有效。这很奇怪,因为它可以在模拟器和某些设备中运行,但我无法让它在 Nexus 5 中运行。这是我用来创建两个 MediaPlayer 实例的代码:

private void playWithPiano() 
    mp1 = initializePlayer(filenameVoz); // filenameVoz is the mp3 file name in raw folder
    mp2 = initializePlayer("base_piano");
    mp1.start();
    mp2.start();


private MediaPlayer initializePlayer(String filename) 
    int identifier = getResources().getIdentifier(filename,
            "raw", getPackageName());
    MediaPlayer mp = MediaPlayer.create(this, identifier);

    mp.setOnErrorListener(new OnErrorListener() 
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) 
            Log.d(TAG_LOG, "OnErrorListener");
            stop();

            return false;
        
    );
    mp.setOnCompletionListener(new OnCompletionListener() 
        @Override
        public void onCompletion(MediaPlayer mp) 
            stop();
        
    );

    return mp;

如果我评论 mp2.start 行,那么我可以收听 mp1 音频。就像启动 MediaPlayer 时,任何其他实例都停止了,我将不胜感激。

【问题讨论】:

【参考方案1】:

我发现其他帖子描述了 Nexus 5 设备中的相同问题,但还没有解决方案。 https://code.google.com/p/android/issues/detail?id=63099 https://code.google.com/p/android/issues/detail?id=62304 我尝试使用其中一个论坛中建议的 seekTo(0),但它不起作用,所以我尝试了另一件事,这似乎是针对我的案例的特定解决方法。

我在Service 中使用它,而我的第二个MediaPlayer 只是为了播放一些背景音乐,所以我在第一个之后半秒就开始了它并且它起作用了。

new java.util.Timer().schedule( 
                new java.util.TimerTask() 
                    @Override
                    public void run() 
                        if (mp2 != null) mp2.start();
                    
                , 
                500
        );

我仍然不知道为什么我只在 Nexus 5 中遇到这个问题,但我希望这可以帮助某人。

【讨论】:

以上是关于无法在 Nexus 5 中同时播放两个 MediaPlayer的主要内容,如果未能解决你的问题,请参考以下文章

Windows Media Player和RearPlayer的区别是啥?同时讲下它们的功能?

怎么用windows media player

VideoView 在 Fragment 中播放 .m3u8 不会在 Nexus 7 中播放。在 HTC1 M8 中播放正常

java ExoPlayer DASH Media无法在Samsung Galaxy Duos 4.1.2中播放

移动后iOS上的cordova-plugin-media-with-compression似乎无法播放音频文件

Media Player 无法播放该文件。可能是播放机不支持该文件类型,或者不支持用于压缩该文件的编解码器