在我的 Android 应用程序中,我想读取音频流并解析它的广播元数据。我在 NPR 项目中使用 StreamProxy 让它工作: http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java? r=e4984187f45c39a54ea6c88f71197762dbe10e72
问题是它不能通过数据连接工作。NPR也有同样的问题。
总而言之,这个代理作为本地 Web 服务器运行,在应用程序和远程流之间建立一个接口。它使用生成的自定义端口在 localhost 127.0.0.1 上运行。当服务器读取流数据时,它会将其复制到应用程序,您可以在StreamProxy的第 223 行读取:
client.getOutputStream().write(buff, 0, readBytes);
但是,该行通过数据连接产生此异常:
java.net.SocketException: sendto failed: EPIPE (Broken pipe)
我不是套接字和流媒体方面的专家。在这种情况下,我不明白 wifi 和数据连接之间有什么区别。