【发布时间】: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