如何在Android上解析“你好”域名?

如何在Android上解析“你好”域名?,android,bonjour,Android,Bonjour,我需要让我的应用程序播放我网络上的视频文件。我知道该文件的url是: http://something.local/abc.mp4 现在,当我手动将“something.local”替换为它的真实ip地址时,MediaPlayer播放它没有问题。尽管如此,当我有上述地址时,MediaPlayer会出现错误,出现error(1,-1007) 所以我假设这是因为Android不理解“something.local”是正确的 我的问题是:我如何将某物.local“翻译”成ip,然后将其传递到Medi

我需要让我的应用程序播放我网络上的视频文件。我知道该文件的url是:

http://something.local/abc.mp4
现在,当我手动将“something.local”替换为它的真实ip地址时,
MediaPlayer
播放它没有问题。尽管如此,当我有上述地址时,
MediaPlayer
会出现错误,出现
error(1,-1007)

所以我假设这是因为Android不理解“something.local”是正确的

我的问题是:我如何将某物.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应用程序中做的。

你可以访问Android上的java、net API,并可以使用它们解析地址


然而,成功将取决于网络的正确配置。您的设备通过DHCP接收DNS服务器设置-因此您受网络提供商的支配

您应该使用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`
      }
 }

首先,您需要阅读关于Bonjour(iOS术语)或Zero配置(Linux术语)的文档

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

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

有关如何解决此问题:


对于java库,前面的答案提供了足够好的示例。

@Jens我似乎在jmdns中找不到任何允许解析域的内容。你能指出我应该找的地方吗?嗯,你好不就是苹果为zeroconf说话吗?如果是那样的话,我会看电视。如果不是,那么我的错是:DI在两个不同的Android设备上测试了这个。他们都无法解析“你好”的名字。(即“something.local”)@Konstantine bonjour/zero conf的整个要点是根本没有任何DNS服务器设置。这需要在没有DNS参与的情况下完成。大概@yydi所说的是一个典型的家庭网络,上面有一台PC,它会对
某些东西的零配置查找做出响应。本地
。DNS设置仍然存在-你只是看不到而已。@KonstantinPribluda我想这取决于底层的实现。你的答案在我的Windows PC上有效(安装了Bonjour——尽管我不确定这是否与此有关)。另一方面,在我的Android上,它失败了。唯一的问题是你引用的方法(比如getCache())不是公共的,也不是API的一部分。。。