在android中使用inputstream创建mediaplayer

在android中使用inputstream创建mediaplayer,android,media-player,inputstream,Android,Media Player,Inputstream,如何使用inputstream创建mediaplayer实例 我只看到setDataSource的4个函数。没有函数获取inputstream? mediaplayer是否必须使用FileDescriptor?这似乎很基本。但是,我找不到办法。在j2me中,有一个函数Manager.createPlayer(InputStream)。您可以使用inputstream创建媒体播放器。有没有办法创建像j2me这样的mediaplayer?一种方法是将流写入文件,然后将其交给mediaplayer播放

如何使用inputstream创建mediaplayer实例

我只看到setDataSource的4个函数。没有函数获取inputstream?
mediaplayer是否必须使用
FileDescriptor
?这似乎很基本。但是,我找不到办法。在j2me中,有一个函数
Manager.createPlayer(InputStream)
。您可以使用inputstream创建媒体播放器。有没有办法创建像j2me这样的mediaplayer?

一种方法是将流写入
文件
,然后将其交给
mediaplayer
播放。

没错,
mediaplayer
不会直接将流参数作为其数据源。
setDataSource()
的四个重载版本允许数据来自文件(使用文件路径或
FileDescriptor
)或Uri(web位置或本地内容://Uri)

此外,to static
create()
方法可以从原始资源(R.raw.something)或与上述相同样式的Uri创建媒体播放器


除了文件位置或网络之外,您从何处获取音频/视频?

现在,我将
输入流
复制到一个临时文件中,并将其交给mediaplayer。但是,你知道,这不是个好办法。因为,这是一个缓慢的解决方案。若数据量很大,玩家必须等待太久


我的消息来源正在改变。例如,它来自数据库。若我找不到解决方案,我会将代码转换为获取文件。但是,现在我正在设计一个系统来获取inputstream并播放它。比如,
MediaPlayer.createPlayer(InputStream,String)的j2me函数

我现在正在研究它(以便将加密的电影文件发送到MediaPlayer)。假设FileInputStream.getFD()是解决这个问题的方法,我错了吗?如果您可以从FileInputStream获取FileDescriptor(除非您特别需要InputStream而不是FileInputStream),那么它似乎可以直接传递给MediaPlayer


编辑:好的,所以FileInputStream是使用路径或URL创建的,这使得它毫无用处

在接收端创建一个HTTP服务器(电话上的一个线程),将任何HTTP请求的InputStream中的数据输出到套接字的OutputStream,并为MediPlayer提供URI HTTP 127.0.0.1:a端口,怎么样?这很难看(但应该行得通)

也可以在android中播放来自InputStream的PCM未压缩音频。搞定它。如果您可以使用JLayer或其他软件进行解码,并将其作为PCMto输出到音频接口,该接口也可以完成解码,但不需要硬件加速


我想你可以选择毒药。我选择了选项B。

我也想这样做,因为我的音频文件是加密的。我的解决方法是解密到Resources.getCacheDir()中的一个文件,然后将该文件的FileDescriptor传递给MediaPlayer。这不是一个很好的解决方案,因为它有点慢。另外,摩托罗拉Atrix似乎也有问题。这真的是最好的解决方案吗?将流写入文件并读取它?你不会认真认为没有纯内存解决方案…@Cruncher你可以使用一个临时文件,或者你可以使用另一个更低级的类“AudioTrack”:我注意到MediaPlayer可以选择将数据源设置为MediaDataSource,但我不仅不确定如何使用它,它还需要API 23及以上版本。考虑到这一点,您需要确保您的本地服务器正确支持http
“range:
标题,这可能会有所帮助。我刚刚通过其他方式发现了这个错误。