如何在Android上解析Bonjour域名?

时间:2011-12-12 06:17:06

标签: android bonjour

我需要让我的应用播放位于我网络上的视频文件。我知道文件的网址是:

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应用中执行的操作。

3 个答案:

答案 0 :(得分:4)

首先,您需要阅读有关Bonjour(iOS术语)或Zero Config(Linux术语)的文档。

要了解什么是什么。本地:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NetServices/Articles/about.html#//apple_ref/doc/uid/TP40002458-SW1

  

例如,如果用户键入steve.local。进入Web浏览器,这个   告诉系统在本地多播请求史蒂夫   网络而不是将其发送到传统的DNS服务器。如果一个   支持Bonjour的计算机名为steve,位于本地网络上   用户的浏览器会为其发送正确的IP地址。这允许   用户无需传统DNS即可访问本地主机和服务   服务器

如何解决它:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NetServices/Articles/NetServicesArchitecture.html#//apple_ref/doc/uid/20001074-SW1

对于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服务器设置 - 因此您可以接受网络提供商