从Android设备流式传输到shoutcast(上游)

时间:2014-07-12 04:42:32

标签: android audio stream datagram shoutcast

感谢所有人提前:)

我想在你开始阅读之前说清楚我想要开发一个基于Android的应用程序,使用Android设备作为播放器,它使用麦克风录制声音并将其发送到shoutcast服务器,如下所示:

具有互联网连接的Android设备 - > Shoutcast服务器 - >听众。

所以请不要对在Android上播放shoutcast流感到困惑,因为我不想开发播放器来播放流。如果您正在寻找开发一个播放器,然后从给定的链接下载源代码,它对我来说很好。  Click to download 源代码。

现在回到我的问题,我在过去两周内搜索了很多,并找到了This文章,这篇文章帮助我使用内置麦克风的Android设备并通过本地网络流式传输。可以使用VLC监听流。

但我想向我的shoutcast服务器发送上传,就像可以使用带有DSP插件的winamp一样,问题是:

  1. 如果我使用上面This链接中的代码,它在本地n / w上工作正常但是当我尝试使用我的shoutcast服务器进行配置时,它会出错:![UnknownHostException] in日食记录。

  2. 在shoutcast服务器上是否有任何基于url的系统,如果我将发送一个流,那么它将获取流并向我的听众广播?例如如果我想收听流(下传),我可以使用http://xx.example.com:1234;stream.mp3,我要求上传。

  3. 如何通过登录/密码建立与服务器的连接。我想做类似于DSP插件,如附图所示。

    Shoutcast DSP Plugin

2 个答案:

答案 0 :(得分:1)

在这种情况下,您链接的代码不合适。它似乎是通过UDP发送原始音频数据,这完全不是SHOUTcast所使用的。

SHOUTcast服务器没有要流式传输的HTTP接口。它们使用完全独立的协议,如果需要使用SHOUTcast服务器,则必须使用该协议。 (我应该注意到,Icecast在过去一年左右刚刚添加了HTTP PUT支持。)

幸运的是,SHOUTcast源协议非常简单。您需要做的就是发送密码,然后是换行符。如果您从服务器获得了有利的响应,请发送icy-*标题,然后发送两个换行符,然后是您的编码音频数据。几年前,当我向iOS提出这个问题时,我已经详细地概述了这个问题:https://stackoverflow.com/a/9241620/362536您可以使用像Wireshark这样的数据包嗅探器自己查看协议,并在连接Winamp SHOUTcast DSP时运行它(或其他SHOUTcast源客户端)到您的服务器。

最后,不要忘记使用适当的编解码器。使用SHOUTcast时,最好使用MP3(原样)或包含在ADTS中的AAC流。当我尝试这个项目一段时间后,我很难弄清楚如何正确编码音频,因为至少Android 2.1似乎没有办法encode to a stream and not to a file。我不是Android开发者,所以也许你会找到更好的方法!

答案 1 :(得分:0)

更改代码
UnknownHostException ()    

 UnknownHostException(hostname)    

其中hostname是Internet上服务器的名称。可能是dns或路由问题。将主机名传递给

 getByName    

或更好

getAllByName    

,记录它,并验证它是否是预期的IP地址。

这应该为日食日志添加更多信息。