我需要让我的应用播放位于我网络上的视频文件。我知道文件的网址是:
http://something.local/abc.mp4
现在,当我用其真实的ip地址手动替换“something.local”时,MediaPlayer
没有问题。尽管如此,当我使用上述地址时,MediaPlayer
会出现error (1, -1007)
错误。
所以我假设这是因为Android不理解“something.local”是正确的。
我的问题是:我如何将某些东西“本地”转换为自己的ip,以便我可以将其传递给MediaPlayer
?
一个小警告:我认为MediaPlayer
不适用于IPv6地址,所以请记住这一点......
只是旁注,以防我的情况更清楚:当我在Windows命令提示符下运行ping something.local -4
时,它会返回:
Pinging something.local [192.168.1.126] with 32 bytes of data:
Reply from 192.168.1.126: bytes=32 time=145ms TTL=64
Reply from 192.168.1.126: bytes=32 time=112ms TTL=64
Reply from 192.168.1.126: bytes=32 time=32ms TTL=64
Reply from 192.168.1.126: bytes=32 time=169ms TTL=64
Windows something.local -> 192.168.1.126
的转换是我想在Android应用中执行的操作。
答案 0 :(得分:4)
首先,您需要阅读有关Bonjour(iOS术语)或Zero Config(Linux术语)的文档。
要了解什么是什么。本地:
例如,如果用户键入steve.local。进入Web浏览器,这个 告诉系统在本地多播请求史蒂夫 网络而不是将其发送到传统的DNS服务器。如果一个 支持Bonjour的计算机名为steve,位于本地网络上 用户的浏览器会为其发送正确的IP地址。这允许 用户无需传统DNS即可访问本地主机和服务 服务器
如何解决它:
对于java库,以前的答案提供了足够好的例子。
答案 1 :(得分:3)
您应该尝试使用jmDNS库api的这个片段..可能需要进行一些更改。
JmDNS jmdns = JmDNS.create();
DNSEntry addressEntry = jmdns.getCache().getDNSEntry(name, DNSRecordType.TYPE_A, DNSRecordClass.CLASS_ANY);
if (addressEntry instanceof DNSRecord) {
ServiceInfo cachedAddressInfo = ((DNSRecord) addressEntry).getServiceInfo(true);
if (cachedAddressInfo != null) {
for (Inet4Address address : cachedAddressInfo.getInet4Addresses()) {
// use the `address`
}
}
答案 2 :(得分:-2)
您可以在Android上访问java,net APIS,并可以使用它们来解析地址。
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/InetAddress.html
但是,成功将取决于网络的正确配置。您的设备通过DHCP接收DNS服务器设置 - 因此您可以接受网络提供商