媒体播放器循环使用错误的Android停止 [英] Mediaplayer looping stops with an error Android
问题描述
//需要这个在回调
最后AssetFileDescriptor AFD = getResources()openRawResourceFd(R.raw.sample)。//建立并启动第一个球员
最终的MediaPlayer PLAYER1 = MediaPlayer.create(这一点,R.raw.sample);
player1.start();//准备第二个玩家
最终的MediaPlayer player2 = MediaPlayer.create(这一点,R.raw.sample);
player1.setNextMediaPlayer(player2);player1.setOnCompletionListener(新MediaPlayer.OnCompletionListener(){
@覆盖
公共无效onCompletion(MediaPlayer的媒体播放器){ //当PLAYER1完成后,我们重新设置,并设置player2回去PLAYER1当它完成
mediaPlayer.reset();
尝试{
mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
媒体播放器prepare()。
}赶上(例外五){
e.printStackTrace();
} player2.setNextMediaPlayer(PLAYER1);
}
});
player2.setOnCompletionListener(新MediaPlayer.OnCompletionListener(){
@覆盖
公共无效onCompletion(MediaPlayer的媒体播放器){
//同样,player2完成时,我们将重置,并告诉它再次完成后PLAYER1用户player2
mediaPlayer.reset();
尝试{
mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
媒体播放器prepare()。
}赶上(例外五){
e.printStackTrace();
} player1.setNextMediaPlayer(player2);
}
});//这个循环不断地重复自己以这种方式无间隙
这是我发现循环的音频文件没有任何间隙的唯一方法,一切工作正常。但是,完成10-15循环后随机,媒体播放器显示不同的错误,每次停止播放音频。试着用不同的声音不同的编码类型不同的文件格式的一切,但我得到不同的同样的错误只。先谢谢了。
E / MediaPlayer的(24311):错误(1,-38)
E / MediaPlayer的(23256):错误(1,-1007)
E / MediaPlayer的(23546):错误(1,-2147483648)
块引用>解决方案这是最有可能是垃圾收集的问题,因为你是你重置媒体播放器这么多次。您在重复声音的方式是pretty哈克的方式。我不会真的建议做这样的说法,虽然我听说某些文件类型的循环时设定的循环不会造成差距。你尝试过格式化文件OGG?
// Will need this in the callbacks final AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.sample); // Build and start first player final MediaPlayer player1 = MediaPlayer.create(this, R.raw.sample); player1.start(); // Ready second player final MediaPlayer player2 = MediaPlayer.create(this, R.raw.sample); player1.setNextMediaPlayer(player2); player1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { // When player1 completes, we reset it, and set up player2 to go back to player1 when it's done mediaPlayer.reset(); try { mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); } catch (Exception e) { e.printStackTrace(); } player2.setNextMediaPlayer(player1); } }); player2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { // Likewise, when player2 completes, we reset it and tell it player1 to user player2 after it's finished again mediaPlayer.reset(); try { mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); } catch (Exception e) { e.printStackTrace(); } player1.setNextMediaPlayer(player2); } }); // This loop repeats itself endlessly in this fashion without gaps
This is the only way i found to loop an audio file without any gaps and everything works fine. But after it completes 10-15 loops randomly, Mediaplayer shows different errors each time and stops playing the audio. tried with different audio with different encoding type different file format everything but i get the different same errors randomly. Thanks in advance.
E/MediaPlayer(24311): error (1, -38)
E/MediaPlayer(23256): Error(1,-1007)
E/MediaPlayer(23546): Error (1,-2147483648)
解决方案it is most likely a garbage collection issue, because you are resetting you media players so many times. The way you are repeating sound is a pretty hacky way. i wouldn't really suggest doing it that way, although i have heard that the set looping does cause gaps when looping with certain file types. have you tried formatting your file as ogg?
这篇关于媒体播放器循环使用错误的Android停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!