我正在研究一个Android应用程序。这个应用程序的正常概念是在同一时间播放多个设备中的歌曲。一切都已完成但是歌曲没有在同步中播放。我已经做了大量的研发来解决这个问题。问题但没有获得成功。但最后我发现了一个Android Media Player问题。为了找到这个问题,我已经制作了一个Application.Description跟随。
演示应用说明
我创建了一个Android媒体播放器firstPlayer和secondPlayer.firstPlayer的两个对象。一旦App是Lunch,就会开始播放歌曲。现在我在test.xml中使用了一个Button.once用户将点击此按钮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());
}
});
问题
注意
要求。
我几乎没有尝试解决这个同步问题,但我没有得到运气。我希望我的应用程序100%同步。就像在IOS中的Seedio应用程序。我也在IOS测试这个,但在IOS中它工作正常两个播放器播放100%同步的歌曲。
如果有任何想法,请帮助我。
我希望你们都明白我的问题。
谢谢
答案 0 :(得分:0)
Seek确实需要花费一些时间在MediaPlayer上。 (据我了解,官方文档:https://developer.android.com/reference/android/media/MediaPlayer)
一个想法是让第二流不开始,寻求一个已知的未来位置(高于第一流的当前位置),希望它“及时”到达那里。然后,到达那里时(时间已经过去),开始第二个流。我没有测试过它,只是想着要解决一个非常相似的问题。