为了账号安全,请及时绑定邮箱和手机立即绑定

Android-从字节播放mp3 []

Android-从字节播放mp3 []

PIPIONE 2019-12-20 10:31:48
我在byte []中有mp3文件(从服务下载),我想在设备上播放它,就像播放文件一样:MediaPlayer mp = new MediaPlayer();mp.setDataSource(PATH_TO_FILE);mp.prepare();mp.start();但是我似乎找不到办法。我不介意将文件保存到手机然后播放。如何播放文件,或者先下载再播放?
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

好的,谢谢大家,但是我需要从byte []播放mp3,因为我是从.NET webservice获得的(不希望在服务器上存储动态生成的mp3)。


最后-可以播放简单的mp3的“陷阱” ...这里是任何需要它的人的代码:


private MediaPlayer mediaPlayer = new MediaPlayer();

private void playMp3(byte[] mp3SoundByteArray) {

    try {

        // create temp file that will hold byte array

        File tempMp3 = File.createTempFile("kurchina", "mp3", getCacheDir());

        tempMp3.deleteOnExit();

        FileOutputStream fos = new FileOutputStream(tempMp3);

        fos.write(mp3SoundByteArray);

        fos.close();


        // resetting mediaplayer instance to evade problems

        mediaPlayer.reset();


        // In case you run into issues with threading consider new instance like:

        // MediaPlayer mediaPlayer = new MediaPlayer();                     


        // Tried passing path directly, but kept getting 

        // "Prepare failed.: status=0x1"

        // so using file descriptor instead

        FileInputStream fis = new FileInputStream(tempMp3);

        mediaPlayer.setDataSource(fis.getFD());


        mediaPlayer.prepare();

        mediaPlayer.start();

    } catch (IOException ex) {

        String s = ex.toString();

        ex.printStackTrace();

    }

}

编辑:我已经在4年前写了这个答案-显然,从那时起,很多事情都发生了变化。请参阅Justin关于如何重用MediaPlayer实例的评论。另外,我不知道.deleteOnExit()现在是否适合您-随时提出改进建议,以免临时文件堆积。


查看完整回答
反对 回复 2019-12-20
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

通过将MP3文件编码为Base64(我已经收到来自Restful API服务编码的数据),然后创建URL对象,我找到了一个简单的解决方案。我在Android 4.1中进行了测试。


public void PlayAudio(String base64EncodedString){

        try

        {

            String url = "data:audio/mp3;base64,"+base64EncodedString; 

            MediaPlayer mediaPlayer = new MediaPlayer();

            mediaPlayer.setDataSource(url);

            mediaPlayer.prepare();

            mediaPlayer.start();

        }

        catch(Exception ex){

            System.out.print(ex.getMessage());

        }

    }


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 634 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信