2016-03-29 2 views
0

Что я делаю: В настоящее время я записываю голос и сохраняю его как файл в SDCard, который работает/отлично работает в MediaPlayer.Android Base64 Audio File Encode and Decode

Что я хочу: Когда я кодирую этот файл в базу данных и отправляю на сервер, все идет хорошо. Но когда я декодирую строку 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(); 
    } 


} 

Пожалуйста, укажите, если я делаю что-то неправильно/глупо.

+0

использования, как указано в ссылке ниже http://stackoverflow.com/questions/22596345/audio-file-encoding-and-decoding – Sumit

+0

@Sumit .. я видел это раньше. Не использовать. – Noman

ответ

0

попробуйте использовать Multipartentity для загрузки любого типа файла на сервер.

public void postFile (String file_path, String url) { Файл file = new File (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(); 
    } 
} 
+0

Мне нужно преобразовать в кодировку Base64. Это требование. – Noman

+0

PLS попробуйте это http://stackoverflow.com/questions/6448865/base64-encode-audio-file-and-send-as-a-string-then-decode-the-string – Shekhar

+0

Посмотрите на мой код, пожалуйста. .. Я делаю что-то другое? Давай ... я делаю то же самое! – Noman

Смежные вопросы