【发布时间】:2017-11-22 05:44:18
【问题描述】:
说,我有一个 InputStream,提供音频/mpeg(或音频/aacp) - 一个 Shoutcast 收音机。
有人可以给我看一个代码示例来播放这样的流吗?
我在整个互联网上搜索,看起来 android.media.MediaPlayer 无法播放缓冲流。它只能通过 HTTP URL 作为 DataSource 播放流。
是的,有可能实现您自己的 android.media.MediaDataSource 并将其提供给 MediaPlayer.setDataSource(),但在音频/aacp 的情况下,编解码器 could not initialize。
猜想这可以通过OpenSL ES 完成,但我仍然没有找到任何可以从 InputStream(不是从 URL)执行解码,然后播放输出的示例。
拜托了伙计们!
OpenSL ES 中的任何样本 sn-p 解码输入字节数组并将其发送到音频输出。请!只有一个条件 - 应从输入流中获取输入音频格式。
我在
OpenSL ES 上找到的唯一一本手册是Khronos OpenSL ES™ Registry,但这根本不适合初学者阅读。我宁愿死在那里寻找合适的“操作方法”示例... :(为什么这么奇怪 - 它是非常简单/虽然不方便/(java),还是非常困难(NDK)?为什么中间什么都没有?
【问题讨论】:
-
“我在整个互联网上搜索,看起来 android.media.MediaPlayer 无法播放缓冲流” - 这是因为媒体播放在与您的不同进程中运行.您的
MediaDataSource方法似乎是正确的。由于 Android 的源代码可用,请将您使用 URL 的方式与 Android 本身的使用方式进行比较(如果您直接传递 URL)。 -
@CommonsWare 在内部,MediaPlayer.setDataSource(URL) 调用私有原生函数 nativeSetDataSource(MediaHTTPService.createHttpServiceBinderIfNecessary(path), path, keys, values); (路径包含 URL;键和值包含 HTTP 请求标头的数据)。所以,没有办法进去看看..
标签: android audio-streaming shoutcast opensl