如何播放不在网址或存储空间内的音频文件的InputStream?

and*_*per 8 android inputstream playback android-mediaplayer audiotrack

背景

我已成功将音频文件(3gp)上传到Google-Drive.

现在我希望能够在应用程序中播放该文件.

Google Drive API仅允许获取存储在其中的文件的输入流.

问题

在我的情况下,输入的所有MediaPlayer功能都不可用,只有InputSteam:

http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource(java.io.FileDescriptor)

我知道我可以将文件从Google-Drive保存到缓存并播放,但我想避免存储处理,并动态播放文件.

我试过的

我试图搜索这个问题,并且发现可能使用AudioTrack(这里).它也可能使用新的Jelly-Bean功能(在这里显示,从这里找到),但我不确定它是否相当低级别.

可悲的是,使用AudioTrack我听错了声音(噪音).

我还注意到MediaPlayer可以选择将dataSource设置为MediaDataSource(这里),但不仅我不确定如何使用它,它还需要API 23及更高版本.

当然,我尝试使用Google-Drive中提供的网址,但这仅用于其他目的,并未定向到音频文件,因此无法使用MediaPlayer.

这个问题

给定一个InputStream,是否可以使用AudioTrack或其他东西来播放音频3gp文件?

可能有支持库解决方案吗?

Com*_*are 5

如果您的minSdkVersion年龄为 23 或更高,您可以使用setDataSource(MediaDataSource)并提供您自己的该类的子abstract MediaDataSource

对于较旧的设备,您应该能够使用从ParcelFileDescriptor. 您将有一个线程将数据写入管道的一端,并将玩家一端的FileDescriptor(from ) 传递到。getFileDescriptor()setDataSource(FileDescriptor)