2011-08-23 70 views
1
E/MediaPlayer(20473): error (-19, 0) 

I/MyApp (20473): Decoding lala.mp3 

I/StagefrightPlayer( 68): setDataSource('mypath') 

E/AudioFlinger( 68): no more track names available 

E/AudioTrack( 68): AudioFlinger could not create track, status: -12 

E/AudioSink( 68): Unable to create audio track 

有没有人知道我为什么要这么做?这通常在使用mediaPLayer播放大约100多个音频文件后发生。我是这样弹的从Mediaplayer错误-19,0?

public RenderResultFormat DoIt() { 
    if(mp!=null){ 
     mp.release(); 
     mp = null; 
    } 
AudioRenderer mr = new AudioRenderer(); mp = mr.AudioRenderer(filePath);} 



private class AudioRenderer extends Activity { 
    private MediaPlayer AudioRenderer(String filePath) { 
//delcare mediaplayer variables, path etc 
    mp= MediaPlayer.create(this, path); 
if(mp != null){ 
    int duration = mp.getDuration(); 
       mp.start(); 
       try { 
        Thread.sleep(duration); 
       } catch (InterruptedException e2) { 
        e2.printStackTrace(); 
        System.out.println("I've been interrupted >:("); 
       } 
       } 
}return mp;} 

我是否错过了什么?相当新的android开发。谢谢

+0

你是否在使用后释放mp,如文档中推荐的那样? (http://developer.android.com/reference/android/media/MediaPlayer.html#release()) – Joubarc

+0

谢谢,我会看看。是的,我释放了,但我不知道你需要在释放后再次声明mp = null。我试试看 – Sith

+0

好吧,这不起作用): – Sith

回答

3

这个解决方案适合我(打资源)。只实施一个OnCompletionListener

private void playbeep(int id) { 

    MediaPlayer mPlayer; 
    mPlayer = MediaPlayer.create(context, id); 
    mPlayer.start(); 
    mPlayer.setOnCompletionListener(new OnCompletionListener() {   
     public void onCompletion(MediaPlayer mp) { 
      mp.release(); 
     } 
    }); 
}