方案: 我的.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)
这些都不适合这种情况。猜猜理想是给MediaPlayer一个InputStream吗?
可能的解决方案:
有没有人有更好的解决方案?
答案 0 :(得分:1)
如果您不需要MediaPlayer中的所有功能,我建议您尝试AudioTrack。它基本上就是你所描述的。不幸的是,MediaPlayer不会在其构造函数中使用AudioTrack,因此在这种情况下最好的解决方案是包含一个虚拟Http服务器,该服务器从URL发回您的数据(这是Android 1.0发行说明所推荐的)。
答案 1 :(得分:1)
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){
...
}
答案 2 :(得分:0)
我不是100%肯定,但我认为除了在播放前暂时保存解密文件之外别无其他选择。
This question有点类似,但我认为你没有使用那里建议的简单解决方案,因为你有一个加密文件。还提供了Custom Audio Streaming with MediaPlayer教程的链接,但似乎他们的解决方案也使用临时文件。