Android Base64音频文件编码和解码

时间:2016-03-29 12:38:11

标签: android base64 android-mediaplayer

我在做什么:我正在录制语音并将其保存为SDCard中的文件,该文件在MediaPlayer中正常运行/播放。

我想要的是什么:当我将此文件编码为Base64并发送到服务器时,一切正常。但是当我将Base64字符串解码为audio.m4a文件时,它没有在MediaPlayer中运行。

我曾尝试 .m4a .wav ,但一切都是徒劳的。
问题在于编码。因为当我解码从同一iOS应用程序发送的文件时,它在MediaPlayer中运行良好。

我知道它非常基本,很多帮助是编码解码,但没有任何工作。以下是我的方法:

 private void encodeAudio(String selectedPath) {

    byte[] audioBytes;
    try {

        // Just to check file size.. Its is correct i-e; Not Zero
        File audioFile = new File(selectedPath);
        long fileSize = audioFile.length();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        FileInputStream fis = new FileInputStream(new File(selectedPath));
        byte[] buf = new byte[1024];
        int n;
        while (-1 != (n = fis.read(buf)))
            baos.write(buf, 0, n);
        audioBytes = baos.toByteArray();

        // Here goes the Base64 string
        _audioBase64 = Base64.encodeToString(audioBytes, Base64.DEFAULT);

    } catch (Exception e) {
        DiagnosticHelper.writeException(e);
    }

}  

以下列方式解码:

private void decodeAudio(String base64AudioData, File fileName, String path, MediaPlayer mp) {

    try {

        FileOutputStream fos = new FileOutputStream(fileName);
        fos.write(Base64.decode(base64AudioData.getBytes(), Base64.DEFAULT));
        fos.close();

        try {

            mp = new MediaPlayer();
            mp.setDataSource(path);
            mp.prepare();
            mp.start();

        } catch (Exception e) {

            DiagnosticHelper.writeException(e);

        }

    } catch (Exception e) {
        e.printStackTrace();
    }


}  

请指出我做错了什么/傻。

1 个答案:

答案 0 :(得分:0)

尝试使用Multipartentity将任何类型的文件上传到服务器。

public void postFile(String file_path,String url){         文件文件=新文件(file_path);

    try {
        System.out.println(file_path);
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);


        FileBody bin = new FileBody(file);
        MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        reqEntity.addPart("file", bin); /*I believe that the "file" is the name in php part*/
        post.setEntity(reqEntity);
        HttpResponse response = client.execute(post);
        HttpEntity resEntity = response.getEntity();
        if (resEntity != null) {
            Log.i("RESPONSE", EntityUtils.toString(resEntity));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}