如何在MediaPlayer上播放Android InputStream?

前端之家收集整理的这篇文章主要介绍了如何在MediaPlayer上播放Android InputStream?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我的资产文件夹里有一个小音频文件,我想打开一个InputStream来写入一个缓冲区,然后写入一个临时文件,然后打开MediaPlayer播放该临时文件.问题是,当媒体播放器命中mp.Prepare()时,它不播放,从不到达吐司.有没有人曾经这样做过?
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    InputStream str;

    try {

        str = this.getAssets().open("onestop.mid");
        Toast.makeText(this,"Successful Input Stream Opened.",Toast.LENGTH_SHORT).show();
        takeInputStream(str);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}//end on create

public void takeInputStream(InputStream stream) throws IOException
{
    //fileBeingBuffered = (FileInputStream) stream;
    //Toast.makeText(this,"sucessful stream conversion.",Toast.LENGTH_SHORT).show();
    try
    {
        convertedFile = File.createTempFile("convertedFile",".dat",getDir("filez",0));
        Toast.makeText(this,"Successful file and folder creation.",Toast.LENGTH_SHORT).show();

        out = new FileOutputStream(convertedFile);
        Toast.makeText(this,"Success out set as output stream.",Toast.LENGTH_SHORT).show();

        //RIGHT AROUND HERE -----------

        byte buffer[] = new byte[16384];
        int length = 0;
        while ( (length = stream.read(buffer)) != -1 ) 
        {
          out.write(buffer,length);
        }

        //stream.read(buffer);
        Toast.makeText(this,"Success buffer is filled.",Toast.LENGTH_SHORT).show();
        out.close();

        playFile();
    }catch(Exception e)
    {
        Log.e(TAG,e.toString());
        e.printStackTrace();
    }//end catch
}//end grabBuffer

public void playFile()
{
    try {
        String path = convertedFile.getAbsolutePath();
        mp = new MediaPlayer();
        mp.setDataSource(path);
        Toast.makeText(this,"Success,Path has been set",Toast.LENGTH_SHORT).show();

        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.prepare();
        Toast.makeText(this,"Media Player prepared",Toast.LENGTH_SHORT).show();

        mp.start();
        Toast.makeText(this,"Media Player playing",Toast.LENGTH_SHORT).show();
    } catch (IllegalArgumentException e) {
        Log.e(TAG,e.toString());
        e.printStackTrace();
    } catch (IllegalStateException e) {
        Log.e(TAG,e.toString());
        e.printStackTrace();
    } catch (IOException e) {
        Log.e(TAG,e.toString());
        e.printStackTrace();
    }

}//end playFile

解决方法

修复.原来在将缓冲区写入“File”创建的临时文件后,可以使用FileInputStream打开该文件,然后继续播放,如下所示.感谢你们所有的帮助.
mp = new MediaPlayer();

FileInputStream fis = new FileInputStream(convertedFile);
mp.setDataSource(fis.getFD());

Toast.makeText(this,Toast.LENGTH_SHORT).show();

mp.prepare();
mp.start();

猜你在找的Android相关文章