将数据从内存提供给MediaPlayer

ola*_*ure 6 android

场景:我的.apk中有加密的mp3文件.需要解密并发送到MediaPlayer对象.

问题:在我读取文件并解密后,如何让MediaPlayer播放它们?

现在.MediaPlayer有4个版本的setDataSource().

setDataSource(String path)
setDataSource(FileDescriptor fd)
setDataSource(FileDescriptor fd, long offset, long length)
setDataSource(Context context, Uri uri)
Run Code Online (Sandbox Code Playgroud)

这些都不是理想的情况.猜猜理想是给MediaPlayer一个InputStream吗?

可能的解决方案:

  • 将解密数据写入文件播放该文件.很多IO开销.
  • 创建一个虚拟http服务器(ServerSocket?)并将url传递给MediaPlayer.再次,凌乱.我甚至可以创建一个套接字.

有没有人有更好的解决方案?

小智 2

byte[] callData = ...;
String base64EncodedString = Base64.encodeToString(callData, Base64.DEFAULT);

try
{
    String url = "data:audio/amr;base64,"+base64EncodedString;
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(url);
    mediaPlayer.prepare();
    mediaPlayer.start();
}
catch(Exception ex){
    ...
}
Run Code Online (Sandbox Code Playgroud)