媒体播放器循环使用错误的Andr​​oid停止 [英] Mediaplayer looping stops with an error Android

查看:253
本文介绍了媒体播放器循环使用错误的Andr​​oid停止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  //需要这个在回调
最后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?

这篇关于媒体播放器循环使用错误的Andr​​oid停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆