android - 在 MediaPlayer 中播放字节数组 - Android

标签 android

我正在尝试使用 MediaPlayer 播放音频文件。我想在 MediaPlayer 中播放字节数组。我怎样才能做到这一点?我检查过this

 public void writeSamples(byte[] samples, int length) 
{
  //  track.write( samples, 0, length);
    File tempMp3;
    try {
    tempMp3 = File.createTempFile("kurchina", ".mp3");
      tempMp3.deleteOnExit();
      FileOutputStream fos = new FileOutputStream(tempMp3);
      fos.write(samples);
      fos.close();
      // Tried reusing instance of media player
      // but that resulted in system crashes...  
      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 e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    }

但它不播放音频。它只是在 SD 卡中生成许多文件。并给出此错误:

 06-06 11:02:59.191: E/MediaPlayer(1831): Unable to to create media player
 06-06 11:02:59.191: W/System.err(1831): java.io.IOException: setDataSourceFD failed.:      status=0x80000000
 06-06 11:02:59.201: W/System.err(1831):  at    android.media.MediaPlayer.setDataSource(Native Method)
 06-06 11:02:59.201: W/System.err(1831):  at   android.media.MediaPlayer.setDataSource(MediaPlayer.java:749)
 06-06 11:02:59.201: W/System.err(1831):  at   org.vinuxproject.sonic.SonicTest$1.run(SonicTest.java:178)
 06-06 11:02:59.201: W/System.err(1831):  at java.lang.Thread.run(Thread.java:1096)

请帮帮我。感谢任何形式的帮助。

谢谢

最佳答案

根据您的评论,您正在使用 WAV 文件进行流式传输。常规WAV has a header在文件的开头,文件的其余部分是纯数据。如果您不包含 header 部分,则需要将其中的参数提供给能够解释数据的播放器( channel 数、每秒采样数、 block 大小等)。因此,一个 WAV单独的文件是不可流式传输的,必须将参数输入播放器。

MPEG-4另一方面已被指定为能够流式传输。它包含可以单独播放的易于识别的段,因此只要数据 block 包含标题,它后面的数据就可以播放。除了良好的压缩比之外,这也是许多网络 radio 使用它的原因之一。

Android 中的

MediaPlayer 是高级组件,无法访问播放 WAV block 所需的低级参数。如果您需要源是 WAV 并且不能使用其他 streamable formats , 那么你可以尝试 AudioTrack类或 OpenSL ES甚至更低级别的访问。 对于 AudioTrack,这是一个非常好的教程:http://audioprograming.wordpress.com/2012/10/18/a-simple-synth-in-android-step-by-step-guide-using-the-java-sdk/

关于android - 在 MediaPlayer 中播放字节数组 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908552/

相关文章:

java - 我无法在我的 Activity 中调用我的 fragment 方法,并且我想在 2 个不同的 fragment 中调用 2 个方法?

android - 使用列表首选项为应用程序添加主题支持

android - Android 上的 res/values/public.xml 文件有什么用?

android - 在 Activity 中获取 Fragment 实例

android - 通过 USB 在 lg Nexus 4 上安装 apk

android - FirebaseVisionImageMetadata 的 ImageReader 格式兼容性(通过 Android 上的 Camera2 API)

安卓侧边栏

android - Firebase 动态链接和 android 导航架构组件

java - Android - 应用程序关闭时保留文件

java - webviews 打开默认浏览器