我正在开发一个能播放mp3文件的Android应用程序。但是mp3文件是在SD卡或sqlite上加密的。无论哪种方式,在解密之后,我都会有一个字节流。我怎么玩他们? MediaPlayer不将输入流作为参数,因此我不能考虑这一点。
答案 0 :(得分:2)
我认为您需要将流存储到文件系统;那么您可以尝试使用MediaPlayer
的setDataSource
方法
FileInputStream rawmp3file= new FileInputStream(yourByteArrayAsMp3File);
mediaPlayer.setDataSource(rawmp3file.getFD());
如果您可以切换到PCM音频源,请查看AudioTrack类。
AudioTrack类管理和播放 Java的单一音频资源 应用。它允许流式PCM 音频缓冲到音频硬件 用于播放。这是通过 将数据“推送”到AudioTrack 对象使用其中一个写(byte [], int,int)和write(short [],int,int) 方法
答案 1 :(得分:0)
这并不容易。我以前在黑莓手机上做过这样的事情,所以我敢打赌它在Android上也可行。
如果我是你,我会为自定义的“encryptedmp3:”协议注册一个新的提供商。然后我会在MediaPlayer的数据源中指定它:
mediaplayer.setDataSource(this, URI.parse("encryptedmp3://....yourfile"));
我不确定如何在Android上创建新的协议处理程序。
我希望这会有所帮助。
灵光
答案 2 :(得分:-1)
查看BASS library(免费用于非商业用途) 以下是Android的链接:http://www.un4seen.com/forum/?topic=13225.0
HSTREAM BASS_StreamCreateFile(
BOOL mem,
void *file,
QWORD offset,
QWORD length,
DWORD flags
);
参数:
mem TRUE = stream the file from memory.
file Filename (mem = FALSE) or a memory location (mem = TRUE).