【问题标题】:Two Object of media Player not play song in Sync at same time媒体播放器的两个对象不能同时同步播放歌曲
【发布时间】:2020-08-08 01:54:24
【问题描述】:

我正在开发一个 android 应用程序。这个应用程序的一般概念是同时在多个设备中播放歌曲。一切都完成了,但歌曲没有同步播放。我已经做了很多研发来解决这个问题,但是没有成功。但最后我发现了 Android Media Player 的一个问题。为了找到这个问题,我制作了一个演示应用程序。描述如下。

演示应用说明

我创建了一个 Android 媒体播放器 firstPlayer 和 secondPlayer.firstPlayer 的两个对象,一旦 App 是午餐,就会开始播放歌曲。现在我在 test.xml 中使用了一个按钮。一旦用户单击此按钮 secondPlayer 开始并且播放我在 firstPlayer 中设置的相同音乐。我还在 firstPlayer 播放的位置寻找 secondPlayer。

代码

  changePlayer = (Button) findViewById(R.id.changePlayer);


    String fileName = "/qq.mp3";
    String baseDir = Environment.getExternalStorageDirectory() + "/Test App" + fileName;

    Log.e(TAG, "path :" + baseDir);
    try {
        firstPlayer = new MediaPlayer();
        secondPlayer = new MediaPlayer();

        firstPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        secondPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        firstPlayer.setDataSource(baseDir);
        secondPlayer.setDataSource(baseDir);

        firstPlayer.prepare();
        secondPlayer.prepare();

        firstPlayer.start();


    } catch (IOException e) {
        e.printStackTrace();
    }


    changePlayer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!secondPlayer.isPlaying()) {
                Log.e(TAG, "Media Player Start M2");
                secondPlayer.start();
            }
            int sek = firstPlayer.getCurrentPosition();
            secondPlayer.seekTo(firstPlayer.getCurrentPosition());
            //firstPlayer.seekTo(sek);

            Log.e(TAG, "Current Playe Time ::" + secondPlayer.getCurrentPosition());
            Log.e(TAG, "First Playe Time ::" + sek);
            Log.e(TAG, "firstPlayer Playe Time ::" + firstPlayer.getCurrentPosition());
            Log.e(TAG, "secondPlayer Playe Time ::" + secondPlayer.getCurrentPosition());

        }
    });

问题

  • 我遇到了一个奇怪的问题,两个媒体播放器都不能同步播放,播放歌曲时略有不同。如果我在播放 firstPlayer 的地方寻找 secondPlayer,那么它会同步播放,但两个播放器的播放方式不同。

注意

  • 我也尝试使用任何第三方媒体播放器解决此问题,但我没有运气。我已实施 ExoPlayer、VlcPlayer、UniversalPlayer 来解决此问题,但它也有同样的问题。

要求。

  • 我想在两个不同的 MediaPlayer 对象中同步播放歌曲。
  • 有谁知道没有这个延迟问题的任何强大的媒体播放器。

我几乎没有尝试解决这个同步问题,但我没有运气。我希望在我的应用程序中实现 100% 同步。就像 IOS 中的 Seedio 应用程序一样。我也在 IOS 中进行了测试,但在 IOS 中它运行良好100% 同步的歌曲。

如果有人有任何想法,请帮助我。

希望大家都清楚我的问题。

谢谢

【问题讨论】:

  • 有没有看过这个问答:stackoverflow.com/a/6231834/3419488
  • 感谢 Ans Daan。是否可以使用 SoundPool 进行搜索?我认为它也已弃用。我的应用程序中必须需要搜索功能。
  • 你想完成什么?您想在第一个音频播放器的当前位置启动第二个音频播放器吗?
  • 是的,我想播放两个 100% 同步的媒体播放器。
  • 为什么按下按钮时会发出第二声? (我正在尝试了解您要解决的问题。)

标签: java android sockets media-player


【解决方案1】:

媒体播放器上的 Seek 确实需要一些时间。 (据我了解官方文档:https://developer.android.com/reference/android/media/MediaPlayer

一个想法是不启动第二个流,寻找一个已知的未来位置(高于第一个流的当前位置),希望它“及时”到达那里。然后当你到达那里时开始第二个流(时间已经过去)。我没有测试它,只是想解决一个非常相似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多